probleme de syntaxe?

probleme de syntaxe? - PHP - Programmation

Marsh Posté le 27-03-2009 à 11:59:31    

Bonjour,
Voilà,je me demande pourquoi j'ai une erreur de variable indéfinie sur ce script en local avec WAMP et EASYPHP alors qu'il fonctionne tres bien en ligne (je l'ai repris pour modif en local).
 
wamp me donne une variable indéfinie
Notice: Undefined variable: spec_selectionne in C:\Program Files\wamp\www\dept\pagination3.php on line 242
 
voilà la fameuse: $query  = "SELECT specialiste, adresse, code, ville, detail, tel FROM specialiste WHERE specialiste='$spec_selectionne' order by ville asc";
 
alors que deux lignes plus haut j'ai
    $spec_selectionne =$_POST['specialiste'];
 
 
en plus,j'ai une notice  use of an undefined constant "" assumed ""   qui correspondrait à ça
  <?php echo ($det_spec[$d]." ".à." " ); ?>...
 
En utilisant easyphp, j'ai encore plus d'erreur:
 
Warning: mysql_free_result(): supplied argument is not a valid MySQL result resource in C:\Program Files\EasyPHP 2.0b1\www\dept\pagination3.php on line 174
et
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\Program Files\EasyPHP 2.0b1\www\dept\pagination3.php on line 245
 
en plus de la meme variable indefinie signalée sur wamp....
Mais je comprends pas.
Je joins la partie du script
 

Code :
  1. if(isset($idr) && $idr != -1)
  2.     {
  3.         /* Création de la requête pour avoir les specialistes de ce departement */
  4.         $sql2 = "SELECT `id_specialiste`, `specialiste`,`ville`,`detail`".
  5.         " FROM `specialiste`".
  6.         " WHERE `id_departement` = ". $idr ."".
  7.         " ORDER BY `ville`;";
  8.         if($connexion != false)
  9.         {
  10.             $rech_spec = mysql_query($sql2, $connexion);
  11.             /* Un petit compteur pour les specialistes */
  12.             $nd = 0;
  13.             /* On crée trois tableaux pour les numéros et les noms des specialistes */
  14.             $code_spec = array();
  15.             $nom_spec = array();
  16.   $ville_spec = array();
  17.   $det_spec = array();
  18.             /* On va mettre les numéros et noms des specialistes dans les trois tableaux */
  19.             while($ligne_spec = mysql_fetch_assoc($rech_spec))
  20.             {
  21.                 array_push($code_spec, $ligne_spec['id_specialiste']);
  22.                 array_push($nom_spec, $ligne_spec['specialiste']);
  23.    array_push($ville_spec, $ligne_spec['ville']);
  24.    array_push($det_spec, $ligne_spec['detail']);
  25.                 $nd++;
  26.             }
  27.    /* Maintenant on peut construire la liste déroulante */
  28.             ?>
  29.     <select name="specialiste" id="specialiste" >
  30.       <?php 
  31.             for($d = 0; $d<$nd; $d++)
  32.             {
  33.                 ?>
  34.       <option value="<?php echo($nom_spec[$d]); ?>"<?php echo((isset($spec_selectionne) && $spec_selectionne == $code_spec[$d])?" selected=\"selected\"":null); ?>><?php echo($nom_spec[$d]." " ); ?>
  35.       <br>
  36.       <br />
  37.   <?php echo ($det_spec[$d]." ".à." " ); ?>
  38.    <br>
  39.       <br />
  40.       <?php echo($ville_spec[$d]); ?></option>
  41.       <?php
  42.             }
  43. ?>
  44.     </select>
  45.     <?php
  46. }
  47.         /* Un petit coup de balai */
  48.         mysql_free_result($rech_spec);
  49.  }
  50.  ?>
  51.  
  52.     <input type="submit" name="ok" id="ok" value="Envoyer" />
  53.   <br />
  54. <?php
  55. if(isset($_POST['ok']) && isset($_POST['specialiste']) && $_POST['specialiste'] != "" )
  56. {
  57.     $spec_selectionne =$_POST['specialiste'];
  58. ?>
  59. <br />Votre choix<br /> <b><?php echo($spec_selectionne); ?></b>
  60. <?php
  61. }
  62. ?>
  63. <?php
  64. $query  = "SELECT specialiste, adresse, code, ville, detail, tel FROM specialiste WHERE specialiste='$spec_selectionne' order by ville asc";
  65. $result = mysql_query($query);
  66. while($row = mysql_fetch_array($result, MYSQL_ASSOC))
  67. {
  68.    echo "<br>"."<strong>{$row['detail']}</strong>"." " ."<br>{$row['adresse']}"." "."{$row['code']}"." "."{$row['ville']}"." "." "."<br><b>{$row['tel']}"."<br></b> ";
  69. }


si quelqu'un voit pourquoi.....?
Merci beaucoup

Reply

Marsh Posté le 27-03-2009 à 11:59:31   

Reply

Marsh Posté le 27-03-2009 à 12:49:51    

chanteur06 a écrit :

voilà la fameuse: $query  = "SELECT specialiste, adresse, code, ville, detail, tel FROM specialiste WHERE specialiste='$spec_selectionne' order by ville asc";
 
alors que deux lignes plus haut j'ai
    $spec_selectionne =$_POST['specialiste'];


Oui, mais si je lis bien ton code, l'assignation se fait sous condition :

Code :
  1. if(isset($_POST['ok']) && isset($_POST['specialiste']) && $_POST['specialiste'] != "" )
  2. {
  3.     $spec_selectionne =$_POST['specialiste'];
  4.  
  5. ?>
  6. <br />Votre choix<br /> <b><?php echo($spec_selectionne); ?></b>
  7. <?php
  8. }
  9. ?>
  10. <?php
  11. $query  = "SELECT specialiste, adresse, code, ville, detail, tel FROM specialiste
  12. WHERE specialiste='$spec_selectionne' order by ville asc";


Pour les erreurs EasyPHP, il faudrait nous dire à quelle ligne ça correspond.
 
Et je dis "si je lis bien ton code" parce que c'est mal codé :
- Pour commencer, sois cohérent : <br> ou <br /> mais pas les deux. Et évite la balise <b> (dépréciée)
- Sans parler de modèle MVC, c'est bien de séparer un minimum la présentation du contenu. Parce que là, tu mélanges allégrement le code php avec le html.

Reply

Marsh Posté le 27-03-2009 à 12:53:12    

Citation :

voilà la fameuse: $query  = "SELECT specialiste, adresse, code, ville, detail, tel FROM specialiste WHERE specialiste='$spec_selectionne' order by ville asc";

Au début, j'ai pensé au problème classique des simples quotes et des doubles quotes. Pour rappel, si un dollar se trouve quelque part entre deux simple quotes, il reste un dollar, alors que s'il se trouve entre deux double quotes, il est interprété comme étant le début du nom d'une variable. Mais le mieux est encore d'utiliser la concaténation avec le point. Donc, j'aurais essayé :

$query  = "SELECT specialiste, adresse, code, ville, detail, tel FROM specialiste WHERE specialiste='".$spec_selectionne."' order by ville asc";

Mais le message indique que $spec_selectionne n'est pas défini, donc cela veut dire que le programme atteint la requête sans passer par la ligne dans le if qui définit cette variable.


Message édité par olivthill le 27-03-2009 à 12:59:14
Reply

Marsh Posté le 27-03-2009 à 15:30:51    

Non, ni le placement dans le If ni le point devant $ ne change klk chose...!
Le plus étonnant c'est que ça fonctionne sans erreur sur le site en ligne chez OVH...
edeelic.com

Reply

Marsh Posté le 27-03-2009 à 15:49:00    

chanteur06 a écrit :

Non, ni le placement dans le If ni le point devant $ ne change klk chose...!
Le plus étonnant c'est que ça fonctionne sans erreur sur le site en ligne chez OVH...
edeelic.com


 :heink:  
C'est ton code je l'ai repris tel que... Je ne vois pas trop comment tu peux le placer "dans" le IF sachant qu'il y est déjà.
 
Ce que je voulais dire, c'est :
En gros tu as

Code :
  1. if(isset($_POST['ok']) && isset($_POST['specialiste']) && $_POST['specialiste'] != "" ) {
  2.    $spec_selectionne =$_POST['specialiste'];
  3. }


SI ta condition n'est pas remplie, tu ne mets rien dans $spec_selectionne.
Du coup, $spec_selectionne n'est pas défini.
Du coup, tu as un message d'erreur Notice: Undefined variable: spec_selectionne.
 
1. Essaye de prendre le temps d'épurer ton code en dégageant d'un côté la présentation et de l'autre le code proprement dit (placé dans des fonctions que tu appelles dans la partie présentation).
2.Apprends à débugger un programme :
echo $mavariable; => te permet de voir si ce qu'elle contient est conforme à ce que tu attends
var_dump($mavariable); => pareil, mais détaille complétement le contenu de ta variable (y compris pour les tableaux et les objets)
 
En l'occurence, ici tu devrais vérifier le contenu de ton $_POST au début de ta page, le contenu de $spec_selectionne avant depasser ta requête, les requêtes et les résultats de tes requêtes...

Reply

Marsh Posté le 27-03-2009 à 17:00:22    

C'est juste que les erreurs sont à décocher dans WAMP!

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed