INSERT INTO qui ne fonctionne pas

Petit nouveau ! | 6 Messages

14 déc. 2020, 22:47

Bonjour, tout d'abord je ne savais pas si je devais me mettre dans PHP avancé ou pas donc pardon si je me suis trompé. Bref venons en au fait, j'essaye d'insérer de nouvelles données dans une nouvelle table de ma base de donnée, je n'ai pas de messages d'erreurs mais aucune nouvelle colonne ne se créée.
Mon formulaire :

Code : Tout sélectionner

<form method="post" name="sell" id="sell" action=""> <input type="type" name="type" id="type" placeholder="Ex : Jordan 3 Black Cement (2018)" required> </br> <input type="marque" name="marque" id="marque" placeholder="Marque de l'article" required> </br> <div class="typedetaille"> <input type="button" id="sneakers" name="sneakers" value="Sneakers" onClick="verifss();"> <input type="button" id="vetements" name="vetements" value="Vêtements" onClick="verifs();"> </div> <div id="taillev" class="off"> <label class="label" for="sizev">Taille :</label> <select name="sizev" id="sizev" size=""> <option value="XXS"> XXS</option> <option value="XS"> XS</option> <option value="S"> S</option> <option value="M"> M</option> <option value="L"> L</option> <option value="XL"> XL</option> <option value="XXL"> XXL</option> </select> </br> </div> <div id="taille" class="on"> <label class="label" for="size">Taille :</label> <select name="size" id="size" size=""> <option value="4"> 4US</option> <option value="5"> 5US</option> <option value="6"> 6US</option> <option value="7"> 7US</option> <option value="8"> 8US</option> <option value="9"> 9US</option> <option value="10"> 10US</option> <option value="11"> 11US</option> <option value="12"> 12US</option> <option value="13"> 13US</option> <option value="14"> 14US</option> <option value="15"> 15US</option> <option value="16"> 16US</option> <option value="17"> 17US</option> </select> </br> </div> <label class="lnew" for="new"> New :</label> <input type="hidden" name="new" value="0"> <input type="checkbox" id="new" name="new" onClick="GereChkbox();" value="new"> <label class="lused" for="used"> Used :</label> <input type="hidden" name="used" value="0"> <input type="checkbox" id="used" name="used" onClick="GereChkbox();" onChange="verif();" value="used"> </br> <div id="dusedbis" class="on"> </div> <div id="dused" class="off"> <label class="boite"> Boîte ou emballage d'origine manquante : </label> </br> <input type="hidden" name="boite" value="0"> <input type="checkbox" name="boite" id="boite" value= "boite"> </br> <label class="déteint"> Item d'éteint :</label> </br> <input type="hidden" name="déteint" value="0"> <input type="checkbox" name="déteint" id="déteint" value= "déteint"> </br> <label class="jaunissement"> Jaunissement :</label> </br> <input type="hidden" name="jaunissement" value="0"> <input type="checkbox" name="jaunissement" id="jaunissement" value= "jaunissement"> </br> <label class="eraflures"> Eraflures :</label> </br> <input type="hidden" name="eraflures" value="0"> <input type="checkbox" name="eraflures" id="eraflures" value= "eraflures"> </br> <label class="taches"> Tâches :</label> </br> <input type="hidden" name="taches" value="0"> <input type="checkbox" name="taches" id="taches" value= "taches"> </br> <label class="autre">Autres défauts : </label> </br> <input type="hidden" name="autre" value="0"> <textarea class="autre" id="autre" name="autre" warp="hard" cols="4" rows="10" onKeyup="javascript:MaxLengthTextarea(this, 650);"> </textarea> </br> </div> </br> <input type="submit" name="poster" id="poster" value="Poster"> </br> </form>
Mes requêtes :

Code : Tout sélectionner

