Problème récupération données formulaire

alzurdu94 Messages postés 2 Date d'inscription   Statut Membre Dernière intervention   -  
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

Je suis étudiant en licence d'informatique et je suis en train de développer un site web permettant, entre autres, à des utilisateurs de stocker des recettes de cuisine.

Le problème que j'ai se trouve dans mon formulaire d'insertion de recette.

Tous mes champs sont récupérés sauf celui concernant l'id de l'utilisateur qui saisit la recette. Il est présent dans le formulaire mais n'est pas pris en compte dans mon insert (les guillemets sont vides (je le sais car j'ai déjà affiché ma requête pour voir où se trouvait l'erreur)).

WAMP me retourne donc deux erreurs qui découlent de ce problèe:
-primo: il m'indique que l'index pseudoUse n'est pas défini (ce que je ne comprends pas car je l'ai bien mentionné dans mon formulaire);
-deuxio: MySQL me retourne le message cannot add or update a child row, etc... car la contrainte par ma clé étrangère est violée du fait que mon champ soit null et de ce fait non égal à une des valeur de la table référencée (ici, utilisateur).

Pour info, je vais vous mettre les tables qui entrent dans ce problème ainsi que mon code:

create table utilisateur(pseudo varchar(20) not null, mdp varchar(15) not null,
constraint pseudo_pk primary key(pseudo));

create table recette(nom varchar(100) not null, pays varchar(50), region varchar(50), type varchar(10) not null, ingredients TEXT not null, preparation TEXT not null, pseudoUser varchar(20) not null,
constraint nomRecette_pk primary key(nom),
constraint pseudonyme_User foreign key(pseudoUser) references utilisateur(pseudo),
constraint type_fk foreign key(type) references type(idType));

code PHP:

Formulaire d'insertion:
<html>
 <head>
  <title>Easy Gourmande Kitchen</title>
  <meta http-equiv="content-type" content="text/html" charset="utf-8"/>
  <link rel="stylesheet" href="style.css"/>
 </head>
  <body>
   
   <h1>Ajout d'une nouvelle recette</h1>
   <h2>Les champs suivis d'un "*" sont obligatoires.</h2>
   
   <form METHOD="POST" action="accueil4.php">
    
    <p><label for="nom">nom*</label>: <input type="text" name="nom"></p>
    <p><label for="pays">pays</label>: <input type="text" name="pays"></p>
    <p><label for="region">région</label>: <input type="text" name="region"></p>
    <p><label for="type">type*</label><br/>
    <?php
     $req_type=mysql_query('select * from type', $link);
    ?>
     <select name="type" id="type">
     <?php
     while($type=mysql_fetch_array($req_type)) {
      ?>
      <option value=<?php echo $type['idType'] ?>><?php echo $type['idType'] ?></option>
      <?php
     }
     ?>
     </select>
    </p>
    
    <p><label for="ingredients">ingrédients*</label>: <br/>
    <textarea name="ingredients" id="ingredients" rows="10" cols="50"></textarea>
    </p>
    
    <p><label for="preparation">preparation*</label>: <br/>
    <textarea name="preparation" id="preparation" rows="10" cols="50"></textarea>
    </p>
    
    <p><label for="photo">photo</label>: <br/>
    <textarea name="photo" id="photo" rows="10" cols="50"></textarea>
    </p>
    
    <p><label for="pseudoUse">pseudoUser*</label>: <input type="text" id="pseudoUse" name="pseudoUse" value= <?php echo $_POST['pseudo_user'] ?> disabled="disabled"></p>
    
    <input type="submit" value="Enregistrer">
    
   </form>

Pour info, pseudo_user est un champ hidden que je récupère dans mon fichier d'accueil une fois que l'utilisateur est authentifié et qu'il clique sur le bouton d'ajout d'une recette.

Fichier traitant les données:

Requête d'insertion de la recette:
$req_insertion_recette=mysql_query("insert into recette(nom, pays, region, type, ingredients, preparation, photo, pseudoUser) values('".$_POST['nom']."', '".$_POST['pays']."', '".$_POST['region']."', '".$_POST['type']."', '".$_POST['ingredients']."', '".$_POST['preparation']."', '".$_POST['photo']."', '".$_POST['pseudoUse']."')", $link);

Quelque chose doit sûrement m'échapper.

Si quelqu'un pouvait m'aider ce serait super sympa.

Par avance, merci :)


EDIT : Ajout de la coloration syntaxique.
explications ici : https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code
A voir également:

2 réponses

jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Bonjour,
Tu nous dis :

Pour info, pseudo_user est un champ hidden que je récupère dans mon fichier d'accueil

mais il n'est pas présent dans ton formulaire actuel ?
Si oui.. où .. je ne l'ai pas vu.

Toutes les variables que tu veux envoyer à ton fichier accueil4.php doivent être présentes dans ton FORM ... ou passée via des variables de SESSION par exemple.

