Undefined variable en PHP5 et MYSQL5

Eléphanteau du PHP | 15 Messages

03 avr. 2007, 18:40

Bonjour,

J'ai un code qui fonctionne bien en PHP4, mais voilà en PHP5, j'ai l'erreur suivante Notice: Undefined variable: row in C:\\Web\browse.php on line 55
Cette erreur se produit à la lecture de la table categories, je suis novice en PHP, d'après ce que j'ai trouvé dans les différents foruml il semble qu'il faille déclarer les variables en php5, mais voilà je ne sais pas comment faire. Je place le code ci-après,
l'erreur se produit sur cette ligne
<td class="ms-color2-tl"><a href='browse.php?id=<?php echo($row['id']) ?>'> <?php echo($row['description']) ?></a></td>

Merci de votre aide.

Jean-Michel

<?php
$dbconn = @mysql_connect('localhost', 'root', 'mdp');
if (!$dbconn)
{
die('Error connecting to DB!');
}
	 //if (! @mysql_select_db('letschip_lcinewdb') ) 
	if (! @mysql_select_db('nombase') ) 
	{ 
		die( '<p>Unable to locate the main ' . 
       	 	'database at this time.</p>' ); 
	} 


if(isset($_GET['id']))
	$ID = $_GET['id'];
else
	$ID = 1;  

// Shipping is 3.50 per unit weight
$ship_factor = 3.5  
?>
<html>

<head>
<meta http-equiv="Content-Language" content="en-us">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>Browse Products</title>
<style>
<!--
.ms-color2-main { border-left-style: none; border-right-style: none; border-top-style: none; 
               border-bottom: 1.5pt solid black; background-color: silver }
.ms-color2-tl { font-weight: bold; color: white; border-left-style: none; border-right-style: 
               none; border-top-style: none; border-bottom: 1.5pt solid black; 
               background-color: maroon }
.ms-color2-top { font-weight: bold; color: white; border-left-style: none; border-right-style: 
               none; border-top-style: none; border-bottom: 1.5pt solid black; 
               background-color: maroon }
-->
</style>
</head>

<body bgcolor="#669900" link="#FFFF00" vlink="#FFFFFF">

<p><b><font face="Verdana" color="#FFFF00" size="5">Browse Products By Team.</font></b></p>
<table border="1" width="100%" id="table1" class="ms-color2-main">
	<!-- fpstyle: 9,011111100 -->
	<tr>
	<?
		$sql = "SELECT * from categories";
		$result = @mysql_query($sql);
		while  ($row = mysql_fetch_array($result))
		{
		?>
		<td class="ms-color2-tl"><a href='browse.php?id=<?php echo($row['id']) ?>'> <?php echo($row['description']) ?></a></td>
		<?
		}
	?>
	</tr>
</table>
<p>&nbsp;</p>

ViPHP
ViPHP | 3607 Messages

03 avr. 2007, 18:45

bonjour,
remplace ceci:
        $result = @mysql_query($sql);
par
        $result = mysql_query($sql) or die(mysql_error());

Invité
Invité n'ayant pas de compte PHPfrance

03 avr. 2007, 19:08

ça marche pas .

Jean-michel

ViPHP
ViPHP | 3607 Messages

03 avr. 2007, 20:18

évidemment que ça ne marche pas, mais quel est le message d'erreur obtenu ?

Invité
Invité n'ayant pas de compte PHPfrance

03 avr. 2007, 20:30

Toujours la même erreur :

Notice: Undefined variable: row in C:\Web\browse.php on line 56

Mais j'ai l'impression que la select ne se fait pas, la connexion à la base s'effectue (ça j'en suis sûr) parce que j'ai mis un message, par contre les accès aux tables ne se font pas.

Je suis avec IIS5 , avez-vous une idée ?

Jean-Michel

Mammouth du PHP | 505 Messages

03 avr. 2007, 21:03

Déjà, commence par virer tous les @ devant les fonctions, cacher les messages d'erreur ne resous pas les erreurs... Et quand ca marche pas, on sait pas pourquoi...

Ensuite, qd tu verras les messages d'erreurs, tu sauras à quel endroit ca cafouille.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

03 avr. 2007, 21:06

Déjà, pour le débugage, vire les @ qui feront apparaitre les messages d'erreurs.

Ensuite, le message d'erreur signifie que $row n'existe pas, donc que la fonction mysql_fetch_array() n'arrive pas à retourner qqchose.

Par contre, je ne comprend pas comment on rentre dans le while si $row n'est pas renseigné
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

03 avr. 2007, 21:45

Par contre, je ne comprend pas comment on rentre dans le while si $row n'est pas renseigné
L'un des champs "description" ou "id" n'existe pas dans la table "categories"... souci d'orthographe peut être. :-k

N'oublie pas le point virgule en fin de echo.
Modifié en dernier par Truc le 03 avr. 2007, 21:46, modifié 1 fois.

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphanteau du PHP | 15 Messages

03 avr. 2007, 21:46

Voilà, je mets mon code et le script de création de la table, si quelqu'un a la gentillesse de tester.

Merci à vous,

Voici le script de création de la table

