Undefined index, use of undefined constant

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Undefined index, use of undefined constant

par Cyrano » 22 juin 2005, 07:19

Excellent. Tu ne l'as pas fait alors je le mets [Résolu] moi-même, n'oublie pas de le faire les prochaines fois :)

Undefined index, use of undefined constant

par bénédicte » 21 juin 2005, 22:14

Le script fonctionnne correctement.

Merci

par Cyrano » 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.

Undefined index, use of undefined constant

par bénédicte » 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?

par Cyrano » 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'] ;

Undefined index, use of undefined constant

par bénédicte » 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!

par Cyrano » 19 juin 2005, 17:53

C'est id_salle ? Ça ne devrait pas être $id_salle par hasard ?

Undefined index, use of undefined constant

par bénédicte » 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?

par Cyrano » 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.

Undefined index, use of undefined constant

par bénédicte » 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!

par Cyrano » 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.

Undefined index, use of undefined constant

par bénédicte » 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?

par ouckileou » 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

Undefined index, use of undefined constant

par bénédicte » 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.

par Cyrano » 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.