Page 1 sur 2

array et sauvegarde mysql.

Posté : 02 mai 2012, 09:54
par piotrowski-s
Bonjour, en fait j'ai plusieurs champs dans ma base de donnée, toutes les lignes peuvent contenir un dénominateur commun, par exemple le libellé (il s'agit de scenario, associés à des dates). donc j'ai créé un select qui récupère tous les scenarii , voici par conséquent le code que j'(utilises pour le select:
<select name="code_s">   <?php 
$sql = 'SELECT * FROM scenarii GROUP BY titre';
$result = mysql_query($sql) or die(__LINE__.mysql_error().$sql); 
?> <option value="">-- Sc&eacute;nario &agrave; l'ouverture -- </option> 
   
    <?php
     while($donnees2 = mysql_fetch_assoc($result)) {
      
        ?>      
    <option value="<?php
      echo $donnees2['code_s'];
      
        ?>
      "> <?php
      echo $donnees2['code_s'];
      
        ?>  <?php
      echo $donnees2['titre'];
      
        ?>
 </option>  
    <?php } ?> 
  </select>
par la suite en validant le select, j'arrives sur uhne page qui reprends tous les éléments de la table qui ont le même dénominateur commun; j'ai donc ce code ci:
<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="code_s" type="text" value="<?php
      echo $donnees2['code_s'];
     
        ?>" size="10">  </td><td>  <input name="titre" type="text" value="<?php
      echo $donnees2['titre'];
      
        ?>" size="45"> </td>
      <td>       <input name="titre" type="text" value="<?php
      echo $donnees2['action'];
      
        ?>" size="15"> </td>
      <td>  <input name="libelle" type="text" value="<?php
      echo $donnees2['libelle'];
      
        ?>" size="55"></td><td> 

<input type="text" 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 } ?></table>
il faut donc présentement que je renommes mes champs mais comment faire. car j'ai besoin de récupérer en fait tous les enregistrements mais sur diverses lignes, que tout soit déporté vers une autre table.
je les ai déjà nommés en champs de type name="nom" mais le soucis c'est que lors de l'enregistrement vers ma bdd, il n'enregistre que le dernier vu que tous les names portent le meme nom.

car en fait dans la table qui s'affiche grâce au select, j'ai des nombres de jours, et lorsque je les affiches ils incrémentent la date du jour.

on m'a dit d'utiliser un array et de faire une boucle pour l'enregistrement mais je ne sais pas du tout comment procéder.

et par conséquent je ne sais pas également comment les enregistrer. d'avance merci pour votre aide.

Re: array et sauvegarde mysql.

Posté : 02 mai 2012, 12:49
par xTG
Il faut utiliser une notation tableau pour les attributs name :
<input type="text" name="tableau[]" />
<input type="text" name="tableau[]" />
Ceci renverra bien deux valeurs et non uniquement la dernière.

Re: array et sauvegarde mysql.

Posté : 02 mai 2012, 14:48
par piotrowski-s
j'ai renommé mes champs ainsi, est-ce correcte?
<?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>
de plus lorsque je tente de faire un vardump pour voir sous quelle forme les données arrivent, j’obtiens :
( ! ) Notice: Undefined index: tableau[] in C:\wamp\www\NEOGETCASH\GESTIONNAIRE\go.php on line 181
Call Stack
# Time Memory Function Location
1 0.0008 704544 {main}( ) ..\go.php:0
null

du coup je ne sais pas si ma structure est bonne:
<?php var_dump($_POST['tableau[]'])  ; ?>
voila. d'avance merci pour votre aide.

Re: array et sauvegarde mysql.

Posté : 02 mai 2012, 14:57
par xTG
Il faut accéder à $_POST['tableau'].
Et tu auras tes champs de la sorte :
$_POST['tableau']['code_s'][0]
$_POST['tableau']['code_s'][1]
ect

Re: array et sauvegarde mysql.

Posté : 02 mai 2012, 15:17
par piotrowski-s
bon c'est parfait,

je me retrouves maintenant avec cela:

array
'code_s' =>
array
0 => string '1AV' (length=3)
1 => string '1AV' (length=3)
'titre' =>
array
0 => string 'AVERTISSEMENT' (length=13)
1 => string 'AVERTISSEMENT' (length=13)
'action' =>
array
0 => string 'LETTRE1' (length=7)
1 => string 'CHGBAREM' (length=8)
'libelle' =>
array
0 => string '1ère lettre avertissement' (length=25)
1 => string 'FR9' (length=3)
'date' =>
array
0 => string '02-05-2012' (length=10)
1 => string '01-06-2012' (length=10)

je voulais savoir, comment faire pour que tout soit associé en fait la j'ai plusieurs array, mais je veux pas qu'ils soient différents
car dans ma base de donnée, lors de l'enregistrement tout cela est équivalent à deux lignes.

donc je ne sais pas comment faire.

Re: array et sauvegarde mysql.

Posté : 02 mai 2012, 15:26
par Mazarini
<?PHP
foreach ($_POST['date'] as $i=>$date)
{
   // tu utilises $_POST['???'][$i] ou ??? est un de tes tableaux (code_s, titre...) 
}
?>

Re: array et sauvegarde mysql.

Posté : 02 mai 2012, 15:48
par piotrowski-s
mais cela va me créer une ligne pour chaque array? ou comment faire pour que chaque ligne soit enregistrée avec les différents array qui sont les diverses colones?

Re: array et sauvegarde mysql.

Posté : 02 mai 2012, 16:14
par xTG
Faut régler toi même l'index lors de la construction de tes inputs dans ce cas :
$i = 0;
while( ... ){
  echo '<input type="text" name="tableau[' . $i . '][nom]" value="votre nom" />';
  $i++;
}
Ainsi tu auras bien :

Code : Tout sélectionner

array( 0 => array( 'nom' => ...), 1 => array( 'nom' => ...), ... )

Re: array et sauvegarde mysql.

Posté : 02 mai 2012, 16:25
par piotrowski-s
j'ai testé mais cela me donne ça lors du var dump:
array
'' . $i . '' =>
array
'code_s' => string 'UFP' (length=3)
'titre' => string 'OFFICE EXPRESS' (length=14)
'action' => string 'CLIENT75' (length=8)
'libelle' => string 'ATTESTATION DE N R (length=31)
'date' => string '10-08-2012' (length=10)

voici le code:
<?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[' . $i . '][code_s]" type="text" value="<?php
      echo $donnees2['code_s'];
     
        ?>" size="10"></td>
      <td><input name="tableau[' . $i . '][titre]" type="text" value="<?php
      echo $donnees2['titre'];
      
        ?>" size="45"></td>
      <td><input name="tableau[' . $i . '][action]" type="text" value="<?php
      echo $donnees2['action'];
      
        ?>" size="15"></td>
      <td><input name="tableau[' . $i . '][libelle]" type="text" value="<?php
      echo $donnees2['libelle'];
      
        ?>" size="55"></td>
j'ai bien remplacé les noms comme vous l'avez suggeré

Re: array et sauvegarde mysql.

Posté : 02 mai 2012, 18:06
par xTG
$i est une variable PHP. En HTML les variables n'existent pas. :P
Et faut l'initialiser aussi !

Re: array et sauvegarde mysql.

Posté : 03 mai 2012, 07:28
par piotrowski-s
il n'y a pas un autre moyen, car le je ne sais pas comment procéder? d'avance merci.

Re: array et sauvegarde mysql.

Posté : 03 mai 2012, 08:06
par Mazarini
La boucle que je t'ai proposé plus haut, permet en utilisant un des tableaux d'avoir un indice. Il faut alors utiliser ce même indice pour tous les tableaux dans la même boucle.

Re: array et sauvegarde mysql.

Posté : 03 mai 2012, 09:39
par piotrowski-s
ok pour la boucle cela fonctionne mieux, j'avais oublié d'intiier le compteur etc...

Mais ce que je ne sais pas, c'est que lors du var dump il me sort 49 array pour une requête type. en fait je ne sais pas, mais chaque champs de type input texte, que j'utilises correspond à une colone mysql. et je je sais pas si c'est correcte que de les nommer ainsi? car ne vas t'il pas me faire plusieurs ligne par boucle au lieeu d'une ?

De plus comment je procède pour l'enregistrement, je suppose une boucle while mais au niveau des variables? Insert into tableau[...][action] donc du coup je suis un peu bloqué.

Re: array et sauvegarde mysql.

Posté : 03 mai 2012, 13:22
par Mazarini
Si tu te retrouve avec ca :
array
'code_s' =>
array
0 => string '1AV' (length=3)
1 => string '1AV' (length=3)
'titre' =>
array
0 => string 'AVERTISSEMENT' (length=13)
1 => string 'AVERTISSEMENT' (length=13)
'action' =>
array
0 => string 'LETTRE1' (length=7)
1 => string 'CHGBAREM' (length=8)
'libelle' =>
array
0 => string '1ère lettre avertissement' (length=25)
1 => string 'FR9' (length=3)
'date' =>
array
0 => string '02-05-2012' (length=10)
1 => string '01-06-2012' (length=10)
Tu peux faire dans la boucle :
<?PHP
$code_s  =  $_POST['code_s']($i];
$titre     = $_POST['titre']($i];
$action  = $_POST['action']($i];
$libelle  = $_POST['libelle']($i];
$date    = $_POST['date']($i];
?>
Et après tu travailles avec ces variables.

Re: array et sauvegarde mysql.

Posté : 03 mai 2012, 15:45
par piotrowski-s
<?php //var_dump($_POST['tableau'])  ;
while (isset($_POST['tableau'])) { echo $_POST['tableau'] ; } ?>
j'ai donc essayé de faire cela mais ça bug... en fait je souhaites voir comment cela va s'afficher avant de faire l'insertion MYSQL...