Pourquoi mes champs doivent être obligatoires pour s'insérer
Résolu/Fermé
A voir également:
- Pourquoi mes champs doivent être obligatoires pour s'insérer
- Insérer une vidéo dans powerpoint - Guide
- Insérer signature word - Guide
- Insérer liste déroulante excel - Guide
- Insérer sommaire word - Guide
- Insérer filigrane word - Guide
4 réponses
jordane45
Messages postés
38299
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
20 novembre 2024
4 704
12 mai 2015 à 10:52
12 mai 2015 à 10:52
Bonjour,
Tu dois t'assurer que les variables POST issues de ton formulaire existent AVANT de les utiliser .. et leur attribuer une valeur par défaut si elles n'existent pas.
Cela peut se faire ainsi (avec ISSET et l'écriture TERNAIRE)
PS : Plutôt que d'autoriser les champs à NULL dans ta BDD, préfères les mettre "vide".
PS2 : Si tu tiens absolument les avoir à null ... il faudra que tu retires les QUOTES qui entourent tes variables dans la requêtes et les ajouter dans l'écriture ternaire
comme ceci :
Tu dois t'assurer que les variables POST issues de ton formulaire existent AVANT de les utiliser .. et leur attribuer une valeur par défaut si elles n'existent pas.
Cela peut se faire ainsi (avec ISSET et l'écriture TERNAIRE)
$age=isset($_POST['age'])?$_POST['age']:'';
PS : Plutôt que d'autoriser les champs à NULL dans ta BDD, préfères les mettre "vide".
PS2 : Si tu tiens absolument les avoir à null ... il faudra que tu retires les QUOTES qui entourent tes variables dans la requêtes et les ajouter dans l'écriture ternaire
comme ceci :
$age=isset($_POST['age'])? "'".$_POST['age']."'":NULL;
jordane45
Messages postés
38299
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
20 novembre 2024
4 704
12 mai 2015 à 13:55
12 mai 2015 à 13:55
Commence par sortir la REQUETE de son exécution.
(cela te permettra d'en faire un ECHO pour savoir ce qu'elle contient exactement)
Ajoutes un bloc TRY/CATCH pour trapper les erreurs.
Si une erreur se produit, tu auras le message d'erreur exact ainsi que la requête qui l'a provoqué.
Tu prends la requête (qui sera affichée dans ta page....) et tu la testes en DIRECT 'c'est à dire... SANS PASSER PAR LE PHP ! ) dans ta BDD afin de voir ce qui ne vas pas.
Bien entendu... sans connaitre la structure de ta table .. impossible pour nous de t'en dire plus.
PS: Dans les requêtes INSERT ... il est préférable de préciser les champs sur lesquels tu fais l'insertion ...
Par exemple :
Cela évite des erreurs... surtout si tu changes l'ordre de tes champs dans ta table pour x ou y raisons. par exemple.....
(cela te permettra d'en faire un ECHO pour savoir ce qu'elle contient exactement)
Ajoutes un bloc TRY/CATCH pour trapper les erreurs.
try { $sql = "INSERT INTO categorisation VALUES (null ,$id_struct ,$nationalite ,$statut_conflit ,$etat,4 ,$sexe ,$age ,$particularite ,$confession ,$institution ,$administrative ,$aide_sociale ,'$date_ajout' ,NULL"; $bdd->exec($sql) } catch (Exception $e) { echo "<br><b>ERROR !</b><br>"; echo $e->getMessage(); echo "<br><b>REQUETE :</b><br>".$sql; }
Si une erreur se produit, tu auras le message d'erreur exact ainsi que la requête qui l'a provoqué.
Tu prends la requête (qui sera affichée dans ta page....) et tu la testes en DIRECT 'c'est à dire... SANS PASSER PAR LE PHP ! ) dans ta BDD afin de voir ce qui ne vas pas.
Bien entendu... sans connaitre la structure de ta table .. impossible pour nous de t'en dire plus.
PS: Dans les requêtes INSERT ... il est préférable de préciser les champs sur lesquels tu fais l'insertion ...
Par exemple :
INSERT INTO matable (monChamp1,monChamp2,....) VALUES ('valeur1','valeur2',...)
Cela évite des erreurs... surtout si tu changes l'ordre de tes champs dans ta table pour x ou y raisons. par exemple.....
jordane45
Messages postés
38299
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
20 novembre 2024
4 704
>
OpenWeb
12 mai 2015 à 14:14
12 mai 2015 à 14:14
Et ça t'a inséré la ligne dans ta BDD ou pas ?
Si ça ne l'a pas inséré ... tu fais ceci :
Tu récupères la requête qui s'affichera sur ta page ... et tu la testes en direct dans ta BDD.
Si ça ne l'a pas inséré ... tu fais ceci :
try { $sql = "INSERT INTO categorisation VALUES (null ,$id_struct ,$nationalite ,$statut_conflit ,$etat,4 ,$sexe ,$age ,$particularite ,$confession ,$institution ,$administrative ,$aide_sociale ,'$date_ajout' ,NULL"; //le temps des tests : echo "<br><b>REQUETE :</b><br>".$sql; //exécution de la requête $bdd->exec($sql) } catch (Exception $e) { echo "<br><b>ERROR !</b><br>"; echo $e->getMessage(); echo "<br><b>REQUETE :</b><br>".$sql; }
Tu récupères la requête qui s'affichera sur ta page ... et tu la testes en direct dans ta BDD.
jordane45
Messages postés
38299
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
20 novembre 2024
4 704
12 mai 2015 à 15:02
12 mai 2015 à 15:02
C'est quoi la structure de ta table ?
jordane45
Messages postés
38299
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
20 novembre 2024
4 704
12 mai 2015 à 15:42
12 mai 2015 à 15:42
Ok,
Tu peux tester ceci :
Tu peux tester ceci :
$sql=" INSERT INTO `categorisation` ( `id_struct` , `id_nationalite` , `id_statut_conflit` , `id_etat` , `id_sepulture` , `id_sexe` , `id_age` , `id_particularite` , `id_confession` , `id_institution` , `id_administrative` , `id_aide_sociale` , `date_ajout` ) VALUES ( :id_struct ,:nationalite ,:statut_conflit ,:etat ,4 ,:sexe ,:age ,:particularite ,:confession ,:institution ,:administrative ,:aide_sociale ,:date_ajout )"; $params = array( ":id_struct"=>$id_struct ,":nationalite"=>$nationalite ,":statut_conflit"=>$statut_conflit ,":etat"=>$etat ,":sexe"=>$sexe ,":age"=>$age ,":particularite"=>$particularite ,":confession"=>$confession ,":institution"=>$institution ,":administrative"=>$administrative ,":aide_sociale"=>$aide_sociale ,":date_ajout"=>$date_ajout); $prepare = $bdd->prepare($sql); $prepare->execute($params);
J'ai essayé avec le PS2:
J'ai tjrs la même erreur :
Array ( [0] => HY000 [1] => 1366 [2] => Incorrect integer value: '' for column 'id_nationalite' at row 1 )
Si je remplis la nationalité, j'aurais la même erreur mais pour le champ suivant (Incorrect integer value: for column 'id_statut_conflit' at row 1 )
Si je remplis la nationalité et le statut conflit, j'aurais l'erreur :
(Incorrect integer value: for column 'id_etat' at row 1 )
A chaque fois, j'ai cette erreur sur le 1er champ (dans l'ordre) qui n'est pas rempli.
<?php //date en France date_default_timezone_set('Europe/Paris'); if (isset($_POST['valider'])) { $nom_contact=$_SESSION['nom_contact']; echo $nom_contact; $reponse = $bdd->query("SELECT * FROM structure WHERE nom_contact='$nom_contact'"); $donnees = $reponse->fetch(PDO::FETCH_ASSOC); $id_struct=$donnees['id_struct']; while ($donnees = $reponse->fetch(PDO::FETCH_ASSOC)) if ($donnees["id_struct"]==$id_struct) $id_struct=$donnees['id_struct']; $nationalite=isset($_POST['nationalite'])? "'".$_POST['nationalite']."'":NULL; $statut_conflit=isset($_POST['statut_conflit'])? "'".$_POST['statut_conflit']."'":NULL; $etat=isset($_POST['etat'])? "'".$_POST['etat']."'":NULL; //$sepulture=$_POST['id_sepulture']; $sexe=isset($_POST['sexe'])? "'".$_POST['sexe']."'":NULL; $age=isset($_POST['age'])? "'".$_POST['age']."'":NULL; $particularite=isset($_POST['particularite'])? "'".$_POST['particularite']."'":NULL; $confession=isset($_POST['confession'])? "'".$_POST['confession']."'":NULL; $institution=isset($_POST['institution'])? "'".$_POST['institution']."'":NULL; $administrative=isset($_POST['administrative'])? "'".$_POST['administrative']."'":NULL; $aide_sociale=isset($_POST['aide_sociale'])? "'".$_POST['aide_sociale']."'":NULL; $date_ajout = date('Y-m-d H:i:s'); PRINT_r($_POST).'<br />'; $bdd->exec("INSERT INTO categorisation VALUES (null,$id_struct,$nationalite,$statut_conflit,$etat,4,$sexe,$age,$particularite,$confession,$institution,$administrative,$aide_sociale,'$date_ajout',NULL)") or print_r($bdd->errorInfo()); } ?>
J'ai tjrs la même erreur :
Array ( [0] => HY000 [1] => 1366 [2] => Incorrect integer value: '' for column 'id_nationalite' at row 1 )
Si je remplis la nationalité, j'aurais la même erreur mais pour le champ suivant (Incorrect integer value: for column 'id_statut_conflit' at row 1 )
Si je remplis la nationalité et le statut conflit, j'aurais l'erreur :
(Incorrect integer value: for column 'id_etat' at row 1 )
A chaque fois, j'ai cette erreur sur le 1er champ (dans l'ordre) qui n'est pas rempli.
12 mai 2015 à 10:56
(ce que je te conseille d'utiliser.... pour TOUTES tes requêtes ... cela permet, entre autres choses, de limiter les risques d'injection SQL par des personnes mal intentionnées....)
https://www.php.net/manual/fr/pdo.prepare.php
.
12 mai 2015 à 11:14
12 mai 2015 à 11:17
==>>> Montres ton code modifié
Et quand tu dis ça ne marche pas ... c'est à dire ?? Merci de nous donner plus de détails.