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 :

array et mysql.


Sujet :

PHP & Base de données

Vue hybride

piotrowski-s array et mysql. 03/05/2012, 17h34
Séb. Comment ça ? Message d'erreur... 03/05/2012, 18h32
rawsrc Bonjour, Et pour le calcul... 03/05/2012, 19h50
rawsrc J'ai repris ton code en y... 03/05/2012, 22h43
piotrowski-s je vous remercie pour votre... 04/05/2012, 09h23
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 197
    Par défaut array et mysql.
    Bonjour à tous, j'ai des champs qui peuvent se dupliquer par exemple si je souhaites 2 interlocuteurs par javascript j'ai ma ligne qui est dupliquée, donc du coup 2 champs nom 2 champs prenom, 2 champs tel, etc...

    Le soucis c'est que au depart je les avais nommé, nom; prenom; etc... du coup lors de l'insertion mysql j'avais uniquement la derniere ligne qui etait enregistrée.

    On m'as donc dit de passer par un array et de faire un while pour l'enregistrement, j'ai donc renommer tous mes champs suivant ce modèle:
    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
    <table cellpadding="5" cellspacing="5">
      <tr>
        <td><strong>CODE SCENARIO</strong></td>
        <td><strong>LIBELLE</strong></td>
        <td><strong>ACTION</strong></td>
        <td><strong>DESCRIPTION</strong></td>
        <td><strong>DATE</strong></td>
      </tr>
      <form action="<?php  if  (!isset($_POST['go'])) echo '#'; else echo 'go.php'; ?>" method="post">
        <input type="hidden" name="liasse" value="<?php echo $_POST['liasse'] ; ?>" >
        <?php 
    $sql = "SELECT * FROM scenarii where code_s='".mysql_real_escape_string($_POST['code_s'])."'";
    $result = mysql_query($sql) or die(__LINE__.mysql_error().$sql); 
    ?>
        <?php
         while($donnees2 = mysql_fetch_assoc($result)) {
                  ?>
        <tr>
          <td><input name="tableau[code_s][]" type="text" value="<?php
          echo $donnees2['code_s'];
     
            ?>" size="10"></td>
          <td><input name="tableau[titre][]" type="text" value="<?php
          echo $donnees2['titre'];
     
            ?>" size="45"></td>
          <td><input name="tableau[action][]" type="text" value="<?php
          echo $donnees2['action'];
     
            ?>" size="15"></td>
          <td><input name="tableau[libelle][]" type="text" value="<?php
          echo $donnees2['libelle'];
     
            ?>" size="55"></td>
          <td><input type="text" name="tableau[date][]" value="<?php
      if( isSet($_POST['submit']) && $_POST['submit'] == "moins" ){
      $today = mktime(0,0,0, date("m"),date("d"),date("Y"));
    //le nombre de seconde depuis le 1er janvier 1970 à aujourd hui 00h00. (les 3 premiers 0);
    //ensuite pour ajouter xjours jours 
    $today += (3600 * 24 * ($donnees2['jour'] - $_POST['jours']) ); 
    // 1h * 24 = 1 jour * 20 = 20 jours
    //et pour avoir la date correspondante  tout simplement
    $ladate = date("d-m-Y", $today);
        echo $ladate; 
      }
      elseif( isSet($_POST['submit']) && $_POST['submit'] == "plus" ){
        $today = mktime(0,0,0, date("m"),date("d"),date("Y"));
    //le nombre de seconde depuis le 1er janvier 1970 à aujourd hui 00h00. (les 3 premiers 0);
    //ensuite pour ajouter xjours jours 
    $today += (3600 * 24 * ($donnees2['jour'] + $_POST['jours']) ); 
    // 1h * 24 = 1 jour * 20 = 20 jours
    //et pour avoir la date correspondante  tout simplement
    $ladate = date("d-m-Y", $today);
        echo $ladate; 
      }
      else  {    
                    $today = mktime(0,0,0, date("m"),date("d"),date("Y"));
    //le nombre de seconde depuis le 1er janvier 1970 à aujourd hui 00h00. (les 3 premiers 0);
    //ensuite pour ajouter xjours jours 
    $today += (3600 * 24 * $donnees2['jour'] ); 
    // 1h * 24 = 1 jour * 20 = 20 jours
    //et pour avoir la date correspondante  tout simplement
    $ladate = date("d-m-Y", $today);
        echo $ladate; 
     
      }
    ?>
    <?php
     
     
            ?>" size="12"></td>
        </tr>
        <?php } ?>
         <p><strong>Décalage des date </strong>
     
      <table width="150" border="0" cellspacing="0" cellpadding="0">
        <tr>
          <td align="center" bgcolor="#FFFF99"><input type="hidden" name="code_s" value="<?php echo $_POST['code_s']; ?>">
            <input type="image" src="images/minus_remove_green.png" width="22" height="22" name="submit"  value="moins" >
            <input name="jours" type="text" value="" size="5" />
          <input type="image" src="images/plus_add_green.png" width="22" height="22"
      name="submit" value="plus" /></td>
        </tr>
      </table>
     
    </p>
      <p></p> <p align="right">
      <input type="submit" name="go" value="go" width="28" height="28"> </p></fieldset>
      </form>
    </table>

    Le soucis qui se pose est lors de l'injection. en fait j'ai essayé de faire cela pour voir se qui s'affichait mais ça bloque du coup je ne sais pas comment utiliser l'array pour l'insertion mysql.
    voici le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <?php //var_dump($_POST['tableau'])  ;
    while (isset($_POST['$tableau'])) { echo $_POST['$tableau'] ; } ?>
    la ça m'affiche une page blanche j'en conclus que la condition n'est pas respectée et que donc le nom de variable doit être mauvais...

  2. #2
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 315
    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 315
    Billets dans le blog
    17
    Par défaut
    j'ai essayé de faire cela pour voir se qui s'affichait mais ça bloque
    Comment ça ? Message d'erreur ?

    while (isset($_POST['$tableau'])) { echo $_POST['$tableau'] ; } ?>
    Pourquoi mettre des ' autour de $tableau ?
    XOR
    Pourquoi mettre un $ à tableau ? Cela n'a aucun sens + boucle sans fin.



    Ceci dit je m'y serais pris différemment.

    Plutôt que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Enregistrement n° 1 :
    <input type="text" name="data[name][]" value="...">
    <input type="text" name="data[phone][]" value="...">
     
    Enregistrement n° 2 :
    <input type="text" name="data[name][]" value="...">
    <input type="text" name="data[phone][]" value="...">
    ...
    J'aurais fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Enregistrement n° 1 :
    <input type="text" name="data[0][name]" value="...">
    <input type="text" name="data[0][phone]" value="...">
     
    Enregistrement n° 2 :
    <input type="text" name="data[1][name]" value="...">
    <input type="text" name="data[1][phone]" value="...">
    ...
    Cela permet de parcourir plus facilement $_POST['data'].

  3. #3
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    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
    Billets dans le blog
    12
    Par défaut
    Bonjour,

    Et pour le calcul des dates, utilises plutôt DateTime et son corollaire DateInterval

  4. #4
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    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
    Billets dans le blog
    12
    Par défaut
    J'ai repris ton code en y intégrant les conseils de Séb. et les miens.
    Pour PHP 5.3+
    Inspires-toi de ma présentation, tu y gagneras en lisibilité.

    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
    <?php
     
    $sql = "SELECT * FROM scenarii where code_s='".mysql_real_escape_string($_POST['code_s'])."'";
    $qry = mysql_query($sql) or die(__LINE__.mysql_error().$sql);
     
    $get_date = function($data_jours) {
       $today = new DateTime();
       $today->setTime(0, 0);
       $jours = (isset($_POST['jours']) && ctype_digit($_POST['jours'])) ? $_POST['jours'] : 0;
       if (isset($_POST['submit']) && ($_POST['submit'] === 'moins')) {
          $jours = -$jours;
       }
       $nb       = $data_jours + $jours;
       $func     = ($nb < 0) ? 'sub' : 'add';
       $interval = new DateInterval("P{$nb}D");
       return $today->$func($interval)->format('d-m-Y');
    };
    $i = -1; // index des enregistrements
    ?>
    <table cellpadding="5" cellspacing="5">
       <tr>
          <td><strong>CODE SCENARIO</strong></td>
          <td><strong>LIBELLE</strong></td>
          <td><strong>ACTION</strong></td>
          <td><strong>DESCRIPTION</strong></td>
          <td><strong>DATE</strong></td>
       </tr>
       <form action="<?php echo (isset($_POST['go'])) ? 'go.php' : '#'; ?>" method="post">
          <input type="hidden" name="liasse" value="<?php echo $_POST['liasse']; ?>"/>
          <?php while($row = mysql_fetch_assoc($qry)): ?>
          <tr>
             <td><input name="data[<?php echo ++$i; ?>]['code_s']" type="text" value="<?php echo $row['code_s'];?>" size="10"></td>
             <td><input name="data[<?php echo $i; ?>]['titre']" type="text" value="<?php echo $row['titre']; ?>" size="45"></td>
             <td><input name="data[<?php echo $i; ?>]['action']" type="text" value="<?php echo $row['action']; ?>" size="15"></td>
             <td><input name="data[<?php echo $i; ?>]['libelle']" type="text" value="<?php echo $row['libelle']; ?>" size="55"></td>
             <td><input type="text" name="data[<?php echo $i; ?>]['date']" value="<?php echo $get_date($row['jour']); ?>" size="12"></td>
          </tr>
          <?php endwhile; ?>
          <p>
             <strong>Décalage des date </strong>
             <table width="150" border="0" cellspacing="0" cellpadding="0">
                <tr>
                   <td align="center" bgcolor="#FFFF99"><input type="hidden" name="code_s" value="<?php echo $_POST['code_s']; ?>">
                      <input type="image" src="images/minus_remove_green.png" width="22" height="22" name="submit"  value="moins" />
                      <input name="jours" type="text" value="" size="5" />
                      <input type="image" src="images/plus_add_green.png" width="22" height="22" name="submit" value="plus" />
                   </td>
                </tr>
             </table>
          </p>
          <p align="right"><input type="submit" name="go" value="go" width="28" height="28"></p>
       </form>
    </table>

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 197
    Par défaut
    je vous remercie pour votre aide, ce qui me bloquais en fait c'était pouir la sauvegarde des données sur ma base de donnée, car je ne sais pas comment récupérer les variables, je sais que je dois faire un while, mais je bloque en fait, car les arrays, ne sont pas comme des variables classiques du type $_POST['var'] donc je sèches à ce niveau la.

  6. #6
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    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
    Billets dans le blog
    12
    Par défaut
    Salut,

    Avec mon code tu vas récupérer ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    $_POST['data'][0]['code_s']
    $_POST['data'][0]['titre']
    $_POST['data'][0]['action']
    $_POST['data'][0]['libelle']
    $_POST['data'][0]['date']
     
    $_POST['data'][1]['code_s']
    $_POST['data'][1]['titre']
    $_POST['data'][1]['action']
    $_POST['data'][1]['libelle']
    $_POST['data'][1]['date']
     
    ...
    Un tableau multi-dimensionnel basique à parcourir comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    foreach($_POST['data'] as $key => $data) {
       // $key = 0 -> $data = array(code_s, titre, action, libelle, date)
       // ...
       // $key = x -> $data = array(code_s, titre, action, libelle, date)
    }

Discussions similaires

  1. Enregistrer un array dans mySQL
    Par popow128 dans le forum Débuter
    Réponses: 2
    Dernier message: 29/11/2013, 15h05
  2. Type Array pour MySQL
    Par Khalezis dans le forum Doctrine2
    Réponses: 2
    Dernier message: 19/03/2013, 19h07
  3. Array avec Mysql
    Par xunil2003 dans le forum Langage
    Réponses: 9
    Dernier message: 03/07/2012, 21h52
  4. str_replace array BDD mysql
    Par poitierjohan dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 26/11/2007, 14h03
  5. Les array en MySQL
    Par Extra-Nitro dans le forum Administration
    Réponses: 4
    Dernier message: 03/09/2006, 22h02

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