array et sauvegarde mysql.

Mammouth du PHP | 702 Messages

02 mai 2012, 09:54

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.

ViPHP
xTG
ViPHP | 7331 Messages

02 mai 2012, 12:49

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.

Mammouth du PHP | 702 Messages

02 mai 2012, 14:48

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.

ViPHP
xTG
ViPHP | 7331 Messages

02 mai 2012, 14:57

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

Mammouth du PHP | 702 Messages

02 mai 2012, 15:17

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.

ViPHP
ViPHP | 2577 Messages

02 mai 2012, 15:26

<?PHP
foreach ($_POST['date'] as $i=>$date)
{
   // tu utilises $_POST['???'][$i] ou ??? est un de tes tableaux (code_s, titre...) 
}
?>

Mammouth du PHP | 702 Messages

02 mai 2012, 15:48

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?

ViPHP
xTG
ViPHP | 7331 Messages

02 mai 2012, 16:14

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' => ...), ... )

Mammouth du PHP | 702 Messages

02 mai 2012, 16:25

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é

ViPHP
xTG
ViPHP | 7331 Messages

02 mai 2012, 18:06

$i est une variable PHP. En HTML les variables n'existent pas. :P
Et faut l'initialiser aussi !

Mammouth du PHP | 702 Messages

03 mai 2012, 07:28

il n'y a pas un autre moyen, car le je ne sais pas comment procéder? d'avance merci.

ViPHP
ViPHP | 2577 Messages

03 mai 2012, 08:06

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.

Mammouth du PHP | 702 Messages

03 mai 2012, 09:39

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é.

ViPHP
ViPHP | 2577 Messages

03 mai 2012, 13:22

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.

Mammouth du PHP | 702 Messages

03 mai 2012, 15:45

<?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...