SQLSTATE[HY000]: General error: 1364 Field 'id'
Résolu
Yougo120
Messages postés
21
Date d'inscription
Statut
Membre
Dernière intervention
-
jordane45 Messages postés 38486 Date d'inscription Statut Modérateur Dernière intervention -
jordane45 Messages postés 38486 Date d'inscription Statut Modérateur Dernière intervention -
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
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>
A voir également:
- General error: 1364
- Sqlstate[42000] ✓ - Forum MySQL
- Sqlstate hy000 ✓ - Forum PHP
- Mysqli::real_connect(): (hy000/2002): aucune connexion n’a pu être établie car l’ordinateur cible l’a expressément refusée - Forum Bases de données
- Conseil pour MySQLI ✓ - Forum Webmastering
- Error 2002 (hy000) - Forum Bases de données
1 réponse
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 :
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
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
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 !
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 ?