Erreur : Integrity constraint [Résolu/Fermé]

Signaler
Messages postés
204
Date d'inscription
samedi 4 janvier 2014
Statut
Membre
Dernière intervention
4 juin 2017
-
Messages postés
30447
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
2 décembre 2020
-
Bonsoir à tous et à toutes,

Je viens vers vous pour une erreur que j'ai jamais croisé :


Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'no' cannot be null' in /htdocs/Jeu/pages/entrainement2.php:44 Stack trace: #0 /htdocs/Jeu/pages/entrainement2.php(44): PDOStatement->execute() #1 /htdocs/Jeu/index13.php(154): include('/htdocs/Jeu/pag...') #2 {main} thrown in /htdocs/Jeu/pages/entrainement2.php on line 44


Voici mon code qui pose problème :

if (!empty(nl2br(stripslashes(htmlentities(htmlspecialchars(html_entity_decode($_POST['adopter'])))))))
{
  $selection_pokemon3= $bdd->query("SELECT * FROM pokemon WHERE ExpLvlMax > '5' ORDER BY RAND()");
     $reponse_affichage2 = $selection_pokemon3->fetch();
$nom = $reponse_affichage['nom'];
$no = $reponse_affichage2['no'];
$niveau2 = rand(35,60);
$pv = ($niveau2 * 2);
$pv_max = ($niveau2 * 4);
$exp_max = ($niveau2 * 1000);
$sexe2 = rand(1,2);
$shiney3 = rand(1,1000);
if($shiney3 == 1)
{
 $shiney2 = 'shiney';
}
else
{
 $shiney2 = '';
}
$time = time();
$lieu = 'CentreN2';
 
$insert_pok = $bdd->prepare("INSERT INTO transfertspokemon VALUES('', :ID, :no, :niveau, :pv, :pv_max, '0', :exp_max, :sexe, '0', :shiney, '',
 :time, :lieu, '7', '0', '', '', '', '')");
$insert_pok->bindparam(':ID', $ID, PDO::PARAM_INT);
$insert_pok->bindparam(':no', $no, PDO::PARAM_INT);
$insert_pok->bindparam(':niveau', $niveau2, PDO::PARAM_INT);
$insert_pok->bindparam(':pv', $pv, PDO::PARAM_INT);
$insert_pok->bindparam(':pv_max', $pv_max, PDO::PARAM_INT);
$insert_pok->bindparam(':exp_max', $exp_max, PDO::PARAM_INT);
$insert_pok->bindparam(':sexe', $sexe2, PDO::PARAM_INT);
$insert_pok->bindparam(':shiney', $shiney2, PDO::PARAM_STR);
$insert_pok->bindparam(':time', $time, PDO::PARAM_INT);
$insert_pok->bindparam(':lieu', $lieu, PDO::PARAM_INT);
$insert_pok->execute(); 

 $msg = "Félicitation un pokemon vous a rejoins ! ";?>
  <script> alert('Félicitation <?php echo $nom;?> vous a rejoins dans votre stockage pokemon !'); </script><meta http-equiv="refresh" content="0;url="/>
  <?php
}

else
{}


Voici le formulaire auquel il se rapporte :

<mark>Par votre démonstration, un pokemon souhaite que vous l'adopitez.</mark>
  <h3>Sachez tous de même que ce pokemon n'est pas forcément celui que vous combattez !!! </h3>
  <form action="" method="POST">
  <input type="hidden" value="<?php echo $ID; ?>" name="id">
  <input type="submit" 
         value="Adopter ce pokemon !" 
         name="adopter" 
         style="cursor:pointer; padding:5px 20px; background-color:gold; border-radius:15px;">
  </form>


Je ne suis jamais tombé sur cette erreur et je ne vois pas du tous ou se trouve l'erreur dans ce code donc si quelqu'un pouvait éclairer ma lanterne se serais vraiment généreux de sa part.

Merci par avance.

1 réponse

Messages postés
30447
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
2 décembre 2020
3 043
Bonjour,

Le message d'erreur indique que tu essaies de mettre une valeur null dans un champ de ta table défini pour ne pas les accepter....

Quelle est la structure de ta table ?
La colonne "no" est elle bien en troisième position ( après ton id autoincrementé puis la colonne ID ) ?

Sachant que pour éviter un certain nombre d'ennuis .. il est préférable de nommer les champs dans lesquels tu veux faire l'insertion :
de la façon suivante :
INSERT INTO tatable (champ1,champ2...) 
 VALUES (valeur1,valeur2...)


Messages postés
204
Date d'inscription
samedi 4 janvier 2014
Statut
Membre
Dernière intervention
4 juin 2017

pour ta réponse,

cependant cela ne règle pas mon souci, j'ai toujours la même erreur même en signalant les champs comme tu m'a suggéré.

J'ai bien vérifié aussi l'ordre de toutes les colonnes tous est dans le bon ordre même mes variables qui doivent remplir les champs sont dans le même ordre que l'insertion.

D'autre idée ?
Messages postés
30447
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
2 décembre 2020
3 043
Oui... verifie la valeur des variables en en faisant des echo