Erreur : Integrity constraint

Résolu/Fermé
Lucryio Messages postés 204 Date d'inscription samedi 4 janvier 2014 Statut Membre Dernière intervention 4 juin 2017 - Modifié par Lucryio le 24/02/2016 à 00:49
jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024 - 24 févr. 2016 à 08:45
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

jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024 4 717
24 févr. 2016 à 01:19
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...)


0
Lucryio Messages postés 204 Date d'inscription samedi 4 janvier 2014 Statut Membre Dernière intervention 4 juin 2017
24 févr. 2016 à 08:38
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 ?
0
jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024 4 717
24 févr. 2016 à 08:45
Oui... verifie la valeur des variables en en faisant des echo
0