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 :

Php Insert multiple final [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 27
    Points : 18
    Points
    18
    Par défaut Php Insert multiple final
    Bonjour à tous,

    j'ai un petit tableau et à part l'id de mon premier enregistrement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $tableau= array()
    $idmainfiche = mysql_insert_id();
    Dans mon tableau j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    [0] => toto
    [1] => titi
    [2] => tata
    Du coup pour faire un INSERT multiple j'ai trouvé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $sql = "INSERT INTO fiche (id,id_ficheprincipale,id_fiche,nom) VALUES";
    foreach ($tableau as $id => $values) :
      $sql .= "('',$idmainfiche,$id,$values),";
    endforeach;
    $sql = substr ($sql,0,-1); //on enlève la dernière virgule
     
    echo $sql;
    L'echo m'indique bien une commande SQL propre mais lorsque je la lance avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
    j'ai le message d'erreur
    Erreur SQL !INSERT INTO details (id_detail,id_cmd,artdet,qttart) VALUE
    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 '' at line 1
    Je ne comprends pas car avec l'echo je vois que la commande est bonne !

    Merci d'avance à tous (il ne me manque que ça et j'ai fini mon petit site)

  2. #2
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Bonjour.

    1- Je pense que la colonne id est auto-incrémentée, vire la de la requête.
    2- Toutes les valeurs qui ne sont pas de type entier doit être entre de guillemet simple ou double.

    A+.

  3. #3
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    voici un code d'insertion multiple plus propre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $data = array();
    foreach ($tableau as $id => $name) 
    {
        $data[] = '('.(int)$idmainfiche.', '.(int)$id.', "'.mysql_real_escape_string($name).'")';
    }
     
    $sql = 'INSERT INTO fiche (id_ficheprincipale, id_fiche, nom) VALUES '.implode(', ', $data);

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 27
    Points : 18
    Points
    18
    Par défaut
    Hum merci mais j'ai toujours le même message d'erreur je vous mets le code peut être que ça peut aider

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $idF = $_POST['idF '];
    $nomF =$_POST['nomF '];
    $tableau = array_combine($idF , $nomF );
    $data = array();
    foreach ($tableau as $id => $name) {
        $data[] = '('.(int)$idmainfiche.', '.(int)$id.', "'.mysql_real_escape_string($name).'")';
    }
    $sql = 'INSERT INTO fiche (id_ficheprincipale, id_fiche, nom) VALUES '.implode(', ', $data);
    mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());

    Je suis chez KALANDA se pourrait il qu'il empèche l'insertion multiple?

  5. #5
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Houlà !!

    Poste plutôt la structure de ta table fiche.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 27
    Points : 18
    Points
    18
    Par défaut
    table fiche :

    id (int 11)
    id_ficheprincipale (int 11)
    id_fiche (int 11)
    nom (varchar 100)



    P.S :

    j'ai mis le code en fin de page automatique c'est à dire sans

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if(isset($_POST['submit']))
    et ça marche... mais il ne marche plus quand je mets le isset .. je vais craquer psychologiquement ^^

  7. #7
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Regarde ton code : $_POST['idF '] il n'y aurait pas comme un espace intempestif ? Pareil pour $_POST['nomF '].
    Dans ce code, tu es bien d'accord que les deux $_POST ramènent un tableau.

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 27
    Points : 18
    Points
    18
    Par défaut
    Oui je ne sais pas si tu as vu mon Post mais ça marche.
    Hors si je mets la condition isset quand on clic sur le bouton valider il va m'afficher le message d'erreur.

    Je vais trouver mais bon je ne comprends pas pourquoi je dois le mettre en fin de code et pas au début comme je fais d'habitude

  9. #9
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    En sécurisant le code, cela donnerait quelque chose dans ce genre :
    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
    if (isset($_POST['idF'], $_POST['nomF']) && is_array($_POST['idF']) && is_array($_POST['nomF']))
    {
    	// je suppose que les idF ne peuvent qu'être des entiers strictements positifs
    	$ids = array_filter(array_map('intval', $_POST['idF']));
     
    	// on ne continue que si le nombre des ids est égal au nombre de noms
    	if (count($ids) === count($_POST['nomF']))
    	{
    		$data = array_combine($ids, $_POST['nomF']);
    		$rows = array();
    		$idfp = (int)$idmainfiche;
     
    		foreach ($data as $id => $nom)
    		{
    			$rows[] = "({$idfp}, {$id}, '".mysql_real_escape_string($nom)."')";
    		}
     
    		$sql = 'INSERT INTO fiche (id_ficheprincipale, id_fiche, nom) VALUES '.implode(', ', $rows);
    		mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
    	}
    }

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 27
    Points : 18
    Points
    18
    Par défaut
    Merci l'ami j'ai modifié le code est il marche parfaitement je le mettrais pour ceux que ça intéresse

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 25/01/2010, 23h06
  2. Insertion multiples via script php
    Par furtif1 dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 09/04/2007, 17h03
  3. Insertion multiple à base de sous requête SELECT
    Par drinkmilk dans le forum Langage SQL
    Réponses: 8
    Dernier message: 14/04/2005, 16h34
  4. INSERT multiples avec : rs.AddNew et .Update
    Par M.Zip dans le forum ASP
    Réponses: 4
    Dernier message: 03/12/2004, 15h53
  5. pb d'insertions multiples
    Par devalender dans le forum SQL
    Réponses: 2
    Dernier message: 14/07/2004, 14h49

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