SQLSTATE[HY000]: General error: 1364 Field 'id'

Résolu/Fermé
Yougo120 Messages postés 21 Date d'inscription dimanche 26 août 2018 Statut Membre Dernière intervention 16 décembre 2018 - 1 sept. 2018 à 06:06
jordane45 Messages postés 38042 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 27 février 2024 - 1 sept. 2018 à 13:59
Bonjour,

Je souhaiterais auto-incrément ma valeur "id" mais je n'y arrive pas (cela fait 2h que je cherche) erreur complète:

SQLSTATE[HY000]: General error: 1364 Field 'id' doesn't have a default value


<code><?php
session_start();
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
try{

  $db = new PDO('mysql:host=localhost;dbname=dropshipping', 'root','root');
  $db->setAttribute(PDO::ATTR_CASE, PDO::CASE_LOWER); // les noms de champs seront en caractères minuscules
  $db->setAttribute(PDO::ATTR_ERRMODE , PDO::ERRMODE_EXCEPTION); // les erreurs lanceront des exceptions
  global $db;
}catch(Exception $e)
{
    echo 'Problème: ' . $e->getMessage();
}

if(isset($_POST['forminscription'])) {
   $pseudo = htmlspecialchars($_POST['pseudo']);
   $mail = htmlspecialchars($_POST['mail']);
   $mail2 = htmlspecialchars($_POST['mail2']);
   $mdp = sha1($_POST['mdp']);
   $mdp2 = sha1($_POST['mdp2']);
   $reqpseudo = $db->prepare("SELECT * FROM membres WHERE pseudo = ?");
   $reqpseudo->execute(array($pseudo));
   $pseudoexist = $reqpseudo->rowCount();
   if($pseudoexist == 0) {
   if (!empty($_POST['checkbox'])){
   if(!empty($_POST['pseudo']) AND !empty($_POST['mail']) AND !empty($_POST['mail2']) AND !empty($_POST['mdp']) AND !empty($_POST['mdp2'])) {
      $pseudolength = strlen($pseudo);
      if($pseudolength <= 255) {
         if($mail == $mail2) {
            if(filter_var($mail, FILTER_VALIDATE_EMAIL)) {
               $reqmail = $db->prepare("SELECT * FROM membres WHERE mail = ?");
               $reqmail->execute(array($mail));
               $mailexist = $reqmail->rowCount();
               if($mailexist == 0) {
                  if($mdp == $mdp2) {
  						$motdepasse = $_POST['mdp'];

						  try{
						$insertmbr = $db->prepare("INSERT INTO membres(pseudo, mail, motdepasse) VALUES(?, ?, ?)");
                     	$insertmbr->execute(array($pseudo, $mail, $mdp));
						}catch(Exception $e)
						{
						    echo 'Problème: ' . $e->getMessage();

						}
                     $erreur = "Votre compte a bien été créé ! <a href=\"connexion.php\">Me connecter</a>";
                  } else {
                     $erreur = "Vos mots de passes ne correspondent pas !";
                  }
               } else {
                  $erreur = "Adresse mail déjà utilisée !";
               }
            } else {
               $erreur = "Votre adresse mail n'est pas valide !";
            }
         } else {
            $erreur = "Vos adresses mail ne correspondent pas !";
         }
      } else {
         $erreur = "Votre pseudo ne doit pas dépasser 255 caractères !";
      }
   } else {
      $erreur = "Tous les champs doivent être complétés !";
   }
} else {
      $erreur = "Veuillez accepter les Conditions !";
   }
} else {
      $erreur = "Pseudo déjà utilisée !";
   }
}
?>