PS: Il est fortement conseillé de récupérer les variables en testant au préalable qu'elles existent via la fonction ISSET AVANT de les utiliser.
PS2 : Il est préférable de sortir la requête... de son exécution...

$nom = isset($_POST['nom'])?$_POST['nom']:NULL;
$pays = isset($_POST['pays'])?$_POST['pays']:NULL;
$region = isset($_POST['region'])?$_POST['region']:NULL;
$type = isset($_POST['type'])?$_POST['type']:NULL;
$ingredients = isset($_POST['ingredients'])?$_POST['ingredients']:NULL;
$preparation = isset($_POST['preparation'])?$_POST['preparation']:NULL;
$photo = isset($_POST['photo'])?$_POST['photo']:NULL;
$pseudoUse = isset($_POST['pseudoUse'])?$_POST['pseudoUse']:NULL;

if($nom && $pseudoUse ){
$sql = "INSERT INTO recette(nom, pays, region, type, ingredients, preparation, photo, pseudoUser)                      VALUES('$nom','$pays','$region','$type','$ingredients','$preparation','$photo','$pseudoUse')";

//execution de la requete :					 
$req_insertion_recette=mysql_query($sql, $link);				 
					 
}// Fin du IF




PS3 - Tu utilises une anciennes extension Mysql .. je te conseille de passer à la PDO.


0
alzurdu94 Messages postés 2 Date d'inscription   Statut Membre Dernière intervention  
 
Bonsoir,

Je vous soumets tout ce qu'il vous faut pour comprendre mon problème car franchement je ne comprends pas.

Fichier accueil.php:
<?php require('connexionBD.php') ?>
<!doctype html>
<html>
 <head>
  <title>Easy Gourmande Kitchen</title>
  <meta charset="utf-8"/>
  <link rel="stylesheet" href="style.css"/>
 </head>
  <body>
  
  <?php
   if($_POST['pass']!=$_POST['confpass']) {
    die("Mots de passe différents !");
   }
   if($_POST['login']=="" || $_POST['pass']=="" || $_POST['confpass']=="") {
    die("Merci de renseigner tous les champs!");
   }
   
   $req=mysql_query('select * from utilisateur where pseudo= "'.$_POST['login'].'" and mdp= "'.$_POST['pass'].'"', $link);
   $num_rows=mysql_num_rows($req);
   if($num_rows==0) {
    die('Utilisateur inexistant !');
   }
   else {
   $data=mysql_fetch_array($req);
   }
  ?>
  
   <h1>Bienvenue <?php echo $_POST['login'] ?> !</h1>
   
   
   <form METHOD="POST" action="ajoutRecette.php">
    <input type="hidden" name="pseudo_user" value=<?php echo $_POST['login'] ?>>
    <input type="submit" value="Ajouter nouvelle recette"><br/><br/>
    <?php
    mysql_free_result($req);
    mysql_close($link);
   ?>
   </form>
   
   <form METHOD="POST" action="chercherRecetteParType.php">
    <input type="hidden" name="pseudo_User" value=<?php echo $_POST['login'] ?>>
    <input type="submit" value="Chercher une recette par types"><br/><br/>
   </form>
   
   <form METHOD="POST" action="chercherRecetteParMotCle.php">
    <input type="hidden" name="pseudo_usr" value=<?php echo $_POST['login'] ?>>
    <input type="submit" value="Chercher une recette par mots clés"><br/><br/>
   </form>
   
   <form METHOD="POST" action="authentification.php">
    <input type="submit" value="Se déconnecter"><br/><br/>
   </form>
  
  </body>
</html>

Dans celui-ci, j'ai un formulaire qui se résume à un simple bouton permettant d'accéder à la page d'ajout de recette.

Je récupère dans ce formulaire le fameux champ hidden "pseudo_user".

Quand j'accède à la page d'ajout de recettes, j'ai bien mon champ hidden qui est récupéré.

