Avatar billede qallan Nybegynder
13. juli 2002 - 01:12 Der er 13 kommentarer

Problemer med mysql og PHP 4.2.1

Jeg kører Win2000 + Mysql og Php 4.2.1.
Efter skift til php 4.2.1 fra 4.0.6 ( hvor det virkede fint)
Får jeg denne fejl Undefined variable: ID
i script
<?

$Handler = mysql_connect($MySQLserver,$MySQLusername,$MySQLpassword);
mysql_select_db($MySQLdatabase, $Handler);

$Row = mysql_fetch_array(mysql_query("SELECT * FROM $MySQLtable WHERE ID = '$ID'"));

mysql_query("UPDATE $MySQLtable SET Hits = Hits+1 WHERE ID = '$ID'");


?>
Hvad er der galt ?
Avatar billede ztyxx Nybegynder
13. juli 2002 - 01:15 #1
går ud fra at felt til $ID er en form for INT, så der skal ikke ' ' om
Avatar billede lequet Nybegynder
13. juli 2002 - 01:16 #2
Prøv dette

$Row = mysql_fetch_array(mysql_query("SELECT * FROM $MySQLtable WHERE ID = '" . $_POST['ID'] . "'"));
Avatar billede dar Nybegynder
13. juli 2002 - 01:17 #3
Variablen $ID er ikke deklareret (sikkert fordi du har den fra en submitted form fra en anden side og register_globals er sat til off) og error_reporting er sat til E_ALL, fordi den nye installation har pillet ved din php.ini
Avatar billede dar Nybegynder
13. juli 2002 - 01:22 #4
register_globals gør at alle variabler fra submittede forms o.l. bliver til globale variabler (http://server/lal.php?noget=andet giver en variabel der hedder noget i lal.php) og error_reporting sætter niveauet for fejl php-scriptene giver videre til dig. Normalt er det en pestilens hvis det giver fejl under E_PARSE...
Avatar billede dar Nybegynder
13. juli 2002 - 01:24 #5
Løsningen er jo så at sætte variablerne til noget man kan bruge, f.x.:

error_reporting = E_ALL - E_NOTICE

og

register_globals = On
Avatar billede dar Nybegynder
13. juli 2002 - 01:24 #6
Og det er så i php.ini...
Avatar billede lequet Nybegynder
13. juli 2002 - 01:26 #7
Eller bare vænne sig til at register_globals er sat til off, hvilket er gjort af sikkerhedsmæssige hensyn (hovedsagligt), og som en sidegevinst gør nogle ting nemmere :)
Avatar billede ztyxx Nybegynder
13. juli 2002 - 01:30 #8
det jeg kan se som problemet i den nye version er, at har man et kæmpe site, kodet på "gammeldags" manér, og ens udbyder ændrer register_globals til Off, så skal man ligepludselig til at i gang med at kode en hulens masse om
Avatar billede qallan Nybegynder
13. juli 2002 - 01:44 #9
jeg har prøvet at indsætte $Row = mysql_fetch_array(mysql_query("SELECT * FROM $MySQLtable WHERE ID = '" $_POST['ID'] "'"));
Så får jeg denne fejl i linjen parse error, unexpected T_VARIABLE in ????????????
Avatar billede qallan Nybegynder
13. juli 2002 - 09:54 #10
???????????? er ikke med i fejlen. Jeg har prøvet at sætte "globals = on" og så virker det gammel script igen.
Men det hjælper mig ikke så meget, da min udbyder kører med "globals = off".
Jeg vil arbejde videre med det, men håber der er en der kan hjælpe mig, med at løse dette problem.
I Mysql databasen er ID sat = Int, håber det kan hjælpe.
Avatar billede lequet Nybegynder
13. juli 2002 - 12:33 #11
Du skal bare huske at hvis variabolen kommer fra en form skal du enten bruge $_POST['formfeltetsnavn'] eller $_GET['formfeltetsnavn'] alt efter om du har skrevet method="post" eller method="get" du kan ikke længere bare bruge $formfeltetsnavn

Desuden findes der også en rækker andre arrays, du muligvis får brug for

$_COOKIE[] Til cookies
$_SESSION[] Til sessions
$_SERVER[] til ting som f.eks. PHP_SELF

Omkring den linie, så prøv at lav den om sådan her

$query = "SELECT * FROM $MySQLtable WHERE ID = '" . $_POST['ID'] . "'" ;
$Row = mysql_fetch_array(mysql_query($query));

Det skulle kunne hjælpe
Avatar billede qallan Nybegynder
14. juli 2002 - 12:17 #12
med disse linier indsat:
$query = "SELECT * FROM $MySQLtable WHERE ID = '" . $_POST['ID'] . "'" ;
$Row = mysql_fetch_array(mysql_query($query));
får jeg denne fejl.
Parse error: parse error, unexpected T_VARIABLE in.

Scriptet virker som en link counter til mine sider, bliver kaldt på denne måde:
<a href="ReDirector.phtml?ID=28" target="mainFrame">
Jeg har også prøvet med $_GET['ID'], men får samme fejl.
Jeg har søgt rundt på php.net, for at finde den rigtige
løsning på problemet, men uden det store held.
Jeg håber med de nye oplysninger, at det kan hjælpe på
løsningen.
Avatar billede qallan Nybegynder
19. august 2002 - 23:44 #13
Jeg har selv løst problemet, ved at indsætte dette :
$ID = isset($_REQUEST["ID"]) ? $_REQUEST["ID"] : "";
Så nu virker det med PHP 4.2.1, så jeg lukke spørgsmålet.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester