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 :

Tableau de plusieurs colonnes


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    593
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 593
    Points : 146
    Points
    146
    Par défaut Tableau de plusieurs colonnes
    Bonjour a tous.

    pour mon projet je dois récupérer divers valeurs et il sera pour moi très utile de stocker les valeurs dans un tableau.

    enfaite le but serait de stocker la valeur de l'idreport + 1 ou 0

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    echo '<td class="col1"><input type="checkbox" name="cb[]" value="'.$donnees['Id_reports'].'" '; if(isset($_POST['cb']) && in_array($donnees['Id_reports'],$_POST['cb'])) echo 'checked="checked"'; echo'></td>';  
              			echo '<td class="col2"><input class="radio" type="radio" name="ra['.$donnees['Id_reports'].']" value="1"><label class="green">Yes</label>
    										   <input class="radio" type="radio" name="ra['.$donnees['Id_reports'].']" value="0"><label class="red">No</label>';
    pour l'instant j'ai 2 tableau... mais ce n'est pas tres pratique pour moi...

    donc je me demandais si c'etait possible de stocker les valeurs dans un seul tableau et donc avoir une ligne avec 2 enregistrement ( 2 collones )

    merci

  2. #2
    Membre confirmé Avatar de LeGilou
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 488
    Points : 531
    Points
    531
    Par défaut
    Bonjour,

    Je ne sais pas si c'est le sens de ta question, mais tu peux utiliser des tableau multidimenssionnel.

    Par exemple un tableau à 2 entrées :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $tableau = array("COL1" => array("LIGNE1", "LIGNE2", "LIGNE3"), 
      "COLONNE2" => array(array("LIGNE1", "LIGNE2", "LIGNE3"), 
      "COLONNE3" => array(array("LIGNE1", "LIGNE2", "LIGNE3")
    )
    et ca marche aussi en 3, 4, et plus dimenssions.

    Gillou

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    593
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 593
    Points : 146
    Points
    146
    Par défaut
    euh je pense que c'est un peu trop compliqué pour ce que je veux faire...

    je veux simplement faire un tableau avec comme champ:

    ligne 1 - id report - 1 ou 0
    ligne 2 - id report - 1 ou 0
    ligne 3 - id report - 1 ou 0

    et après pour récupérer ces valeurs pour les ajouter dans ma table sql.

    merci

  4. #4
    Membre confirmé Avatar de LeGilou
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 488
    Points : 531
    Points
    531
    Par défaut
    Le terme "multidimensionnel" est effrayant, mais finalement pas si terrible.

    Pour ton exemple, un simple tableau suffit.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $monTableau = array();
    $monTableau[id_report] = 1;
    $monTableau[id_report] = 0;
    Pour que ca soit plus propre, et plus lisible, utlise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $monTableau = array();
    $monTableau[id_report] = true;
    $monTableau[id_report] = false;
    Gillou

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    593
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 593
    Points : 146
    Points
    146
    Par défaut
    euh je pense que on c'est mal compris je vais me répéter

    Donc je dois reprendre uniquement les rapport dont j'ai coché mon checkbox. ( ok )

    ensuite pour chaque checkboxcochée je dois récupérer la valeur de l'idreport et son status "send" donc 1 ou 0

    j'utilise 1 ou 0 pour avoir la valeur finale dans ma bdd.

    donc j'aurais par exemple :

    ligne 1 - collone 1 - collone 2

    0 - idreport : 97 - 1
    1 - idreport : 176 - 1
    2 - idreport : 5 - 0
    3 - idreport : 38 - 1

    je pense que j'ai été plus claire :p

  6. #6
    Membre confirmé Avatar de LeGilou
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 488
    Points : 531
    Points
    531
    Par défaut
    Oui.
    Tu peux créer ton tableau de la manière suivante :

    Ton exemple :
    0 - idreport : 97 - 1
    1 - idreport : 176 - 1
    2 - idreport : 5 - 0
    3 - idreport : 38 - 1

    Le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $arr_idReport = array();
     
    $arr_idReport[97] = 1;
    $arr_idReport[176] = 1;
    $arr_idReport[5] = 0;
    $arr_idReport[38] = 1;

    Les clés d'un tableau ne sont pas forcement 0, 1, 2, ... ca peut être d'autre valeurs, ou même des chaines de caractères. Dans ton cas, tu peux mettre les valeurs des id_report.

    Gillou

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    593
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 593
    Points : 146
    Points
    146
    Par défaut
    oui mais le probléme et que mon id report est générer de façon dynamique.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    echo '<td class="col1"><input type="checkbox" name="cb[]" value="'.$donnees['Id_reports'].'" '; if(isset($_POST['cb']) && in_array($donnees['Id_reports'],$_POST['cb'])) echo 'checked="checked"'; echo'></td>';  
              			echo '<td class="col2"><input class="radio" type="radio" name="cb[]['.$donnees['Id_reports'].']" value="1"><label class="green">Yes</label>
    										   <input class="radio" type="radio" name="cb[]['.$donnees['Id_reports'].']" value="0"><label class="red">No</label>';

    Donc le problème et comment récupérer les valeurs ?

  8. #8
    Membre confirmé Avatar de LeGilou
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 488
    Points : 531
    Points
    531
    Par défaut
    J'ai du mal a bien comprendre... c'est lundi
    tu veux, pour chaque ID, un checkbox et un choix radio (oui/non). C'est ca ?

    Si c'est ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <?
    $id = $donnees['Id_reports'];
    $checked = isset($_POST['tab'][$id]['cb']) ? 'checked' : '';
     
    <input type="checkbox" name="tab[<?=$id?>]['cb']" value="1" <?=$checked?> >
    <input class="radio" type="radio" name="tab[<?=$id?>]['ra']" value="1">
    	<label class="green">Yes</label>
    <input class="radio" type="radio" name="tab[<?=$id?>]['ra']" value="0">
    	<label class="red">No</label>';
    Gillou

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    593
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 593
    Points : 146
    Points
    146
    Par défaut
    c'est exactement ca que je veux. je galére depuis tantôt.

    j'ai pas encore testé ton code je vais le faire de suite.

    j'étais arrivé a ce stade.

    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
    <?php 
     
    					$reponse = mysql_query("SELECT * FROM reports WHERE Listing=1 ORDER BY Name "); // Requête SQL 
    					$nb_entrees = mysql_num_rows($reponse);
    					// Puis on fait une boucle pour tout afficher. 
     
    					for ($numero = 1; $numero<$nb_entrees+1; $numero++)
    					{ 
    						$donnees = mysql_fetch_array($reponse);
     
    						echo '<tr>';
    						echo '<td class="col1"><input type="checkbox" name="cb['.$numero.'][0]" value="'.$donnees['Id_reports'].'" '; if(isset($_POST['cb']) && in_array($donnees['Id_reports'],$_POST['cb'])) echo 'checked="checked"'; echo'></td>';  
              				echo '<td class="col2"><input class="radio" type="radio" name="cb['.$numero.'][1]" value="1"><label class="green">Yes</label>
    											   <input class="radio" type="radio" name="cb['.$numero.'][1]" value="0"><label class="red">No</label>';
    						echo '<td class="col3">' . $donnees['Name'] . '</td>';
              				$date= substr_replace($donnees['Date'], '', 7, 3);
              				echo '<td class="col4">' . $date . '</td>
            	 				 </tr>';
     
    					}
    					?>
    qu'en penses-tu ?

    je vais tester ton code de suite !
    pourrais-tu m'indiquer comment récupére t-on les valeurs d'un tableau multi ?
    merci

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    593
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 593
    Points : 146
    Points
    146
    Par défaut
    je viens d'essayer ton code.

    mais n'ayant jamais utilisé ta syntaxe j'ai une erreur et j'arrive pas a la corriger.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo '<td class="col1"><input type="checkbox" name="tab[<?=$id?>]['cb']" value="1" <?=$checked?> >'; echo'></td>';
    Parse error: parse error, unexpected T_VARIABLE, expecting ',' or ';' in C:\Program Files\EasyPHP 2.0b1\www\SellMate\Contacts\addcontacts.php on line 470

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    593
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 593
    Points : 146
    Points
    146
    Par défaut
    je pense avoir trouvé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    echo '<td class="col1"><input type="checkbox" name="tab['.$id.'][cb]" value="'.$id.'" '.$checked.''; echo'></td>';  
              				echo '<td class="col2"><input class="radio" type="radio" name="tab['.$id.'][ra]" value="1" ><label class="green">Yes</label>
    											   <input class="radio" type="radio" name="tab['.$id.'][ra]" value="0" ><label class="red">No</label>';
    pourrais-tu me dire comment je peux récupérer mes valeurs ?
    aussi les checkbox sont mémorisée mais pas les radio.. comment faire ?

    merci

  12. #12
    Membre confirmé Avatar de LeGilou
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 488
    Points : 531
    Points
    531
    Par défaut
    si tu codes ça dans la seconde page, tu vas voir le tableau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <?php
    echo "<pre>";
    print_r($_REQUEST['tab']);
    echo "</pre>";
    ?>
    Tu peux donc récupérer les checkbox comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if (isset($_REQUEST['tab'][$id_report]['cb']))
      echo "Checkbox cochée pour id = " . $id_report . "<br />";
    else
      echo "Checkbox non cochée pour id = " . $id_report . "<br />";
    et les bouton radio
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo "valeur bouton radio pour id = " . $id_report . " : " . $_REQUEST['tab'][$id_report]['ra'];
    Gillou.

  13. #13
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    593
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 593
    Points : 146
    Points
    146
    Par défaut
    Merci j'ai vraiment bien avancé.

    voici ou j'en suis arrivé : ( j'ai appliqué ton exemple et un peu du mien )

    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
    for ($numero = 1; $numero<$nb_entrees+1; $numero++)
    					{ 
    						$donnees = mysql_fetch_array($reponse);
    						$id = $donnees['Id_reports'];
    						$checked_checkbox = isset($_POST['tab'][$numero]['0']) ? 'checked' : '';
    						$checked_radio_yes = (isset($_POST['tab'][$numero]['1']) &&  $_POST['tab'][$numero]['1'] == '1') ? 'checked' : ''; 
    						$checked_radio_non = (isset($_POST['tab'][$numero]['1']) &&  $_POST['tab'][$numero]['1'] == '0') ? 'checked' : ''; 
     
    						echo '<tr>';
    						echo '<td class="col1"><input type="checkbox" name="tab['.$numero.'][0]" value="'.$id.'" '.$checked_checkbox.''; echo'></td>';  
              				echo '<td class="col2"><input class="radio" type="radio" name="tab['.$numero.'][1]" value="1" '.$checked_radio_yes.'><label class="green">Yes</label>
    											   <input class="radio" type="radio" name="tab['.$numero.'][1]" value="0" '.$checked_radio_non.'><label class="red">No</label>';
    						echo '<td class="col3">' . $donnees['Name'] . '</td>';
              				$date= substr_replace($donnees['Date'], '', 7, 3);
              				echo '<td class="col4">' . $date . '</td>
            	 				 </tr>';
     
    					}
    voici ce que ca donne en code généré :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <tr><td class="col1"><input type="checkbox" name="tab[1][0]" value="9" checked></td><td class="col2"><input class="radio" type="radio" name="tab[1][1]" value="1" checked><label class="green">Yes</label>
    											   <input class="radio" type="radio" name="tab[1][1]" value="0" ><label class="red">No</label><td class="col3">customer report 2006</td><td class="col4">2006-04</td>
            	 				 </tr><tr><td class="col1"><input type="checkbox" name="tab[2][0]" value="3" checked></td><td class="col2"><input class="radio" type="radio" name="tab[2][1]" value="1" ><label class="green">Yes</label>
    											   <input class="radio" type="radio" name="tab[2][1]" value="0" checked><label class="red">No</label><td class="col3">financial reports 2003</td><td class="col4">2003-01</td>
            	 				 </tr><tr><td class="col1"><input type="checkbox" name="tab[3][0]" value="4" checked></td><td class="col2"><input class="radio" type="radio" name="tab[3][1]" value="1" checked><label class="green">Yes</label>
    											   <input class="radio" type="radio" name="tab[3][1]" value="0" ><label class="red">No</label><td class="col3">financial reports 2005</td><td class="col4">2005-01</td>
            	 				 </tr><tr><td class="col1"><input type="checkbox" name="tab[4][0]" value="6" checked></td><td class="col2"><input class="radio" type="radio" name="tab[4][1]" value="1" checked><label class="green">Yes</label>
    											   <input class="radio" type="radio" name="tab[4][1]" value="0" ><label class="red">No</label><td class="col3">time reports</td><td class="col4">2006-04</td>
            	 				 </tr><tr><td class="col1"><input type="checkbox" name="tab[5][0]" value="1" checked></td><td class="col2"><input class="radio" type="radio" name="tab[5][1]" value="1" ><label class="green">Yes</label>
    											   <input class="radio" type="radio" name="tab[5][1]" value="0" checked><label class="red">No</label><td class="col3">World payement</td><td class="col4">2008-01</td>
            	 				 </tr>
    alors j'essaye pour l'instant de programmer l'affichage de mon tableau :

    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
    if(isset($_POST['tab']))
    	{
        $rapports = $_POST['tab'];
    	}
    	else
    	{
    	$rapports=0;
    	}  
     
    	 // Calcul de la taille du tableau 
    	 $taille = sizeof($rapports);
     
     
    	// Parcours du tableau
    	for($i=1; $i<$taille+1; $i++)
    	{
     
    		for($j=0; $j<1; $j++)
    		{
    		echo 'le rapport est : ' .$rapports[$i][$j]. '';
    		$j++;
    		echo ' et son status est : ' .$rapports[$i][$j]. '<br/>';
    	 	}
     
    	}
    et mon code généré en html :

    le rapport est : 9 et son status est : 1
    le rapport est : 3 et son status est : 0
    le rapport est : 4 et son status est : 1
    le rapport est : 6 et son status est : 1
    le rapport est : 1 et son status est : 0
    donc pour l'instant cela marche si je coche toute mes checkbox.

    mais j'aimerais qu'il ne prenne en compte le radio que lorsque le checkbox est coché.

    c'est faisable je suppose mais je cherche tj...

    Merci en tous cas

  14. #14
    Membre confirmé Avatar de LeGilou
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 488
    Points : 531
    Points
    531
    Par défaut
    attention, ton code ne marche que si les id_report se suivent et commencent à 0... ca ne sera pas forcement le cas.

    Voila ce que tu peux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    foreach($_REQUEST['tab'] as $id => $resultat) {
      $checked = isset($resultat[0]);
      $status = $resultat[1];
     
      if ($checked) echo "le rapport est " . $id . " et son status est " . $status . "<br />";
    }
    Gillou

  15. #15
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    593
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 593
    Points : 146
    Points
    146
    Par défaut
    Merci.

    J'ai repris ton code et je l'ai modifié un peu pour corespondre parfaitement a mon attende.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $id = $donnees['Id_reports'];
    						$checked_checkbox = isset($_POST['tab'][$numero]['0']) ? 'checked' : '';
    						$checked_radio_yes = (isset($_POST['tab'][$numero]['1']) &&  $_POST['tab'][$numero]['1'] == '1') ? 'checked' : ''; 
    						$checked_radio_non = (isset($_POST['tab'][$numero]['1']) &&  $_POST['tab'][$numero]['1'] == '0') ? 'checked' : ''; 
     
    						echo '<tr>';
    						echo '<td class="col1"><input type="checkbox" name="tab['.$numero.'][0]" value="'.$id.'" '.$checked_checkbox.''; echo'></td>';  
              				echo '<td class="col2"><input class="radio" type="radio" name="tab['.$numero.'][1]" value="1" '.$checked_radio_yes.'><label class="green">Yes</label>
    											   <input class="radio" type="radio" name="tab['.$numero.'][1]" value="0" '.$checked_radio_non.'><label class="red">No</label>';
    						echo '<td class="col3">' . $donnees['Name'] . '</td>';
    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
     
    if(isset($_POST['tab']))
    	{
    	$rapports = $_POST['tab'];
    	}
    	else
    	{
    	$rapports = 0;
    	} 
     
    foreach($_REQUEST['tab'] as $id => $resultat)
    {
       	$checked = isset($resultat[0]);
       	$checked_status = isset($resultat[1]);
     
    	if ($checked)
    	{ 
    	$rapport = $rapports[$id][0]; 
    		if ($checked_status) { $send = $resultat[1]; } else { $send = 0;}
    	}
     
    	echo "le rapport est : " .$rapport. "";	echo " et son status est " . $send . "";  
    	echo "</br>";
    }
    remarques :

    Si je coche mon checkbox sans radio => ok
    par contre si je coche un radio sans avoir coché mon checkbox mon tableau n'est plus enregistrer de facon correct et j'ai un bug.
    Je vais voir du coté du javascript pour activer mes boutons radio uniquement quand la case checkbox est cochée. je laisse le post en non-résolu pour l'instant vu que je travaille toujours dessus.

    encore une fois merci pour ton aide

Discussions similaires

  1. [MySQL] Réaliser un tableau avec plusieurs colonnes
    Par Julianinho dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 02/02/2009, 14h17
  2. Tri d'un tableau avec plusieurs colonnes
    Par beegees dans le forum Langage
    Réponses: 11
    Dernier message: 04/11/2008, 20h43
  3. [Tableaux] Afficher un tableau sur plusieurs colonnes
    Par sliderman dans le forum Langage
    Réponses: 5
    Dernier message: 04/01/2008, 15h46
  4. Réponses: 7
    Dernier message: 10/03/2006, 19h09

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