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

Langage PHP Discussion :

Insertion de arrays dans une table


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Insertion de arrays dans une table
    Bonjour, je voulais savoir comment insérer des ARRAY (au nombres de 6) au sein d'une même table, mais dans des champs différents.

    Je connais déjà le Serialize mais je ne voudrais pas l'utiliser car il ne répond pas exactement a mes attentes. Ce que j'aurais voulu, c'est insérer toutes les valeurs des array chacune dans un champs sans.

    Je m'explique, soit le tableau suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Eleve Classe Age
    Cindy 6eme   25
    Louis 5eme   14
    Nana  CM2    4
    ...   ...    ...
    J'ai un array $noms qui stocke tous les noms
    de même qu'un array $classe qui stocke toute les classes
    de même qu'un array $age qui stocke tous les ages.
    Je voudrais inserer ces 3 array dans la tables etudiants de sorte a preserver
    cette meme aborescence, cette meme structure.

    J'ai pu realiser un code qui ceer un nouvel enregistrement pour chaque valeur d'un array.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    foreach($Eleves[1] as $resultat1) 
    { 
    $sqlstring="INSERT INTO `etudiants`.`infos` (`ID`, `Eleves`, `Classe`, `Age`) VALUES (NULL, '".mysql_real_escape_string($resultat1)."', '".mysql_real_escape_string($classe)."', '".mysql_real_escape_string($age)."')"; 
    echo $sqlstring . "<hr/>"; 
    $requette=mysql_query($sqlstring) OR die (mysql_error()); 
    }

    Cependant ce code insere la liste des etudiants comme voulu mais au lieu de completer sur la meme ligne la liste des classe et l'age pour chaque etudiants, au contraire il cree de nouveaux enregistrement ce qui fait qu'a la fin on a un decalage du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ID  Eleves  Classe Age
    1   Cindy
    2   Louis
    3   Nana
    4           6eme
    5           5eme
    6           CM2
    7                  25
    8                  14
    9                  4
    Merci

  2. #2
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 342
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 342
    Billets dans le blog
    17
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $n = count($eleves) ; # $eleves, $ages et $classes ont le même nbre d'éléments
    for ( $i = 0 ; $i < $n ; $i++ ) {
        $sql = 'INSERT INTO infos(eleve, age, classe) ' 
             . "VALUES('{$eleves[$i]}', {$ages[$i]}, '{$classes[$i]}')" ;
        ...
    }
    Voilà pour le principe, à toi de peaufiner.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Voila ma fonction modfiee pour avoir le resultat escompter mais lorsque je regarde au niveau de la base de donnee, je ne vois aucun enregistrement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $n = count($aPoints) ;
     for ( $i = 0 ; $i < $n ; $i++ ) {
        $sql = "INSERT INTO `test_stats`.`entries` (`ID`, `Points`, `Tournaments_Played`, `Date`) VALUES ('{$aPoints[$i]}', {$aTournaments_Played[$i]}, '{$aDate[$i]}')";
    echo $sql . "<hr/>";
    	$requette=mysql_query($sql) OR die (mysql_error()); 
    }
    Et j'ai ce message d'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Column count doesn't match value count at row 1

  4. #4
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 342
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 342
    Billets dans le blog
    17
    Par défaut
    Manquerait pas un mysql_query( ) ?

  5. #5
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 342
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 342
    Billets dans le blog
    17
    Par défaut
    Et il faudrait soit retirer ID de la liste des champs à insérer soit rajouter un NULL dans le VALUES.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Au finish voila mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     $n = count($aPoints) ;
     for ( $i = 0 ; $i < $n ; $i++ ) {
        $sql = "INSERT INTO `test_stats`.`entries` (`ID`, `Points`, `Tournaments_Played`, `Date`) VALUES (NULL, '{$aPoints[$i]}', {$aTournaments_Played[$i]}, '{$aDate[$i]}')";
    	echo $sql . "<hr/>";
    	$requette=mysql_query($sql) OR die (mysql_error()); 
    }
    et sur la page, voila ce que j'obtient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Array
    (
    )
    INSERT INTO `test_stats`.`entries` (`Points`, `Tournaments_Played`, `Date`) VALUES ('Array', Array, 'Array')
    Unknown column 'Array' in 'field list'

  7. #7
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Ce serait plus simple pour toi d'avoir un tableau à 2 dimentions:
    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
     
    $eleves = arrray(
      array('classe' => 'CM1', 'eleve' => 'Albert Trebla', 'age' => 10),
      array('classe' => 'CM1', 'eleve' => 'Dominique Euqinimod', 'age' => 9),
      // ...
    );
     
    $query = "INSERT INTO `etudiants`.`infos` (`Eleves`, `Classe`, `Age`)";
    $values = array();
    foreach ($eleves as $eleve) {
      extract($eleve);
      $values[] = "('$eleve','$classe','$age')";
    }
    if (!empty($values)) {
      $query .= ' VALUES ' . implode(',', $values);
      $res = mysql_query($query);
      // ...
    }

Discussions similaires

  1. Réponses: 5
    Dernier message: 26/01/2007, 08h11
  2. [SQL 2005][ASP.net 2]Insertion de date dans une table
    Par skystef dans le forum Accès aux données
    Réponses: 2
    Dernier message: 29/12/2006, 09h26
  3. Réponses: 3
    Dernier message: 23/11/2006, 16h45
  4. [A97] VBA : Commande sql pour insertion de champs dans une table
    Par JeremieT dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 27/07/2006, 13h12
  5. echec d'insertion de ligne dans une table
    Par foblar dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 20/07/2006, 10h13

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