Insérer des données avec identifiant autoincrémenté
Bonjour,
Je lis le tuto "Le tutoriel pour grands débutants pressés" à ce chapitre : PHP Étape VI. Mail malgré le fait que le champ ID de ma table abonnement est en AUTOINCREMENT ( Structure Table_abonnement ), je n'arrive pas à y insérer les données automatiquement .Ça ne marche que si j'introduis manuellement les valeurs numériques dans la requête INSERT. Ce qui n'est guère pratique même pour un grand débutant ;)! Le message d'erreur que je reçois est tel que :
Code:
1 2
| Probleme de requête INSERT dans abonnement
Incorrect integer value: '' for column 'id' at row 1 |
Le problème vient donc de cette ligne :
Code:
$insert_rqst = 'INSERT INTO abonnement VALUES("", "'.$civilite.'", '.$nom.'","' .$prenom.'", "'.$age.'", "'.$adresse.'", "'.$ville.'", "'.$code.'", "'.$tel.'", "'.$abo.'")';
Voici le code intégral inspiré du tuto en question.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
|
<?php
include_once("fonctions.php");
if(isset($_POST['valider']))
{
// Connection à la base de données
do_connexion_for_root();
// Récupération des valeurs entrées par l'utilisateur: '
$civilite = mysql_real_escape_string(htmlspecialchars($_POST['civility']));
$nom = mysql_real_escape_string(htmlspecialchars($_POST['name']));
$prenom = mysql_real_escape_string(htmlspecialchars($_POST['firstname']));
$age = mysql_real_escape_string(htmlspecialchars($_POST['age']));
$adresse = mysql_real_escape_string(htmlspecialchars($_POST['adres']));
$ville = mysql_real_escape_string(htmlspecialchars($_POST['city']));
$code = mysql_real_escape_string(htmlspecialchars($_POST['postalcode']));
$tel = mysql_real_escape_string(htmlspecialchars($_POST['phonenumber']));
$abo = mysql_real_escape_string(htmlspecialchars($_POST['abonnements']));
// Gestion d'un nom de femme :
$dame = '';
if(($civilite=='Mme')||($civilite=='Mlle')){ $dame='e'; }
// Gestion du nom complet du magazine
$magazine = '';
if ($abo == 'main'){ $magazine='J\'ai la main verte.'; }
elseif ($abo == 'pied'){ $magazine='J\'ai le pied marin.'; }
elseif ($abo == 'oeil'){ $magazine='J\'ai l\'oeil vif.'; }
else{ $magazine = 'J\'ai la rate qui se dilate.'; }
echo 'Vous ÊTES : ' . $civilite . ' <br />' . $nom . ' '. $prenom .
',agé '.$dame. ' de ' .$age . ' ans <br /><br />'
. '<strong>Votre adresse</strong> : ' .$adresse . ' '.$ville. ' '. $code .
'<strong><br />Votre téléphone : </strong>'.$tel.'<br/>VOUS AVEZ CHOISI DE VOUS ABONNER À :'.'<h3>'. $magazine .'</h3>'. '<br />
Merci de vous être abonné '.$dame. 'à ce magazine ! <hr />';
do_connexion_for_root();
// Préparation de la commande sql d'insertion
$insert_rqst = 'INSERT INTO abonnement VALUES("", "'.$civilite.'", '.$nom.'","' .$prenom.'", "'.$age.'", "'.$adresse.'", "'.$ville.'", "'.$code.'", "'.$tel.'", "'.$abo.'")';
// Insertion proprement dite :
mysql_query($insert_rqst)or die('Probleme de requête INSERT dans abonnement <br />'
. mysql_error());
// Selection/Affichage des données entrées :
$slct_rqst01 = mysql_query("SELECT * FROM abonnement ORDER BY id DESC")or die( 'Probleme de requête SELECT dans abonnement <br />'. mysql_error());
// Selection/Affichage des données entrées :
while($value_slct_rqst = mysql_fetch_array($slct_rqst01))
{
echo $value_slct_rqst['civility']. ': ' . $value_slct_rqst['name']. $value_slct_rqst['firstname'];
}
// fermeture de la connection
mysql_close();
}
else
{
?>
<html >
<head>
...
</head>
<body>
<h2>...
<form name="abonnement" action="abonnement.php" method="post">
<label for="civility">Civilité</label><br />
<input type="radio" id="civility" name="civility" value="Mr" />Monsieur<br />
<input type="radio" id="civility" name="civility" value="Mme" />Madame<br />
<input type="radio" id="civility" name="civility" value="Mlle" />Madmoiselle
<br /><br />
<label for="name">Nom</label>
<input type="text" id="name" name="name" />
<label for="firstname">Prénom</label>
<input type="text" id="firstname" name="firstname" />
<label for="age">Âge</label>
<input type="text" id="age" name="age" />
<fieldset>
<legend></legend>
<label for="adres">Adresse : </label>
<input type="text" id="adres" name="adres" size="100" maxlength="100" />
<label for="postalcode">Code Postal : </label>
<input type="text" id="postalcode" name="postalcode" size="6" maxlength="6" />
<label for="city">Ville : </label>
<input type="text" id="city" name="city" size="20" maxlength="20" /><br /><br />
<label for="phonenumber">Téléphone:</label>
<input type="text" id="phonenumber" name="phonenumber" size="10" maxlength="10" />
<br />
</fieldset>
<label for="abonnements">Abonnement</label><br />
<input type="radio" id="abonnements" name="abonnements" value="main" />J’ai la main verte.<br />
<input type="radio" id="abonnements" name="abonnements" value="pied" />J’ai le pied marin.<br />
<input type="radio" id="abonnements" name="abonnements" value="oeil" />J’ai l'oeil vif.<br />
<input type="radio" id="abonnements" name="abonnements" value="rate" />
J’ai la rate qui se dilate.<br />
<br />
<input name="valider" type="submit" value="OK"><br />
</form>
<?php
}
?>
</body>
</html> |
Je suis souvent confronté à ce problème. Est-ce dû à un problème de configuration de PHPMYADMIN ou MySQL? Je n'y crois pas personnellement mais vu que j'ai aucune explication ! Merci d'avance pour votre avis et votre coup de main pour m'éclairer sur cette question.
Difficulté d'inserer des données dans MySQL avec ID AUTOINCREMENT
Merci pour votre réponse.
J'ai modifié la requête INSERT comme vous le suggérez :
Code:
$insert_rqst = 'INSERT INTO abonnement VALUES("'.$civilite.'",.$nom.'","'.$prenom.'", "'.$age.'", "'.$adresse.'", "'.$ville.'", "'.$code.'", "'.$tel.'", "'.$abo.'")';
Mais ça ne résout pas le problème. Cette fois j'obtiens le message :
Probleme de requête INSERT dans abonnement
Column count doesn't match value count at row 1
La structure de la table ne change pas.
Je signale qu'auparavant j'avais utilisé cette instruction :
Code:
$insert_rqst = "INSERT INTO abonnement (civility,name,firstname,age,adresse,city,postalcode,phonenumber,abonnements) VALUES($civilite, $nom, $prenom, $age,$adresse, $ville, $code, $tel,$abo)";
Là j'obtenais comme mesage : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(libelle du message)' at line 2
Je ne vois cette erreur dans la requête. :roll:
Insérer des données avec identifiant autoincrémenté
Merci pour vos précieuses indications. :D
J'ai une dernière question pour buggen25.
Citation:
Je viens de regarder dans la structure de la table, id est un entier (int(11)) il faut donc inserer un zero la ou il y a un autoincrément de type entier.
Ce zéro à insérer est-il une règle générale chaque fois qu'on utilise un ID en INT, TINYINT, BIGINT etc ou simplement avec INT? Bref j'aurais souhaité une petite explication sur cette particularité. C'était effective le problème. En gardant ce zéro tout se passe comme prévu.
Pour les " et ' l'erreur était dans le POST. Dans mon script la requête INSERT est inspirée du tuto. Enfin merci pour les raccourcis de jreaux62 et pour la contribution de tout un chacun. :king:
:resolu: