IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Insérer des données avec identifiant autoincrémenté [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 31
    Par défaut 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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    $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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 &Ecirc;TES : ' . $civilite . ' <br />' . $nom . ' '.  $prenom .
    	',ag&eacute '.$dame. '&nbsp;de ' .$age . ' ans <br /><br />' 
    	. '<strong>Votre adresse</strong> : ' .$adresse . '  '.$ville. ' '. $code .
    	'<strong><br />Votre t&eacute;l&eacute;phone : </strong>'.$tel.'<br/>VOUS AVEZ						  		CHOISI DE VOUS ABONNER &Agrave :'.'<h3>'. $magazine .'</h3>'. '<br />
    		Merci de vous &ecirc;tre abonn&eacute; '.$dame. '&agrave;  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&eacute;</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&eacute;nom</label>
        <input type="text" id="firstname" name="firstname" />
        <label for="age">&Acirc;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&eacute;l&eacute;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&rsquo;ai la main verte.<br />
    	<input type="radio" id="abonnements" name="abonnements" value="pied" />J&rsquo;ai le pied marin.<br />
    	<input type="radio" id="abonnements" name="abonnements" value="oeil" />J&rsquo;ai l'oeil vif.<br />
    	<input type="radio" id="abonnements" name="abonnements" value="rate" />
    			J&rsquo;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.

  2. #2
    Membre averti
    Inscrit en
    Juillet 2006
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 22
    Par défaut
    Bonjour,

    essaie ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $insert_rqst = 'INSERT INTO abonnement VALUES("'.$civilite.'", '.$nom.'","'	 .$prenom.'", "'.$age.'", "'.$adresse.'", "'.$ville.'", "'.$code.'", "'.$tel.'",  "'.$abo.'")';
    quand le champ ID est AUTOINCREMENT, c'est même pas la peine de l'indiquer dans votre requete SQL.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 31
    Par défaut 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 : Sélectionner tout - Visualiser dans une fenêtre à part
    $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 : Sélectionner tout - Visualiser dans une fenêtre à part
    $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.

  4. #4
    Membre très actif
    Avatar de buggen25
    Ingénieur développement logiciels
    Inscrit en
    Août 2008
    Messages
    554
    Détails du profil
    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Août 2008
    Messages : 554
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $
    insert_rqst = "INSERT INTO abonnement (id,civility,name,firstname,age,adresse,city,postalcode,phonenumber,abonnements) VALUES(0,$civilite, $nom, $prenom, $age,$adresse, $ville, $code, $tel,$abo)";
    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.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    //table personne
    id INT AUTOINCREMENT
    Nom VARCHAR(30)
    // requette sql
    INSERT INTO personne VALUES(0,"Le nom");

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    le probleme vient de la structure de la requete elle-meme dans le tuto (pardon Dendrite)
    car elle oblige a ecrire autant de valeurs qu'il y a de champs, et dans le bon ordre.

    Il vaut mieux ecrire (c'est plus facile a lire, et on n'est pas obligé d'ecrire tous les champs de la BD) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <?php
    $insert_rqst = "INSERT INTO abonnement 
    (
    champ1,
    champ2,
    champ3 // (pas de virgule pour le dernier)	
    )
    VALUES
    ("
    ."'".$valeurchamps1."'," // (avec des ' pour les champs VAR, sans pour les champs NUMerique)
    ."'".$valeurchamps2."',"
    ."'".$valeurchamps3."'" // (pas de virgule pour le dernier)
    )";
    $insert_result = mysql_query($insert_rqst)  or die('Erreur SQL !<br />'.$insert_rqst.'<br />'.mysql_error());
    ?>
    Perso, j'ecris comme ca (quand j'ai peu de champs/valeurs a ajouter) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
    $listechamps = "champ1,champ2,champ3";
    $listevaleurs = "'".$valeurchamps1."','".$valeurchamps2."','".$valeurchamps3."'";
     
    $insert_rqst = "INSERT INTO abonnement (".$listechamps.") VALUES(".$listevaleurs.")";
    $insert_result = mysql_query($insert_rqst)  or die('Erreur SQL !<br />'.$insert_rqst.'<br />'.mysql_error());?>
    ?>

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    235
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 235
    Par défaut
    En plus il y a un problème de " et de ' dans tes requêtes à chaque fois...
    Entre "civilté" et "nom"

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] insérer des données avec mysql_query
    Par tikigod dans le forum PHP & Base de données
    Réponses: 39
    Dernier message: 16/04/2013, 20h35
  2. Insérer des données avec une boucle while
    Par adnanedelphi dans le forum PHP & Base de données
    Réponses: 19
    Dernier message: 20/11/2011, 13h24
  3. Réponses: 3
    Dernier message: 08/06/2011, 10h36
  4. Réponses: 3
    Dernier message: 14/07/2009, 13h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo