Page 1 sur 1
message d'erreur
Posté : 03 mai 2012, 13:05
par Pemco
<?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´un nouveau produit</h1>
<form name="form1" method="post" action="prod.php">
<p>Reference :
<input name="reference" type="text" size="30" maxlength="50">
</p>
<p>Libellé :
<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ésignation :
<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
Re: message d'erreur
Posté : 03 mai 2012, 13:26
par Ryle
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.
Re: message d'erreur
Posté : 03 mai 2012, 13:33
par Pemco
essaie de mettre le isset() en utilisant mon code pour me permettre de bien comprendre la procédure.
Re: message d'erreur
Posté : 03 mai 2012, 13:34
par Mazarini
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^^
Re: message d'erreur
Posté : 03 mai 2012, 13:36
par Ryle
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

Re: message d'erreur
Posté : 03 mai 2012, 13:50
par Pemco
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 .
Re: message d'erreur
Posté : 03 mai 2012, 14:03
par Ryle
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() ?
Re: message d'erreur
Posté : 03 mai 2012, 14:54
par Pemco
c'est à quel niveau du code je dois faire le test de isset().J'ai besoin de ton aide .Je veux plus t'aide.
Re: message d'erreur
Posté : 04 mai 2012, 17:25
par Ryle
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';
}