Code : Tout sélectionner

CREATE TABLE `categories` ( `id` int(11) NOT NULL auto_increment, `description` varchar(100) NOT NULL default '', PRIMARY KEY (`id`) ) TYPE=MyISAM AUTO_INCREMENT=1 ;
Voici le code
<?php
$dbconn = @mysql_connect('localhost', 'root', 'mdp');
if (!$dbconn)
{
die('Error connecting to DB!');
}
	 //if (! @mysql_select_db('letschip_lcinewdb') ) 
	if (! @mysql_select_db('nombase') ) 
	{ 
		die( '<p>Unable to locate the main ' . 
       	 	'database at this time.</p>' ); 
	} 


if(isset($_GET['id']))
	$ID = $_GET['id'];
else
	$ID = 1;  

// Shipping is 3.50 per unit weight
$ship_factor = 3.5  
?>
<html>

<head>
<meta http-equiv="Content-Language" content="en-us">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>Browse Products</title>
<style>
<!--
.ms-color2-main { border-left-style: none; border-right-style: none; border-top-style: none; 
               border-bottom: 1.5pt solid black; background-color: silver }
.ms-color2-tl { font-weight: bold; color: white; border-left-style: none; border-right-style: 
               none; border-top-style: none; border-bottom: 1.5pt solid black; 
               background-color: maroon }
.ms-color2-top { font-weight: bold; color: white; border-left-style: none; border-right-style: 
               none; border-top-style: none; border-bottom: 1.5pt solid black; 
               background-color: maroon }
-->
</style>
</head>

<body bgcolor="#669900" link="#FFFF00" vlink="#FFFFFF">

<p><b><font face="Verdana" color="#FFFF00" size="5">Browse Products By Team.</font></b></p>
<table border="1" width="100%" id="table1" class="ms-color2-main">
	<!-- fpstyle: 9,011111100 -->
	<tr>
	<?
		$sql = "SELECT * from categorie";
  	 	$result = @mysql_query($sql);
		while  ($row = mysql_fetch_array($result))
		{
		?>
		<td class="ms-color2-tl"><a href='browse.php?id=<?php echo($row['id']) ?>'> <?php 

echo($row['description']) ?></a></td>
		<?
		}
	?>
	</tr>
</table>
<p>&nbsp;</p>

</body>

</html>

Eléphant du PHP | 170 Messages

04 avr. 2007, 10:54

D'où vient cette impression que tu n'écoutes pas ce qu'on te dit ?

Il y a 3 ou 4 personnes qui te demandent de virer les @ de ton code et à la lecture de celui-ci ce n'est pas fait.
Tu ne semble pas très coopératif dans le réglement de ton problème.
Benjamin Franklin a dit :
Tu me dis, j'oublie. Tu m'enseignes, je me souviens. Tu m'impliques, j'apprends

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

04 avr. 2007, 10:56

D'une manière plus nuancée, je suis 300% d'accord avec Expreg ...

Nous avons été plusieurs à te donner des pistes, nous ne t'avons pas redemandé ton code, tu ne nous as pas écouté :(

Pour qu'on arrive à t'aider, il faudrait peut être que tu mettes un peu du tiens ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Invité
Invité n'ayant pas de compte PHPfrance

04 avr. 2007, 13:07

Bonjour,

J'avais enlevé les @ mais comme ça na faisais rein, je vous donnais mon code pour essayer de vous aider, désolé si ce n'était pas ce que vous attendiez, je rectifie donc et voici ce que j'ai après avoir enle vé les @.


J'ai enlevé les @, le message d'erreur est toujours le même soit : Notice: Undefined variable: row in C:\\Web\browse.php on line 55

Jean-Michel

Eléphant du PHP | 259 Messages

04 avr. 2007, 14:35

un truc tout bete :

dans le code de la création de table, tu crées une table "catégories"...
et dans ton code PHP, tu recherches tes infos dans une table "catégorie"...
je pense qu'il y a quelque chose à en conclure... ;)

accessoirement je sais pas comment est configuré ton serveur, mais afficher les erreurs est un excellent remede contre la fatigue visuelle et l'étourderie ;)

ViPHP
ViPHP | 3607 Messages

04 avr. 2007, 14:41

Bonjour,

J'avais enlevé les @ mais comme ça na faisais rein, je vous donnais mon code pour essayer de vous aider, désolé si ce n'était pas ce que vous attendiez, je rectifie donc et voici ce que j'ai après avoir enle vé les @.


J'ai enlevé les @, le message d'erreur est toujours le même soit : Notice: Undefined variable: row in C:\\Web\browse.php on line 55

Jean-Michel
il t'avais également été conseillé d'afficher les erreurs sql, via des appels aux fonctions mysql de ce genre
mysql_*(...) or die(mysql_error());

Invité
Invité n'ayant pas de compte PHPfrance

04 avr. 2007, 14:46

C'est ce que j'ai fait, j'ai placé cette ligne
$result = mysql_query($sql) or die(mysql_error());
mais aucune erreur ne s'affiche, mis à part Notice: Undefined variable: row in C:\\Web\browse.php on line 55

Jean-Michel