<?php if (isset($_POST['poster'])) { $type = $_POST['type']; $marque = $_POST['marque']; $taille = $_POST['size']; if (isset($_POST['new'])) { $condition = $_POST['new']; }else if (!isset($_POST['new'])) { $condition = $_POST['used']; } $boite = $_POST['boite']; $deteint = $_POST['déteint']; $jaunissement = $_POST['jaunissement']; $eraflures = $_POST['eraflures']; $taches = $_POST['taches']; $autres = $_POST['autre']; if (!empty($type) && !empty($marque) && !empty($taille) && !empty($condition)) { $typelenght = strlen($type); $marquelenght = strlen($marque); if ($typelenght < 255) { if ($marquelenght < 255) { if ($condition = $_POST['used']) { $q = $db->prepare("INSERT INTO annonces(sneakers)( nom, new, taille, marque, boite, deteint, jaunissement, eraflures, taches, autre) VALUES( :type, :marque, :size, :new, :boite, :deteint, :jaunissement, :eraflures, :taches, :autre)"); $q->execute([ 'nom' => $type, 'marque' => $marque, 'taille' => $taille, 'new' => $condition, 'boite' => $boite, 'deteint' => $deteint, 'jaunissement' => $jaunissement, 'eraflures' => $eraflures, 'taches' => $taches, 'autre' => $autres ]); }else if ($condition = $_POST['used']) { $c = $db->prepare("INSERT INTO annonces(sneakers)( nom, new, taille, marque, boite, deteint, jaunissement, eraflures, taches, autre) VALUES( :type, :marque, :size, :new, :boite, :deteint, :jaunissement, :eraflures, :taches, :autre)"); $c->execute([ 'nom' => $type, 'marque' => $marque, 'taille' => $taille, 'new' => $condition, 'boite' => $boite, 'deteint' => $deteint, 'jaunissement' => $jaunissement, 'eraflures' => $eraflures, 'taches' => $taches, 'autre' => $autres ]); } }else{ echo "Le nom de marque n'est pas censé dépasser 250 caractères"; } }else{ echo "Le nom de votre article de doit pas dépasser 250 caractères"; } }else{ echo "Veuillez remplir tout les champs"; } } ?>
Ca risque de piquer les yeux à ceux qui savent coder parfaitement, j'apprends par moi même et par conséquent je fais beaucoup d'erreurs, merci pour votre aide et pour la/les correction(s).

Mammouth du PHP | 2703 Messages

14 déc. 2020, 22:54

INSERT INTO annonces(sneakers)( nom...
une requête avec une telle syntaxe dans phpmyadmin fonctionne ?

Petit nouveau ! | 6 Messages

15 déc. 2020, 01:38

J'ai une première table qui n'assimile absolument pas les mêmes données, je l'ai faite sur ce schéma ci et ça fonctionne très bien d'où mon étonnement :)

Petit nouveau ! | 6 Messages

15 déc. 2020, 01:39

"annonces(sneakers)" étant le nom de ma table

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

15 déc. 2020, 12:19

Moi déjà je renommerai ma table pour ne pas avoir de caractères spéciaux
Quand tout le reste a échoué, lisez le mode d'emploi...

Petit nouveau ! | 6 Messages

15 déc. 2020, 13:13

ça ne change rien

Mammouth du PHP | 2703 Messages

15 déc. 2020, 14:45

une requête dans phpmyadmin fonctionne ? si non, quel message d'erreur ?

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

15 déc. 2020, 17:54

Salutations !

Il vaut effectivement mieux éviter tout caractère spécial autre que "-" et "_" dans les noms de tables et colonnes et il est préférable de renommer ta table.

Pour ton problème, est-ce que c'est normal d'essayer de mettre la variable marque dans la colonne new et la variable new dans la colonne marque ? Si les types de données ne correspondent pas, tu peux avoir une erreur.

Tu as également un index "taille" dans ton tableau de valeur, mais tu utilises ":size" dans ta requête préparée... cela peut aussi provoquer une erreur

