Undefined index, use of undefined constant

Eléphanteau du PHP | 22 Messages

17 juin 2005, 17:05

Bonjour,

Je testais le code suivant sur ma page perso free et je n'avais pas de souci. Aujourd'hui je transfère mon code sur un hébergeur et j'ai les messages d'erreur suivant :
"PHP Notice: Undefined index: Salle in c:\clients\hotelapinede\francais\800\salles.php on line 229 PHP Notice: Use of undefined constant id_salle - assumed 'id_salle' in c:\clients\hotelapinede\francais\800\salles.php on line 239 PHP Notice: Use of undefined constant id_salle - assumed 'id_salle' in c:\clients\hotelapinede\francais\800\salles.php on line 239 PHP Notice: Use of undefined constant id_salle - assumed 'id_salle' in c:\clients\hotelapinede\francais\800\salles.php on line 239 PHP Notice: Use of undefined constant id_salle - assumed 'id_salle' in c:\clients\hotelapinede\francais\800\salles.php on line 239 PHP Notice: Use of undefined constant id_salle - assumed 'id_salle' in c:\clients\hotelapinede\francais\800\salles.php on line 239 PHP Notice: Use of undefined constant id_salle - assumed 'id_salle' in c:\clients\hotelapinede\francais\800\salles.php on line 239 "

Je sais que mes variables ne sont pas déclarée correctement mais je ne trouve pas la solution.
Voici mon code :
<?
      include("connect.inc.php");  
      mysql_connect($host, $user, $password)or die("Connexion au serveur impossible");
      $db = @mysql_select_db("$bdd") or die ("Sélection de la base de données impossible");
      $req="select * from salle";
      $res= @mysql_query($req);
      
      echo "<form>";
      echo "<select name='Salle' class='select' onChange='javascript:submit();'>";
      echo "<option value=0>Choisissez une salle</option>";
      while ($ligne=mysql_fetch_array($res))
      {
      echo "<option value=$ligne[id_salle]";
      if ($ligne[id_salle]==$Salle)
      {
      echo " selected";
      }
      echo ">$ligne[nom_salle]"; 
      }
      echo "</select>";
      echo "</form>";
      ?>
      </td>
      </tr>
      </table>
      <?
      if (isset($Salle))
      {
      $req="select * from salle where id_salle=$Salle";
      $res= @mysql_query($req);
      while ($ligne=@mysql_fetch_array($res))
      { 
      echo "<table width='456' height='20' cellspacing='0' cellpadding='0' class='table4'>";
      echo "<tr>";
      echo "<td><p class='p8'>$ligne[nom_salle]</p></td>";
      echo "</tr>";
      echo "<table width='456' height='94' cellspacing='0' cellpadding='0' class='table4'>";
      echo "<tr>"; 
      echo "<td width='68' rowspan='2' class='td5'><p class='p3b'>Dimensions</p></td>";
      echo "<td width='54' rowspan='2' class='td5'><p class='p3b'>Surface</p></td>";
      echo "<td height='22' colspan='5' align='center' class='td5'><p class='p3b'>CAPACITE</p></td>";
      echo "</tr>";
      echo "<tr>"; 
      echo "<td width='49' class='td5'><p class='p3b'>Style U</p></td>";
      echo "<td width='79' class='td5'><p class='p3b'>Style théatre</p></td>";
      echo "<td width='70' class='td5'><p class='p3b'>Style écolier</p></td>";
      echo "<td width='72' class='td5'><p class='p3b'>Style banquet</p></td>";
      echo "<td width='64' class='td5'><p class='p3b'>Style cocktail</p></td>";
      echo "</tr>";
      echo "<tr>"; 
      echo "<td height='43' class='td5'><p class='p3b'>$ligne[dimension]</p></td>";
      echo "<td class='td5'><p class='p3b'>$ligne[surface_salle]</p></td>";
      echo "<td class='td5'><p class='p3b'>$ligne[capacite_u]</p></td>";
      echo "<td class='td5'><p class='p3b'>$ligne[capacite_theatre]</p></td>";
      echo "<td class='td5'><p class='p3b'>$ligne[capacite_ecolier]</p></td>";
      echo "<td class='td5'><p class='p3b'>$ligne[capacite_banquet]</p></td>";
      echo "<td class='td5'><p class='p3b'>$ligne[capacite_cocktail]</p></td>";
      echo "</tr>";
      echo "</table>";
      } 
      }
      else
      {
      $req1="select * from salle where id_salle=1";
      $res1= @mysql_query($req1);
      $ligne1= @mysql_fetch_array($res1);
      echo "<table width='456' height='20' cellspacing='0' cellpadding='0' class='table4'>";
      echo "<tr>";
      echo "<td><p class='p8'>$ligne1[nom_salle]</p></td>";
      echo "</tr>";
      echo "<table width='456' height='94' cellspacing='0' cellpadding='0' class='table4'>";
      echo "<tr>"; 
      echo "<td width='68' rowspan='2' class='td5'><p class='p3b'>Dimension</p></td>";
      echo "<td width='54' rowspan='2' class='td5'><p class='p3b'>Surface</p></td>";
      echo "<td height='22' colspan='5' align='center' class='td5'><p class='p3b'>CAPACITE</p></td>";
      echo "</tr>";
      echo "<tr>"; 
      echo "<td width='49' class='td5'><p class='p3b'>Style U</p></td>";
      echo "<td width='79' class='td5'><p class='p3b'>Style théatre</p></td>";
      echo "<td width='70' class='td5'><p class='p3b'>Style écolier</p></td>";
      echo "<td width='72' class='td5'><p class='p3b'>Style banquet</p></td>";
      echo "<td width='64' class='td5'><p class='p3b'>Style cocktail</p></td>";
      echo "</tr>";
      echo "<tr>"; 
      echo "<td height='43' class='td5'><p class='p3b'>$ligne1[dimension]</p></td>";
      echo "<td class='td5'><p class='p3b'>$ligne1[surface_salle]</p></td>";
      echo "<td class='td5'><p class='p3b'>$ligne1[capacite_u]</p></td>";
      echo "<td class='td5'><p class='p3b'>$ligne1[capacite_theatre]</p></td>";
      echo "<td class='td5'><p class='p3b'>$ligne1[capacite_ecolier]</p></td>";
      echo "<td class='td5'><p class='p3b'>$ligne1[capacite_banquet]</p></td>";
      echo "<td class='td5'><p class='p3b'>$ligne1[capacite_cocktail]</p></td>";
      echo "</tr>";
      echo "</table>";
      }
      ?>

Mammouth du PHP | 19672 Messages

17 juin 2005, 19:34

Bénédicte, je l'ai fait moi-même cette fois-ci, la prochaine fois, n'oublie pas les boutons [ php ] ou [ quote ] pour mettre un bloc de citation ou du code et fais une prévisualisation de ton message: c'est plus agréable à lire comme ça, tu ne trouves pas ?

Bon, ton problème maintenant:

Première chose, tu vas isoler un peu le PHP du HTML :
Au lieu de
echo "<form>"; 
Tu vas tout remplacer par
?>
<form>
<?php
Il est complètement inutile de faire interpréter le html par PHP, ça ne sert à rien d'autre que ralentir l'application. En séparant, tu verras en outre plus facilement les erreurs parce que la coloration syntaxique va changer aussi.

Enfin, tes messages d'erreur indiquent le numéro de la ligne et la nature de l'erreur: "undefined index" ça veut dire que tu fais appel à un index de tableau inexistant. regarde donc là ou tu as la ligne avec un tableau du style $tableau['Salle'] : cette variable n'existe pas donc tu as une erreur.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 22 Messages

17 juin 2005, 20:20

Je ne suis pas habituée des forums donc mille excuses pour la forme mais je sais désormais comment faire.


Je suis d'accord deux variables n'existent pas id_salle et Salle donc je dois les déclarer par exemple :
 quelque chose = $_POST['Salle'];
j'ai essayé:
$Salle=$_POST['Salle'];
Mais j'ai toujours un message d'erreur et cela ne m'étonne pas.

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

17 juin 2005, 23:59

pour récupérer $_POST('Salle'] il faudrait que tu envoies ton formulaire avec la method POST

or la tu ne spécifies aucune méthode, et il me semble que la méthode par défaut est GET

donc tu remplaces
<form>
par
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
$_SERVER['PHP_SELF'] est une variable prédéfinie qui contient le nom du script courant, ton formulaire va donc pointer vers la même page

Eléphanteau du PHP | 22 Messages

18 juin 2005, 06:09

Oui effectivement ce serait mieux si je lui indiquait la méthode!

En fait mon souci est que je ne sais pas coder quand le Register_Global est à OFF?

Mammouth du PHP | 19672 Messages

18 juin 2005, 09:44

Avec le registe_globals à OFF, en fait, tu dois récupérer tes valeurs de formulaire en les identifiant explicitement. Selon la méthode du formulaire avec $_POST ou $_GET. Donc par exemple:
$salle  = $_POST['salle'];
// Ou bien encore
$salle2 = $_GET['salle2'];
Ensuite, pour t'y retrouver dans ton code plus facilement, essaye de prendre la bonne habitude de séparer le PHP du HTML. Pour ne pas ralentir l'application globale, évite à chaque fois que c'est possible de faire interpréter le PHP. L'autre avantage et que tu liras plus facilement ton code et tu débuggueras plus facilement: Le code que tu as montré remis en forme (et corrigé sur certains détails, mais il faudra que tu vérifies, tes tableaux HTML étaient erronés, ma correction ne va peut-être pas dans le sens de ce que tu voulais:
<?
include("connect.inc.php");
mysql_connect($host, $user, $password)or die("Connexion au serveur impossible");
$db = mysql_select_db("$bdd") or die ("Sélection de la base de données impossible");
$req="select * from salle";
$res= mysql_query($req);
?>
<table>
  <tr>
    <td>
      <form>
        <select name='Salle' class='select' onChange='javascript:submit();'>
        <option value="0">Choisissez une salle</option>
<?php
while ($ligne=mysql_fetch_array($res))
{
?>
        <option value="<?php echo($ligne['id_salle']); ?>" <?php echo(($ligne['id_salle']==$Salle)?"selected": null); ?>><?php echo($ligne['nom_salle']); ?></select>
<?php
}
?>
      </form>
    </td>
  </tr>
</table>
<?
if(isset($Salle))
{
    $req = "select * from salle where id_salle = ". $Salle;
    $res = mysql_query($req);
    while ($ligne = @mysql_fetch_array($res))
    {
?>
<table width='456' height='20' cellspacing='0' cellpadding='0' class='table4'>
  <tr>
    <td><p class='p8'><?php echo($ligne['nom_salle']); ?></p></td>
  </tr>
  <tr>
    <td>
      <table width='456' height='94' cellspacing='0' cellpadding='0' class='table4'>
        <tr>
          <td width='68' rowspan='2' class='td5'><p class='p3b'>Dimensions</p></td>
          <td width='54' rowspan='2' class='td5'><p class='p3b'>Surface</p></td>
          <td height='22' colspan='5' align='center' class='td5'><p class='p3b'>CAPACITE</p></td>
        </tr>
        <tr>
          <td width='49' class='td5'><p class='p3b'>Style U</p></td>
          <td width='79' class='td5'><p class='p3b'>Style théatre</p></td>
          <td width='70' class='td5'><p class='p3b'>Style écolier</p></td>
          <td width='72' class='td5'><p class='p3b'>Style banquet</p></td>
          <td width='64' class='td5'><p class='p3b'>Style cocktail</p></td>
        </tr>
        <tr>
          <td height='43' class='td5'><p class='p3b'><?php echo($ligne['dimension']); ?></p></td>
          <td class='td5'><p class='p3b'><?php echo($ligne['surface_salle']); ?></p></td>
          <td class='td5'><p class='p3b'><?php echo($ligne['capacite_u']); ?></p></td>
          <td class='td5'><p class='p3b'><?php echo($ligne['capacite_theatre']); ?></p></td>
          <td class='td5'><p class='p3b'><?php echo($ligne['capacite_ecolier']); ?></p></td>
          <td class='td5'><p class='p3b'><?php echo($ligne['capacite_banquet']); ?></p></td>
          <td class='td5'><p class='p3b'><?php echo($ligne['capacite_cocktail']); ?></p></td>
        </tr>
      </table>
<?php
    }
}
else
{
    $req1="select * from salle where id_salle=1";
    $res1= mysql_query($req1);
    $ligne1= mysql_fetch_array($res1);
?>
      <table width='456' height='20' cellspacing='0' cellpadding='0' class='table4'>
        <tr>
          <td><p class='p8'><?php echo($ligne1['nom_salle']); ?></p></td>
        </tr>
        <tr>
          <td>
            <table width='456' height='94' cellspacing='0' cellpadding='0' class='table4'>
              <tr>
                <td width='68' rowspan='2' class='td5'><p class='p3b'>Dimension</p></td>
                <td width='54' rowspan='2' class='td5'><p class='p3b'>Surface</p></td>
                <td height='22' colspan='5' align='center' class='td5'><p class='p3b'>CAPACITE</p></td>
              </tr>
              <tr>
                <td width='49' class='td5'><p class='p3b'>Style U</p></td>
                <td width='79' class='td5'><p class='p3b'>Style théatre</p></td>
                <td width='70' class='td5'><p class='p3b'>Style écolier</p></td>
                <td width='72' class='td5'><p class='p3b'>Style banquet</p></td>
                <td width='64' class='td5'><p class='p3b'>Style cocktail</p></td>
              </tr>
              <tr>
                <td height='43' class='td5'><p class='p3b'><?php echo($ligne1['dimension']); ?></p></td>
                <td class='td5'><p class='p3b'><?php echo($ligne1['surface_salle']); ?></p></td>
                <td class='td5'><p class='p3b'><?php echo($ligne1['capacite_u']); ?></p></td>
                <td class='td5'><p class='p3b'><?php echo($ligne1['capacite_theatre']); ?></p></td>
                <td class='td5'><p class='p3b'><?php echo($ligne1['capacite_ecolier']); ?></p></td>
                <td class='td5'><p class='p3b'><?php echo($ligne1['capacite_banquet']); ?></p></td>
                <td class='td5'><p class='p3b'><?php echo($ligne1['capacite_cocktail']); ?></p></td>
              </tr>
            </table>
          </td>
        </tr>
      </table>
<?php
}
?>
    </td>
  </tr>
</table>
Je ne sais pas pour toi, mais moi je trouve ça plus clair à lire.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 22 Messages

18 juin 2005, 12:05

Je vais prendre mon temps pour bien relire tes corrections (et te poser eventuellement des questions). Mais je suis d'accord avec toi sur la meilleure lisibilité du code.


Merci!

Mammouth du PHP | 19672 Messages

18 juin 2005, 12:22

Ok, fais surtout bien attention à tes tableaux html: tu avais des <table> juste après des </tr>, j'ai donc intercalé <tr> et <td>, mais ça rique fort de modifier ton affichage.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 22 Messages

19 juin 2005, 17:34

J'ai modifié mon script mais je continue à avoir des messages d'erreur :
PHP Notice: Undefined index: Salle in c:\clients\hotelapinede\francais\800\salles.php on line 234 PHP Notice: Use of undefined constant id_salle - assumed 'id_salle' in c:\clients\hotelapinede\francais\800\salles.php on line 238 PHP Notice: Use of undefined constant id_salle - assumed 'id_salle' in c:\clients\hotelapinede\francais\800\salles.php on line 238 PHP Notice: Use of undefined constant id_salle - assumed 'id_salle' in c:\clients\hotelapinede\francais\800\salles.php on line 238 PHP Notice: Use of undefined constant id_salle - assumed 'id_salle' in c:\clients\hotelapinede\francais\800\salles.php on line 238 PHP Notice: Use of undefined constant id_salle - assumed 'id_salle' in c:\clients\hotelapinede\francais\800\salles.php on line 238 PHP Notice: Use of undefined constant id_salle - assumed 'id_salle' in c:\clients\hotelapinede\francais\800\salles.php on line 238 
En fait il continue à me dire que mes variables : Salle et id_salle ne sont pas déclarées.

Ma question est : à quel endroit dans le script il faut déclarer ?
$Salle = $_POST['Salle'];
En revanche je ne voit pas quel est le problème par rapport à id_salle?

Mammouth du PHP | 19672 Messages

19 juin 2005, 17:53

C'est id_salle ? Ça ne devrait pas être $id_salle par hasard ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 22 Messages

19 juin 2005, 18:09

La ligne 237-238 correspond à:
<option value="<?php echo($ligne['id_salle']); ?>" 
<?php echo(($ligne['id_salle']==$Salle)?
Pourquoi faudrait-il indiquer
$id_salle
?
Il y a un truc qui m'échappe!

Mammouth du PHP | 19672 Messages

19 juin 2005, 18:14

Je ne vois pas la partie de scipr concernée, mais cette erreur:
Use of undefined constant id_salle - assumed 'id_salle'
indique que tu utilises soit:
- id_salle à la place de $id_salle comme une variable, ou bien;
- $var[id_salle] au lieu de $var['id_salle'] ;
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 22 Messages

19 juin 2005, 18:40

Ok

Problème résolu pour id_salle en revanche le problème persiste pour Salle qui est le nom de la variable du <select>.

A quel endroit faut-il déclarer:
$Salle = $_POST['Salle'];

car où que je le mette pour l'instant, l'erreur du undefined index persiste?

Mammouth du PHP | 19672 Messages

19 juin 2005, 18:50

Bon, première chose, la logique : ça doit se situer chronologiquement entre l'envoi du formulaire et l'endroit où on l'utilise.

Dans ton formulaire, tu as un champ name="Salle" : au début de la partie traitement, tu dois récupérer la valeur, ce que tu fais avec $Salle = $_POST['Salle'] (Si le formulaire est bien en méthod="post", sinon $_GET['Salle'])

Dans la mesure où la page de traitement est différente de la page formulaire, ça ne devrait pas poser de problème particulier. Si en revanche c'est la même page qui se recharge, il faut le mettre à l'intérieur de la partie traitement, au début bien sur de cette partie. Si jamais c'est un champ non initialisé, tu peux modifier comme ceci:
$Salle = isset($_POST['Salle']) ? $_POST['Salle'] : "";
Comme ça, tu initialises la variable $Salle soit avec $_POST['Salle'] si il y a une valeur, soit avec une chaine vide. ça supprimera le message d'erreur.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 22 Messages

21 juin 2005, 22:14

Le script fonctionnne correctement.

Merci