<html>
   <head>
      <title>Inscription</title>
      <meta charset="utf-8">
          <link href="bootstrap.css" type="text/css" rel="stylesheet"/>
   </head>
   <body>
      <div align="center">
      	<div class="register">
      	<br/><br/><br/>
      	<img src="/dropshipping/logos/login.png"/>
      	<br/><br/>
         <h2 class="reg">S'inscrire</h2>
         <br />
         <form method="POST" action="">
            <table >
               <tr>
                  <td>
                     <input type="text" placeholder="Votre pseudo" id="pseudo" name="pseudo" value="<?php if(isset($pseudo)) { echo $pseudo; } ?>" />
                  </td>
               </tr>

               <tr>
                  <td>
                     <input type="email" placeholder="Votre mail" id="mail" name="mail" value="<?php if(isset($mail)) { echo $mail; } ?>" />
                  </td>
               </tr>

               <tr>
                  <td>
                     <input type="email" placeholder="Confirmez votre mail" id="mail2" name="mail2" value="<?php if(isset($mail2)) { echo $mail2; } ?>" />
                  </td>
               </tr>
               
               <tr>
                  <td>
                     <input type="password" placeholder="Votre mot de passe" id="mdp" name="mdp" />
                  </td>
               </tr>
               
               <tr>   
                  <td>
                     <input type="password" placeholder="Confirmez votre mdp" id="mdp2" name="mdp2" />
                  </td>
               </tr>
                     <br />
            </table>
            <br/>
            <input type="checkbox" id="checkbox" name="checkbox" value="checkbox" />
            <label for="checkbox">Accepter les <a href="cond.php">Condtitions</a></label>
            <br/>
            <input type="submit" name="forminscription" value="Je m'inscris" />
         </form>
     </div>
         <?php
         if(isset($erreur)) {
            echo '<font color="red">'.$erreur."</font>";
         }
			?>
      </div>
   </body>
</html>
</code>

1 réponse

jordane45 Messages postés 38042 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 27 février 2024 4 622
Modifié le 1 sept. 2018 à 08:53
Bonjour,

Déjà.. tu n'as pas tenu compte de toutes mes explications précédentes
https://forums.commentcamarche.net/forum/affich-35558237-probleme-communication-base-de-donnee-et-php#1
Principalement :

- htmlspecialchars ne s'utilise QUE pour l'affichage. En aucun cas pour l'enregistrement en bdd
- sha1 n'est plus à utiliser. Désormais on utilise les fonctions php
http://php.net/manual/fr/function.password-hash.php pour coder le password
https://www.php.net/manual/fr/function.password-verify.php pour le vérifier

- rowCount ne s'utilise pas avec une requête SELECT. A la place on fera un COUNT


Ensuite, concernant ton souci... c'est au niveau de la BDD qu'il faut définir ton champ ID en auto-incrémenté.
Il faut donc que tu ailles dans ta bdd (via phpmyadmin par exemple) et que tu modifies la structure de ta table et que tu y définisses :
1 - Champ id en auto incrementé
2 - Champ id en clé primaire




0
Yougo120 Messages postés 21 Date d'inscription dimanche 26 août 2018 Statut Membre Dernière intervention 16 décembre 2018
Modifié le 1 sept. 2018 à 14:00
Merci,
Mais le champ id est déjà en auto incrémenté et ma clé est déjà en primaire donc que faire ?

EDIT:

C'est bon, je ne sais pas pour quelle raison mais le auto incrément s'est enlevé automatiquement je l'ai donc réactivé et puis pour ce qui est du reste, J'avais suivi tes conseils mais j'ai modifier pleins de choses dans mon code qui au final ne marchait plus j'ai donc fait cmd+z (mac) et mes modifications se sont donc annulés. MERCI BEAUCOUP à tout les forumeurs, c'est grâce à vous que j'avance au quotidien sur mon site !
0
jordane45 Messages postés 38042 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 27 février 2024 4 622
1 sept. 2018 à 13:59
Si comme tu le dis elle est déjà primaire et auto-incrémentée... tu n'a rien à faire..... ça devrait donc déjà s'auto-incrémenter......
Donc quel est le souci exactement ?
Les données s'incèrent bien dans ta bdd ? As tu vérifié directement dans phpmyadmin ?
Peux tu nous mettres un DUMP (structure) de ta table ?
0