A noter par ailleurs que " if ($condition = $_POST['used']) " affecte la valeur de $_POST['used'] dans la variable $condition et ne compare pas les valeurs.

Et que un elseif() qui test la condition du if() précédent ne sera jamais exécuté ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Petit nouveau ! | 6 Messages

15 déc. 2020, 20:40

J'ai corrigé tt ça et mtn j'ai une PDOException qui me dit " Invalid parameter number: parameter was not defined in C:\wamp64\www\formulairesell.php on line 60 "
mais je ne comprends pas pourquoi.. voilà mon code actuel :

Code : Tout sélectionner

<?php if (isset($_POST['poster'])) { $type = $_POST['type']; $marque = $_POST['marque']; $taille = $_POST['taille']; if (isset($_POST['new'])) { $condition = $_POST['new']; }else { $condition = $_POST['used']; } $boite = $_POST['boite']; $deteint = $_POST['déteint']; $jaunissement = $_POST['jaunissement']; $eraflures = $_POST['eraflures']; $taches = $_POST['taches']; $autre = $_POST['autre']; if (!empty($type) && !empty($marque) && !empty($taille) && !empty($condition)) { $typelenght = strlen($type); $marquelenght = strlen($marque); if ($typelenght < 255) { if ($marquelenght < 255) { if ($condition = $_POST['used']) { $q = $db->prepare("INSERT INTO annonces1( nom, new, taille, marque, boite, deteint, jaunissement, eraflures, taches, autre) VALUES( :type, :new, :taille, :marque, :boite, :deteint, :jaunissement, :eraflures, :taches, :autre)"); $q->execute([ 'nom' => $type, 'marque' => $marque, 'taille' => $taille, 'new' => $condition, 'boite' => $boite, 'deteint' => $deteint, 'jaunissement' => $jaunissement, 'eraflures' => $eraflures, 'taches' => $taches, 'autre' => $autre ]); }else { $c = $db->prepare("INSERT INTO annonces1( nom, new, taille, marque, boite, deteint, jaunissement, eraflures, taches, autre) VALUES( :type, :new, :taille, :marque, :boite, :deteint, :jaunissement, :eraflures, :taches, :autre)"); $c->execute([ 'nom' => $type, 'marque' => $marque, 'taille' => $taille, 'new' => $condition, 'boite' => $boite, 'deteint' => $deteint, 'jaunissement' => $jaunissement, 'eraflures' => $eraflures, 'taches' => $taches, 'autre' => $autre ]); } }else{ echo "Le nom de marque n'est pas censé dépasser 250 caractères"; } }else{ echo "Le nom de votre article de doit pas dépasser 250 caractères"; } }else{ echo "Veuillez remplir tout les champs"; } } ?>

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

15 déc. 2020, 22:57

Vérifie les paramètres de ta requête ;)
Quand tout le reste a échoué, lisez le mode d'emploi...

Petit nouveau ! | 6 Messages

16 déc. 2020, 15:10

mais encore ^^

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

16 déc. 2020, 15:36

Vérifie que tout concorde...
Quand tout le reste a échoué, lisez le mode d'emploi...

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

18 déc. 2020, 13:09

" Invalid parameter number: parameter was not defined ", signifie qu'il ne parvient pas à retrouver dans le tableau de valeurs toutes les clés dont il a besoin pour compléter la requête (l'un au moins des paramètres de la requête que tu lui as pourtant juré dit qu'il allait trouvé tel que tu l'avais spécifié, n'est pas défini dans le tableau :)).

Tu as le bon nombre de variables, c'est donc très probablement un problème de nom sur l'un de tes index ;)


Et j'insiste sur le fait que quand tu testes "if ($condition = $_POST['used']) ", tu ne compares pas la valeur de $condition à celle de $_POST['used'], mais tu affectes la valeur de $_POST['used'] à ta variable $condition ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...