ajoutRecette.php:
<?php 
require("connexionBD.php");
?>
<!doctype html>
<html>
 <head>
  <title>Easy Gourmande Kitchen</title>
  <meta http-equiv="content-type" content="text/html" charset="utf-8"/>
  <link rel="stylesheet" href="style.css"/>
 </head>
  <body>
   
   <h1>Ajout d'une nouvelle recette</h1>
   <h2>Les champs suivis d'un "*" sont obligatoires.</h2>
   
   <form METHOD="POST" action="accueil4.php">
    
    <p><label for="nom">nom*</label>: <input type="text" name="nom"></p>
    <p><label for="pays">pays</label>: <input type="text" name="pays"></p>
    <p><label for="region">région</label>: <input type="text" name="region"></p>
    <p><label for="type">type*</label><br/>
    <?php
     $req_type=mysql_query('select * from type', $link);
    ?>
     <select name="type" id="type">
     <?php
     while($type=mysql_fetch_array($req_type)) {
      ?>
      <option value=<?php echo $type['idType'] ?>><?php echo $type['idType'] ?></option>
      <?php
     }
     ?>
     </select>
    </p>
    
    <p><label for="ingredients">ingrédients*</label>: <br/>
    <textarea name="ingredients" id="ingredients" rows="10" cols="50"></textarea>
    </p>
    
    <p><label for="preparation">preparation*</label>: <br/>
    <textarea name="preparation" id="preparation" rows="10" cols="50"></textarea>
    </p>
    
    <p><label for="photo">photo</label>: <br/>
    <textarea name="photo" id="photo" rows="10" cols="50"></textarea>
    </p>
    
    <p><label for="pseudoUse">pseudoUser*</label>: <input type="text" id="pseudoUse" name="pseudoUse" disabled="disabled" value= <?php echo $_POST['pseudo_user'] ?>></p>
    
    <input type="submit" value="Enregistrer">
    
   </form>
   
   <form METHOD="POST" action="accueil.php">
    <input type="submit" value="Annuler">
   </form>
   
  </body>
</html>

Code accuel4.php:
<?php require('connexionBD.php') ?>
<!doctype html>
<html>
 <head>
  <title>Easy Gourmande Kitchen</title>
  <meta charset="utf-8"/>
  <link rel="stylesheet" href="style.css"/>
 </head>
  <body>
  
  <?php
   
   if($_POST['nom']=="" || $_POST['ingredients']=="" || $_POST['preparation']=="") {
    die('Champ(s) obligatoire(s) non renseigné(s) !');
   }
   else {
    //$syntaxe_requete="insert into recette(nom, pays, region, type, ingredients, preparation, photo, pseudoUser) values('".$_POST['nom']."', '".$_POST['pays']."', '".$_POST['region']."', '".$_POST['type']."', '".$_POST['ingredients']."', '".$_POST['preparation']."', '".$_POST['photo']."', '".$_POST['pseudoUser']."')";
    //$req_insertion_recette=mysql_query($syntaxe_requete);
    $req_insertion_recette=mysql_query("insert into recette(nom, pays, region, type, ingredients, preparation, photo, pseudoUser) values('".$_POST['nom']."', '".$_POST['pays']."', '".$_POST['region']."', '".$_POST['type']."', '".$_POST['ingredients']."', '".$_POST['preparation']."', '".$_POST['photo']."', '".$_POST['pseudoUse']."')", $link);
    
    if(!$req_insertion_recette) {
     die(mysql_error());
    }
    else {
     echo("Recette ajoutée avec succès !");
    }
   }
  ?>
  
   <h1>Bienvenue <?php echo $_POST['pseudoUse'] ?> !</h1>
   
   
   <form METHOD="POST" action="ajoutRecette.php">
    <input type="hidden" name="pseudo_user" value=<?php echo $_POST['pseudoUse'] ?>>
    <input type="submit" value="Ajouter nouvelle recette"><br/><br/>
   </form>
   
   <form METHOD="POST" action="chercherRecetteParType.php">
    <input type="hidden" name="pseudo_User" value=<?php echo $_POST['pseudoUse'] ?>>
    <input type="submit" value="Chercher une recette par types"><br/><br/>
   </form>
   
   <form METHOD="POST" action="chercherRecetteParMotCle.php">
    <input type="hidden" name="pseudo_usr" value=<?php echo $_POST['pseudoUse'] ?>>
    <input type="submit" value="Chercher une recette par mots clés"><br/><br/>
   </form>
   
   <form METHOD="POST" action="authentification.php">
    <input type="submit" value="Se déconnecter"><br/><br/>
   </form>
  
  </body>
</html>


Je ne comprends pas mon Undifiend pseudoUse car si vous regardez-bien, il est bel et bien défini dans mon fichier ajoutRecette.php et je le récupère dans accueil4.php.

Franchement, si vous trouvez le problème vous me serez d'un grand secours car je ne comprends vraiment pas.

Par avance, merci.

PS: je note vos conseils pour une amélioration de mon site une fois celui-ci complètement fonctionnel. :)

ATTENTION

EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici :
https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code

Merci d'y penser dans tes prochains messages.
.
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 

PS: je note vos conseils pour une amélioration de mon site une fois celui-ci complètement fonctionnel. :)

Heuuuu.. non .!
.. Il faut que tu en tiennes compte dès maintenant ... cela évitera d'avoir d'autres erreurs...
Ca fait parti des bonnes pratiques ... il faut prendre les bonnes habitudes maintenant.
Ca n'en sera que plus facile pour nous de t'aider à résoudre tes problèmes si tu respectes les conseils (consignes...) qu'on te donne.

donc.. merci de faire les modifications recommandées avant de continuer.
0