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&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

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';
}