[RESOLU] message d'erreur

Eléphanteau du PHP | 35 Messages

03 mai 2012, 13:05

<?php include('../yene/entete.php');?>
<table width="100%" border="0" cellspacing="2" cellpadding="10">
<tr>
<td height="300" valign="top" bgcolor="#CCFF99">
<h6>Bienvenue sur le formulaire de saisie des produits</h6>
<?php
$link=mysql_connect('localhost','root','');
if (!$link){
	die('<p>Impossible de se connecter:'.mysql_error().'</p>');
}
$db=mysql_select_db('gestock',$link);
if(!$db){
	die('<p>Impossible d\'utiliser la base:'.mysql_error().'</p>');
}
$sqlquery1="select libelle from categorie";
$queryresult1=mysql_query($sqlquery1);
?>
<h1>Ajout d&acute;un nouveau produit</h1>
<form name="form1" method="post" action="prod.php">
<p>Reference&nbsp;&nbsp;&nbsp;&nbsp;:
<input  name="reference" type="text" size="30" maxlength="50">
</p>
<p>Libell&eacute;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:
<select   name="libelle" size="1" id="libelle" >
<?php
while($row=mysql_fetch_array($queryresult1,MYSQL_ASSOC)){
  echo"<option value='".$row['libelle']."'>".$row['libelle']."<option>";
}
?>
</select>
</p>
<p>D&eacute;signation&nbsp;&nbsp;:
<input  name="designation" type="text" size="30" maxlength="50">
</p>
<p>
<input  name="valider" type="submit"id="valider" value="Valider">
</p>
</form>
<?php
try
{
//Connexion à partir de la base par PDO
$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
$bdd = new PDO('mysql:host=localhost;dbname=gestock', 'root', '', $pdo_options);
//Definition des paramètres de connexion de la base.
$reference=$_POST['reference'];
$libelle=$_POST['libelle'];
$designation=$_POST['designation'];
//Insertion des données dans la base à partir d'une requête preparée
$req = $bdd->prepare('INSERT INTO produit(reference,libelle,designation) VALUES(:reference,:libelle,:designation)');
$req->execute(array(
	'reference' => $reference,
	'libelle' => $libelle,
	'designation' => $designation
	));
   echo 'La catégorie du produit a été  bien ajoutée !';
}
catch(Exception $e)
{
    die('Erreur : '.$e->getMessage());
}
?>
</td>
</tr>
</table>
<?php 
include('../yene/retour_menu.php');
include('../yene/pieddepage.php');
?>
j'ai des erreurs dans mon code que faire?
Notice: Undefined index: reference in C:\wamp\www\yene\prod.php on line 46

Notice: Undefined index: libelle in C:\wamp\www\yene\prod.php on line 47

Notice: Undefined index: designation in C:\wamp\www\yene\prod.php on line 48
Erreur : SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'reference' cannot be null

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

03 mai 2012, 13:26

Il te faut t'assurer que les variables $_POST['reference'] et $_POST['libelle'] existent bel et bien avant d'essayer d'en récupérer la valeur. Le problème ici est simplement que tu tentes d'accéder à la valeur d'une variable qui n'existe pas car pas envoyé en post.

Tu peux contrôler la présence d'une variable ou d'un index dans un tableau avec isSet() (qui test l'existence) ou empty() (qui test également si la valeur est vide ou nulle). Avec un simple if() tu peux ainsi savoir si tes variables existent (sont bien définies ou envoyées via un formulaire, l'url, un cookie, ...) avant de les utiliser.
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 35 Messages

03 mai 2012, 13:33

essaie de mettre le isset() en utilisant mon code pour me permettre de bien comprendre la procédure.

ViPHP
ViPHP | 2577 Messages

03 mai 2012, 13:34

Bonjour,

C'est parce que $_POST['reference'] n'est pas défini.
Il d'agit certainement du premier appel à la page, tu pourrais tester isset($_POST['valider']) pour voir si l'affichage correspond à une soumission du formulaire.

Pour la logique du traitement il me semble plus judicieux de traiter le formulaire (si il est envoyer par l'utilisateur - via bouton) et ensuite de faire l'affichage de la page.

Edit : Mais qu'est ce que je suis lent^^

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

03 mai 2012, 13:36

En fait le principe est le suivant :
if ( isSet($laVariableQueTuVeuxSavoirSiElleEstDéfinie) ) {
  // le code que tu veux exécuter lorsque ta variable est définie
}
Tu peux donc soit le faire variable par variable, soit si toutes tes données sont systématiquement envoyées en POST, tester uniquement la présence de l'une d'entre elle qui te garantira que les autres sont également définies :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 35 Messages

03 mai 2012, 13:50

je suis débutant c'est mon premier formulaire donc j'ai besoin de quelqu'un qui peut me donner un coup de main en utilisant mon code pour me permettre de bien comprendre la procédure.Je vous compte sur vous mesdames et messieurs .

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

03 mai 2012, 14:03

PHP t'indique le message d'erreur suivant :
Notice: Undefined index: reference in C:\wamp\www\yene\prod.php on line 46

Cela veut dire que tu demande à php d'utiliser l'index "reference" d'un tableau alors que celui-ci n'est pas défini. PHP ne peut donc pas utiliser la valeur de cette variable pour l'affecter à ta variable $reference. Il faut donc vérifier que l'index "reference" de ton tableau est bien défini avant d'essayer de l'utiliser.

$laVariableQueTuVeuxSavoirSiElleEstDéfinie est donc tout simplement $_POST['reference']. Si isSet($_POST['reference']) est vrai, ta variable existe et tu peux l'utiliser. Si ce test est faux, c'est que ta variable n'existe pas et dans ce cas, ben soit tu ne fais rien (et il n'y aura donc pas d'erreur), soit tu fais autre chose (pour signaler par exemple qu'il manque la référence).

Est-ce que c'est plus clair ou est-ce qu'il te faut plus d'aide sur les structures conditionnelles de type if() ?
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 35 Messages

03 mai 2012, 14:54

c'est à quel niveau du code je dois faire le test de isset().J'ai besoin de ton aide .Je veux plus t'aide.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

04 mai 2012, 17:25

Et bien par exemple, au lieu de
$reference=$_POST['reference'];
Tu peux faire
if (isSet($_POST['reference'])) { // on test si la variable existe en post
   $reference=$_POST['reference']; // si oui, on l'utilise
}
else { // sinon, on utilise une valeur par défaut, ou on ne fait rien en fonction du besoin
   $reference='une autre valeur à utiliser quand aucune référence n'est envoyée en post';
}
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...