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 :

Méthode de récupération de plusieurs valeurs en fonctions du nombre de lignes d'un tableau.


Sujet :

Langage PHP

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

    Informations forums :
    Inscription : Octobre 2012
    Messages : 58
    Points : 23
    Points
    23
    Par défaut Méthode de récupération de plusieurs valeurs en fonctions du nombre de lignes d'un tableau.
    Bien le bonjours/bonsoir à tous !
    Alors je m'explique, j'ai un tableau comme suit :

    Nom : Sans titre.png
Affichages : 237
Taille : 27,1 Ko


    L'ors ce que je clique sur le "+" du deuxième tableau, une nouvelle ligne s'ajoute avec 5 inputs, que j'ai encadrés en rouge allant de la droite vers la gauche, je précise que cela s'effectue grâce à un code Jquery.
    Le but étant donc de récupérer les valeurs de touts ces inputs et ensuite d'insérer les valeurs dans la base de données.

    J'arrive à faire cela avec la toute première ligne qui est toujours présente par défaut.
    Or si l'utilisateur décide de rajouter 4 ligne supplémentaires ( par exemple) il fraudrais récupérer les données non seulement de la première ligne mais aussi des 4 autres, et s'il en ajoute 6, même opération etc...

    Je n'est absolument aucune idées de comment faire ceci, je vous met mon bout de code avec le quelle je récupère les valeurs de la première ligne et les insères dans la BDD :
    Je suis plutôt débutant en PHP et il est vrai qu’après 3 jours de recherche j'en vient a bout !

    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
     
    <?php
    if( (!empty($_POST['nom'])) && (!empty($_POST['id'])) && (!empty($_POST['type'])) && (!empty($_POST['table']))  ){
     
     
     
    // On commence par récupérer les champs 
    if(isset($_POST['index'])) $index=$_POST['index'];
    else    $index=""; 
     
    if(isset($_POST['nom']))      $nom=$_POST['nom']; 
    else      $nom="nom";
     
    if(isset($_POST['id']))      $id=$_POST['id']; 
    else     $id="id";
     
    if(isset($_POST['type']))     $type=$_POST['type']; 
    else   $type="type";
     
    if(isset($_POST['table']))     $table=$_POST['table']; 
    else     $table="table";
     
     
    // connexion
    $mysql_user="admin";
    $mysql_password="admin";
    $reqco = mysql_connect("localhost",$mysql_user,$mysql_password) or die('Erreur de connexion '.mysql_error());
     
    //sélection de la BDD
    $reqse = mysql_select_db("tp_arexx",$reqco) or die('Erreur de connexion '.mysql_error());
     
        // on écrit la requête sql 
         $sql="INSERT INTO `tp_arexx_capteurs` (`Arexx_index`, `Arexx_Id`, `Arexx_Type`, `Arexx_Table`, `Arexx_Name`)
          VALUES('$_POST[index]','$_POST[id]','$_POST[type]','$_POST[table]','$_POST[nom]')";
     
        // on insère les informations du formulaire dans la table 
        mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error()); 
    	//sélection de la BDD
    $reqse = mysql_select_db("tp_arexx",$reqco);
     
     $sql_query = "CREATE TABLE `$_POST[table]` ( `Arexx_index` BIGINT(4) AUTO_INCREMENT NOT NULL, `marqueur_temps` VARCHAR(16) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL, `mesure` VARCHAR(20) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL,
     `rssi` VARCHAR(10) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL, `jour` DATE NOT NULL, `heure` TIME NOT NULL, PRIMARY KEY (`Arexx_index`))";   // Requête 
          $result_query=mysql_query($sql_query);
    	  mysql_query($sql_query);     // Exécution de la requête 
          $Erreur = mysql_error(); 
     
     } 
    	  else {
    	  }
    ?>
    Un très grand merci à vous tous d'avance !
    Bonne soirée/journée.

  2. #2
    Membre actif Avatar de jisig
    Homme Profil pro
    null
    Inscrit en
    Avril 2014
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Indonésie

    Informations professionnelles :
    Activité : null

    Informations forums :
    Inscription : Avril 2014
    Messages : 146
    Points : 273
    Points
    273
    Par défaut Une réponse un peu vague, mais la marche à suivre est là
    Bonsoir,

    Je peux certes voir que tu réceptionnes tes variables, mais j'aimerais surtout savoir comment elles s'envoient, tu incrémentes tes variables 'name' sur tes inputs ?

    Quoi qu'il arrive tu devras déjà faire une boucle pour récupérer toutes tes variables jusqu'à ce que tu arrives à la fin de tes inputs

    À chaque fois tu devras également vérifier les variables de ton input.

    Jisig
    Même une feuille de papier est plus légère si on la porte à deux.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2012
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 58
    Points : 23
    Points
    23
    Par défaut
    Merci d'avoir répondu !
    Alors voilà mes inputs si je comprend bien mes inputs je met deux crochets [] comme suit pour faire un tableau donc, jusqu'ici tout va bien.
    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
     <tr class="headingTr" id="headingTr">
     <td><center>&nbsp;Index du capteur&nbsp;</center></td> 
    <td><center>&nbsp;Nom du capteur&nbsp;</center></td> 
    <td><center>&nbsp;Identifiant du capteur&nbsp;</center></td> 
    <td><center>&nbsp;Type du capteur&nbsp;</center></td> 
    <td><center>&nbsp;Table correspondant au capteur&nbsp;</center></td>
        <td></td>
      </tr>
     
     
     <tr id="sformadd">
    <td><center><input type="text" name="index[]" id="text" size="15" value=""  maxlength="20"></center> </td> 
    <td><input type="text" name="nom[]" size="15" id="text0" value="" class="remplit" maxlength="20"><br></td> 
    <td><input type="text" name="id[]" size="15" id="text1"  value="" class="remplit" maxlength="20"> </td> 
    <td><input type="text"  size="15" name="type[]" id="text2" value="" class="remplit" maxlength="20"><br></td> 
    <td><input type="text" name="table[]" size="15" id="text3" value="" class="remplit" maxlength="20"> </td> 
    </tr>
    Le début de mon code PHP est donc bon ?
    Ce que je ne comprend c'est l'emploies du foreach :/ qui pourrait très bien s'appliquer au miens pour faire une boucle ?

    Ceci est un éxemple :
    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
    <?php foreach($BX_NAME as $a => $b){ ?>
    	<tr>
    	<p>
    		<td>
    			<?php echo $a+1; ?>
    		</td>
    		<td>
    			<label>Name</label>
    			<input type="text" readonly="readonly" name="BX_NAME[$a]" value="<?php echo $BX_NAME[$a]; ?>">
    		</td>
    		<td>
    			<label for="BX_age">Age</label>
    			<input type="text" readonly="readonly" class="small"  name="BX_age[]" value="<?php echo $BX_age[$a]; ?>">
    		</td>
    		<td>
    			<label for="BX_gender">Gender</label>
    			<input type="text" readonly="readonly" name="BX_gender[]" value="<?php echo $BX_gender[$a]; ?>">
    		</td>
    		<td>
    			<label for="BX_birth">Berth Pre</label>
    			<input type="text" readonly="readonly" name="BX_birth[]" value="<?php echo $BX_birth[$a]; ?>">
    		</td>
    	</p>
    	</tr>
    <?php } ?>
    Par éxemple sa pourrait donner quoi ? Car j'en est essayer plusieurs mais sans succès ...
    Merci !

  4. #4
    Membre actif Avatar de jisig
    Homme Profil pro
    null
    Inscrit en
    Avril 2014
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Indonésie

    Informations professionnelles :
    Activité : null

    Informations forums :
    Inscription : Avril 2014
    Messages : 146
    Points : 273
    Points
    273
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <td><center><input type="text" name="index[]" id="text" size="15" value=""  maxlength="20"></center> </td> 
    <td><input type="text" name="nom[]" size="15" id="text0" value="" class="remplit" maxlength="20"><br></td> 
    <td><input type="text" name="id[]" size="15" id="text1"  value="" class="remplit" maxlength="20"> </td> 
    <td><input type="text"  size="15" name="type[]" id="text2" value="" class="remplit" maxlength="20"><br></td> 
    <td><input type="text" name="table[]" size="15" id="text3" value="" class="remplit" maxlength="20"> </td> 
    </tr>
    Les crochets comme valeur pour ton attribut name me semblent pas un choix très judicieux.

    Normalement, tu crées tes noms de variables depuis jquery si j'ai bien compris, donc quand tu ajoutes cinq inputs, il doit vérifier ceux qui existent afin d'incrémenter tes valeurs de l'attribut name.

    Ce que je ne comprend c'est l'emploies du foreach :/ qui pourrait très bien s'appliquer au miens pour faire une boucle ?
    On utilise foreach pour parcourir un array, mais là normalement tu dois juste tester des noms de variables, je ferais ça avec une boucle while pour tester tes variables. et j'utiliserais un input en display:none (pour pas qu'on le voit qui me servirait à savoir combien de input tu as pour justement tester tes variables après.

    J'espère que je parviens à me faire comprendre.

    ps : Il y a probablement un peu plus court mais je ne vois pas sur le moment.

    Jisig.
    Même une feuille de papier est plus légère si on la porte à deux.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2012
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 58
    Points : 23
    Points
    23
    Par défaut
    Je suis vraiment désoler mais je ne voit pas du tout comment faire ça !
    Aurait tu un éxemple a me proposer ? Merci beaucoup !

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <td><center><input type="text" name="index[]" id="text" size="15" value=""  maxlength="20"></center> </td> 
    <td><input type="text" name="nom[]" size="15" id="text0" value="" class="remplit" maxlength="20"><br></td> 
    <td><input type="text" name="id[]" size="15" id="text1"  value="" class="remplit" maxlength="20"> </td> 
    <td><input type="text"  size="15" name="type[]" id="text2" value="" class="remplit" maxlength="20"><br></td> 
    <td><input type="text" name="table[]" size="15" id="text3" value="" class="remplit" maxlength="20"> </td>
    CONTRAIREMENT à ce que dit Jisig, il FAUT mettre des crochets aux name.

    Lors du traitement du formulaire, tu récupères alors des tableaux (array()) de valeurs pour chaque name :
    $_POST['index'], $_POST['nom'], $_POST['id'],... sont des array().
    Pour traiter ligne par ligne ton tableau (<table>) :
    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
    foreach( $_POST['index'] as $ii => $val )
    {
       // récupération des valeurs de la ligne
       $val_index = $val; // = $_POST['index'][$ii]
       $val_nom = $_POST['nom'][$ii];
       $val_id = $_POST['id'][$ii];
       $val_type = $_POST['type'][$ii];
       $val_table = $_POST['table'][$ii];
     
       // gestion d'erreur
       // ...
     
       // insertion en BdD
       // ...
     
    }
    N.B. tu devrais mettre des noms de variables moins... banals/simplistes ("id", "nom", "table", "type",...) pour éviter des confusions (mots réservés,...).
    par exemple : "capteur_id", "capteur_nom", "capteur_table",...
    Dernière modification par Invité ; 01/03/2015 à 21h56.

  7. #7
    Membre actif Avatar de jisig
    Homme Profil pro
    null
    Inscrit en
    Avril 2014
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Indonésie

    Informations professionnelles :
    Activité : null

    Informations forums :
    Inscription : Avril 2014
    Messages : 146
    Points : 273
    Points
    273
    Par défaut
    J'ai pas tout saisi pour ma part, mes excuses si ce que j'ai dit menait sur la mauvaise route. je repars étudier (J'en ai encore bien besoin ! )
    Même une feuille de papier est plus légère si on la porte à deux.

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

    Informations forums :
    Inscription : Octobre 2012
    Messages : 58
    Points : 23
    Points
    23
    Par défaut
    Un grand merci à toi ! Le code a l'air de fonctionner correctement seulement dés lors que je rentre mes valeurs dans mon tableau j'ai une erreur comme suit :

    Nom : Sans titre.png
Affichages : 201
Taille : 64,8 Ko

    Array to string conversion ...

    Je tiens aussi à préciser que je ne comprend pas pourquoi, quand je ne rentre absolument rien dans mon tableau et que j'actualise ma page une requête ce fait ( je pense ) et remplit la première ligne de mon tableau automatiquement avec que des "Array" d'écrit, et avant cette fameuse requête j'ai un message du style : Warning: Invalid argument supplied for foreach()

    Voici le code du fichier create.php :

    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
     
    <!-- noty -->
    <html>
    <body>
    <head>
    <link rel="stylesheet" type="text/css" href="font-awesome/css/font-awesome.min.css" media="screen" />
    <script type="text/javascript" src="js/noty/packaged/jquery.noty.packaged.min.js"></script>
    <script src="jquery-1.7.2.min.js"></script>
    <script type='text/javascript' src='http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js'></script>
      <script src='http://codepen.io/assets/libs/fullpage/jquery.js'></script>
     
    <?php
    foreach( $_POST['index'] as $ii => $val )
    {
       // récupération des valeurs de la ligne
       $val_index = $val; // = $_POST['index'][$ii]
       $val_name = $_POST['nom'][$ii];
       $val_id = $_POST['id'][$ii];
       $val_type = $_POST['type'][$ii];
       $val_table = $_POST['table'][$ii];
     
       // gestion d'erreur
       // ...
     
       // insertion en BdD
       // ...
     
     
     
     
    // connexion
    $mysql_user="admin";
    $mysql_password="admin";
    $reqco = mysql_connect("localhost",$mysql_user,$mysql_password) or die('Erreur de connexion '.mysql_error());
     
    //sélection de la BDD
    $reqse = mysql_select_db("tp_arexx",$reqco) or die('Erreur de connexion '.mysql_error());
     
        // on écrit la requête sql 
         $sql="INSERT INTO `tp_arexx_capteurs` (`Arexx_index`, `Arexx_Id`, `Arexx_Type`, `Arexx_Table`, `Arexx_Name`)
          VALUES('$_POST[index]','$_POST[id]','$_POST[type]','$_POST[table]','$_POST[nom]')";
     
        // on insère les informations du formulaire dans la table 
        mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error()); 
    	//sélection de la BDD
    $reqse = mysql_select_db("tp_arexx",$reqco);
     
     $sql_query = "CREATE TABLE `$_POST[table]` ( `Arexx_index` BIGINT(4) AUTO_INCREMENT NOT NULL, `marqueur_temps` VARCHAR(16) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL, `mesure` VARCHAR(20) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL,
     `rssi` VARCHAR(10) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL, `jour` DATE NOT NULL, `heure` TIME NOT NULL, PRIMARY KEY (`Arexx_index`))";   // Requête 
          $result_query=mysql_query($sql_query);
    	  mysql_query($sql_query);     // Exécution de la requête 
          $Erreur = mysql_error(); 
     
     }	
    ?>
     
    	</body>
     
    	</head>
    	</html>
    Voici le code de mes inputs ( écrits sur une autre page ) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     <tr id="sformadd">
    <td><center><input type="text" name="index[]" id="text" size="15" value=""  maxlength="20"></center> </td> 
    <td><input type="text" name="nom[]" size="15" id="text0" value="" class="remplit" maxlength="20"><br></td> 
    <td><input type="text" name="id[]" size="15" id="text1"  value="" class="remplit" maxlength="20"> </td> 
    <td><input type="text"  size="15" name="type[]" id="text2" value="" class="remplit" maxlength="20"><br></td> 
    <td><input type="text" name="table[]" size="15" id="text3" value="" class="remplit" maxlength="20"> </td> 
    </tr>
    Comment puis-je résoudre ce problème ? Merci beaucoup !

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2012
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 58
    Points : 23
    Points
    23
    Par défaut
    Citation Envoyé par jisig Voir le message
    J'ai pas tout saisi pour ma part, mes excuses si ce que j'ai dit menait sur la mauvaise route. je repars étudier (J'en ai encore bien besoin ! )
    Ce n'est pas grave du tout !

  10. #10
    Invité
    Invité(e)
    Par défaut
    Il ne suffit pas de copier-coller les bouts de code qu'on te donne...

    il faut aussi comprendre ce qu'on fait !!

  11. #11
    Membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mars 2004
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Mars 2004
    Messages : 84
    Points : 62
    Points
    62
    Par défaut
    une requête ce fait ( je pense ) et remplit la première ligne de mon tableau automatiquement avec que des "Array" d'écrit, et avant cette fameuse requête j'ai un message du style : Warning: Invalid argument supplied for foreach()
    Cela me fait penser à l'insertion d'un contenu vide : est-ce que tu testes bien qu'il y a un contenu à insérer dans la bdd avant de faire la requête ?
    DigiTools
    Tools and resources to benefit from the digital

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2012
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 58
    Points : 23
    Points
    23
    Par défaut
    Citation Envoyé par gazza Voir le message
    Cela me fait penser à l'insertion d'un contenu vide : est-ce que tu testes bien qu'il y a un contenu à insérer dans la bdd avant de faire la requête ?
    Je ne sais pas du tout comment l'on peut effectuer ce test ?

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2012
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 58
    Points : 23
    Points
    23
    Par défaut
    Merci j'ai trouver comment tester grâce à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if( (!empty($_POST['nom'])) && (!empty($_POST['id'])) && (!empty($_POST['type'])) && (!empty($_POST['table']))  ){
    Mais pour cet fameuse conversion je ne trouve pas, je sais qu'il faut crée un Array dans la requéte SQL seulement dois-je remplacer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    // on écrit la requête sql 
         $sql="INSERT INTO `tp_arexx_capteurs` (`Arexx_index`, `Arexx_Id`, `Arexx_Type`, `Arexx_Table`, `Arexx_Name`)
          VALUES('$_POST[index]','$_POST[id]','$_POST[type]','$_POST[table]','$_POST[nom]')";
    Par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    // on écrit la requête sql 
         $sql="INSERT INTO `tp_arexx_capteurs` (`Arexx_index`, `Arexx_Id`, `Arexx_Type`, `Arexx_Table`, `Arexx_Name`)
          VALUES('$_POST['index']','$_POST['id']','$_POST['type']','$_POST['table']','$_POST['nom']')";
    En rajoutant des ' ' entre les noms ( que je changerais plus tard ) ou avec des implode dans la requête mais j'y crois moins ?
    Car si j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $sql='INSERT INTO `tp_arexx_capteurs` (`Arexx_index`, `Arexx_Id`, `Arexx_Type`, `Arexx_Table`, `Arexx_Name`)
          VALUES('.implode(',',$_POST['index']).implode(',',$_POST['id']).implode(',',$_POST['type']).implode(',',$_POST['table']).implode(',',$_POST['nom']).')';
    Je pense que c'est juste ? M'indique une erreur :

    Erreur SQL !INSERT INTO `tp_arexx_capteurs` (`Arexx_index`, `Arexx_Id`, `Arexx_Type`, `Arexx_Table`, `Arexx_Name`) VALUES(9,89,89,89,89,8)
    Column count doesn't match value count at row 1

    Je précise que dans la première ligne j'ai mis que des 9 et dans celle d'en bas que des 8

  14. #14
    Invité
    Invité(e)
    Par défaut
    Code php : 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
    // --------------------------------------------------
    // connexion à la Base de Données
    $mysql_user="admin";
    $mysql_password="admin";
    $reqco = mysql_connect("localhost",$mysql_user,$mysql_password) or die('Erreur de connexion '.mysql_error());
    // sélection de la BDD
    $reqse = mysql_select_db("tp_arexx",$reqco);
     
    // --------------------------------------------------
    // RECUPERATION / ENREGISTREMENT en BdD
    // $_POST['nom'], $_POST['id'],... sont des array() !!
    // Ils contiennent CHACUN le même nombre de valeurs que le nombre de lignes du tableau (<table>)
     
    // pour TOUTES LES lignes :
    // on vérifie que les array() ne sont pas vides (qu'au moins UNE ligne du tableau soit remplie)
    if(     !empty($_POST['nom']) 
    	&& !empty($_POST['id']) 
    	&& !empty($_POST['type']) 
    	&& !empty($_POST['table'])  
    ){
    	// pour CHAQUE LIGNE : 
    	// on va ICI boucler sur l'array() "nom" :
    	foreach( $_POST['nom'] as $ii => $val ) 
    	{
    		// $ii est l'index de CETTE ligne de l'array $_POST['nom']
    		// comme CHAQUE array() contient le même nombre de valeurs, $ii est AUSSI l'index des autres array() pour CETTE ligne : 
     
    		// pour CHAQUE champs : récupération des valeurs de la ligne + protection contre injection SQL !
    		$val_index 	= mysql_real_escape_string($_POST['index'][$ii]);
    		$val_nom 	= mysql_real_escape_string($_POST['nom'][$ii]); // ou, ICI :  mysql_real_escape_string($val);
    		$val_id 	= mysql_real_escape_string($_POST['id'][$ii]);
    		$val_type 	= mysql_real_escape_string($_POST['type'][$ii]);
    		$val_table 	= mysql_real_escape_string($_POST['table'][$ii]);
     
    		// pour CETTE ligne, tous les champs sont obligatoires (doivent être remplis)
    		if(    !empty($val_nom)) 
    		&& (!empty($val_id)) 
    		&& (!empty($val_type)) 
    		&& (!empty($val_table))  
    		){
     
    			// pour CETTE ligne, on écrit la requête sql 
    			$sql_insert = "INSERT INTO `tp_arexx_capteurs` 
    				( `Arexx_index`, `Arexx_Id`, `Arexx_Type`, `Arexx_Table`, `Arexx_Name` )
    				VALUES
    				( '$val_index', '$val_id', '$val_type', '$val_table', '$val_nom' )";
     
    			// pour CETTE ligne, on INSERE les informations du formulaire dans la table 
    			mysql_query($sql_insert) or die('Erreur SQL !'.$sql_insert.'<br>'.mysql_error()); 
     
     
    			// pour CETTE ligne, on CREE la table "$val_table"
    			$sql_creation = "CREATE TABLE `$val_table` 
    				( `Arexx_index` BIGINT(4) AUTO_INCREMENT NOT NULL, 
    				`marqueur_temps` VARCHAR(16) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL, 
    				`mesure` VARCHAR(20) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL,
    				`rssi` VARCHAR(10) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL, 
    				`jour` DATE NOT NULL, 
    				`heure` TIME NOT NULL, 
    				PRIMARY KEY (`Arexx_index`) )";
    			$result_query = mysql_query($sql_creation);
    			mysql_query($sql_creation) or die('Erreur SQL !'.$sql.'<br>'.mysql_error()); 
    			$Erreur = mysql_error(); 
     
    		}
    	}
    }
    Merci d'étudier et comprendre ce code.

    N.B. "index" n'est pas un champs obligatoire ?
    Si oui, il faut le rajouter dans le code ci-dessus (à toi de faire ! )
    Dernière modification par Invité ; 02/03/2015 à 00h14.

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2012
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 58
    Points : 23
    Points
    23
    Par défaut
    Un trés grand merci ! Je ne peut pas mieux comprendre que ça ! Punaise et dire que j'ai galérer 5 jours sur cet foutu boucle en tout cas maintenant je le sais et je ne ferais plus avoir !

    En tout cas aprés une bonne analyse du code, me reste plus qu'a résoudre ce soucis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    "Erreur SQL !CREATE TABLE `99` ( `Arexx_index` BIGINT(4) AUTO_INCREMENT NOT NULL, `marqueur_temps` VARCHAR(16) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL, `mesure` VARCHAR(20) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL, `rssi` VARCHAR(10) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL, `jour` DATE NOT NULL, `heure` TIME NOT NULL, PRIMARY KEY (`Arexx_index`) )
    Table '99' already exists"
    La table en réalité n'existe pas, seulement, il l'a crée une fois, puis essais de la recrée une deuxième fois je pense, ce qui fait qu'étant donner quelle existe déjà, m'affiche l’erreur et arrête consécution du script et donc les autres valeurs du tableau ne sont pas rentrées ! Un problème de boucle je pense !

  16. #16
    Invité
    Invité(e)
    Par défaut
    1/ J'avais oublié le $ ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    			$sql_creation = "CREATE TABLE `$val_table`
    2/ Ensuite, pour ne pas recréer une table existante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    			$sql_creation = "CREATE TABLE IF NOT EXISTS `$val_table`
    3/ "99" n'est pas un nom de table... très pertinent (juste pour les tests ?)

    4/ il faudrait tester si le nom de la table "$val_table" n'existe pas déjà (avant l'insertion)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    			$sql_count = "SELECT COUNT(*) as count_table FROM `tp_arexx_capteurs` 
    				WHERE`Arexx_Table` =  '$val_table'";
    Si la réponse est 0, c'est OK.
    Dernière modification par Invité ; 02/03/2015 à 00h21.

  17. #17
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2012
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 58
    Points : 23
    Points
    23
    Par défaut
    1/ L’erreur je l'avait corrigé , sa arrive a tout le monde

    2/ Maintenant c'est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Erreur SQL !INSERT INTO `tp_arexx_capteurs` ( `Arexx_index`, `Arexx_Id`, `Arexx_Type`, `Arexx_Table`, `Arexx_Name` ) VALUES ( '20', '25', '2', '20', 'Temp_Soussol' )
    Duplicate entry '20' for key 'PRIMARY'
    Il n'y as pas de "IF NOT EXISTS" pour la primary key ? Car du-coup les valeurs de la deuxième ligne ne rentre pas, je suis entrain d'y réfléchir pourquoi !

    3/ Oui, j'ai bien rigolais en voyant ce que tu as écrit ! C'est effectivement pas très futé mais pour un test c'est pas mal !

    4/ Je suis proche du but !

  18. #18
    Invité
    Invité(e)
    Par défaut
    Si "Arexx_index" est bien auto-incrémenté, cela signifie... qu'il s'incrémente automatiquement (!)

    Donc enlève-le du formulaire et de la récup., et mets simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    			$sql_insert = "INSERT INTO `tp_arexx_capteurs` 
    				( `Arexx_Id`, `Arexx_Type`, `Arexx_Table`, `Arexx_Name` )
    				VALUES
    				( '$val_id', '$val_type', '$val_table', '$val_nom' )";
    Après la requête insert, on peut le récupérer (si nécessaire) avec mysql_insert_id()

    Comme tu le verras, l'extension mysql_ est OBSOLETE !
    Avertissement
    Cette extension est obsolète depuis PHP 5.5.0, et sera supprimée dans le futur. À la place, les extensions MySQLi ou PDO_MySQL doivent être utilisées.
    Dernière modification par Invité ; 02/03/2015 à 04h29.

  19. #19
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2012
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 58
    Points : 23
    Points
    23
    Par défaut
    Ouawh ! Enfin tout fonctionne correctement à merveille après tant d’efforts, sans toi j'y serais jamais arriver un grand merci et bravo ! :O

    Effectivement je veillerais à changer le nom des valeurs comme tu me la préconisée pour éviter les problèmes et à passer a mysqli_ C'est ça ? Pour éviter de voir cette erreur !

    Merci beaucoup encore !

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

Discussions similaires

  1. récupération de plusieurs valeur sous jquery
    Par aymen8219 dans le forum jQuery
    Réponses: 2
    Dernier message: 20/12/2011, 14h09
  2. Récupération d'une valeur en fonction d'une autre
    Par Rem5962 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 30/01/2011, 20h28
  3. Réponses: 1
    Dernier message: 11/06/2010, 12h14
  4. [SQL2005] requete en fonction du nombre de ligne d'une table
    Par tehes dans le forum Développement
    Réponses: 2
    Dernier message: 21/11/2007, 14h10

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