8792 sujets

Développement web côté serveur, CMS

Bonjour,

Mon petit soucis est simple, mais je n'arrive pas à trouver la solution !

J'ai une boucle while qui fait suite à une requête SQL, dans laquelle je dois afficher une case à cocher suivie de diverses infos.
J'aimerais donner à cette case à cocher une value avec l'id de chaque enregistrement retourné par la requête.
J'ai donc un code comme ceci :

 while($row = mysql_fetch_array($result)) {
                $id = $row["font_id"];
        	echo '<tr>';
        	echo '<td bgcolor="#CCCCCC">';
        	echo '<input type="checkbox" name="font[]" value= "".$id."" />';
        	echo $row["font_nom"];
        	echo '</td>';
        	echo '<td bgcolor="#CCCCCC">'.$row["font_htm"].'</td>';
      	echo '<td bgcolor="#CCCCCC">'.$row["font_date"].'</td>';
      	echo '</tr>'."\n";
    }

Mais, donc, ma value de ma case à cocher n'est pas interprétée... Smiley decu

J'ai bien tenté des trucs comme :

echo '<input type="checkbox" name="fontaines[]" value= "echo $row["font_id"];" />';


Mais ça aussi ça ne passe pas...

Auriez vous une solution ?

Merci !
Le voici :

<td bgcolor="#CCCCCC"><input type="checkbox" name="font[]" value= "".$id."" />
Essaie de remplacer les guillemets par des apostrophes, c'est sûrement ça.
P.S. Ne change pas les guillemets des attributs HTML
Hari37 a écrit :


echo '<input type="checkbox" name="fontaines[]" value= "echo $row["font_id"];" />';

Oulalala Smiley lol Va falloir revoir tes base Smiley cligne

echo '<input type="checkbox" name="fontaines[]" value= "' . htmlspecialchars($row["font_id"]) . '" />';
Salut

Si j'ai bien compris, tu cherches a récupérer les id correspondant au checkbox coché lorsque tu valide ton formulaire.
Dans ce cas, il faut savoir qu'un checkbox n'est envoyé (et donc reçu par le seveur) QUE lorsqu'il est coché.

J'ai tendance à utiliser un code de ce type :

echo '<input type="checkbox" name="fontaines['.$row["font_id"].']" value= "1" />'; 
//pour la valeur, j'ai l'habitude de mettre 1 si c'est true et 0 si c'est false


Quand tu récupère les données reçu sur le serveur via $_POST, tu auras pour la variable fontaines un tableau de ce type: array(unId=>une valeur).

Ensuite, si tu veux récupérer uniquement les checkbox qui ont été coché et qui ne l'était pas avant (en supposant que tu utilise le système de 0 et de 1 pour la valeur), il te suffit de traiter ton tableau pour ne garder que les valeur égale à 0.
Francois44 a écrit :
J'ai tendance à utiliser un code de ce type :
Bah faut changer tes tendances... ton truc est bourin à donf ! Smiley langue

En dehors de son erreur de quote, son code est tout à fait correct :
echo '<input type="checkbox" name="font[]" value= "'.$id.'" />';

Modifié par Bison (11 Jan 2007 - 12:29)
Je suis d'accord avec Bison,

Il est plus facile de répertorier toutes les valeurs du tableau que de vérifier l'existence de celles-ci.
De plus cela oblige à parcourir tout le tableau.
Alors qu'avec un simple foreach pour la solution de départ demandera moins de ressources.
Je ne vois pas en quoi ma solution est plus lourde?

un petit test (dans un fichier index.php):

<form method="post" action="index.php">
<h2>TEST 1</h2>
<ul>
	<li><input type="checkbox" value='test_1 A' name="test_1[]" />test_1 A</li>
	<li><input type="checkbox" value='test_1 B' name="test_1[]" checked="checked" />test_1 B</li>
	<li><input type="checkbox" value='test_1 C' name="test_1[]" />test_1 C</li>
	<li><input type="checkbox" value='test_1 D' name="test_1[]" />test_1 D</li>
	<li><input type="checkbox" value='test_1 E' name="test_1[]" checked="checked" />test_1 E</li>
	<li><input type="checkbox" value='test_1 F' name="test_1[]" checked="checked" />test_1 F</li>
</ul>

<h2>TEST 2</h2>
<ul>
	<li><input type="checkbox" value='0' name="test_2[test_2 A]" />test_2 A</li>
	<li><input type="checkbox" value='1' name="test_2[test_2 B]" checked="checked" />test_2 B</li>
	<li><input type="checkbox" value='0' name="test_2[test_2 C]" />test_2 C</li>
	<li><input type="checkbox" value='0' name="test_2[test_2 D]" />test_2 D</li>
	<li><input type="checkbox" value='1' name="test_2[test_2 E]" checked="checked" />test_2 E</li>
	<li><input type="checkbox" value='1' name="test_2[test_2 F]" checked="checked" />test_2 F</li>
</ul>
<input type="submit" value="OK" />
</form>
<hr />
<?php
if(isset($_POST['test_1']))
{
	echo '<h2>RESULTAT TEST 1</h2>';
	echo '<pre>'.print_r($_POST['test_1'], true).'</pre>';
}
if(isset($_POST['test_2']))
{
	echo '<h2>RESULTAT TEST 2</h2>';
	echo '<pre>'.print_r($_POST['test_2'], true).'</pre>';
}
?>


Le résultat est sensiblement le même, la nuance est que dans ma solution, on peut savoir simplement si le checkbox était ou non coché.

et pour parcourir le résultat:

foreach(ma_variable as key=>value)
{
 //...
}

key étant l'id du checkbox (ce qui est mis entre crochet du nom)
value égalr 0 ou 1 (pour mon exemple) permet de savoir si le checkbox était coché ou non


J'attend vos commentaire ... si je me plante j'aurais apris un truc Smiley smile
mais si tel est le cas, comment détecté de façon simple qu'un checkbox était oui ou non coché a l'initial (ce dont j'ai souvent besoin dans mes projet pour ne prendre en compte QUE ce qui a été effectivement modifié par l'utilisateur afin d'alléger les requête de MAJ par exemple)
Modifié par Francois44 (11 Jan 2007 - 17:56)
Les valeurs des checkboxs cochées sont dans le tableau $_POST['info'], je ne vois pas où est le problème ?

En plus, avec une volée de checkbox comme présenté ici, perso, j'en ferais la gestion au départ d'un tableau.
L'array est l'objet que PHP gère le mieux, on aurait tort de s'en priver.
Les 2 solution fonctionne très bien, celle que je propose permet juste de distinguer les checkbox coché au moment du submit de ceux qui l'était (s'il y en a) au chargement de la page.

Il s'agit d'une autre façon de gérer plusieur checkbox. Après chacun utilise celle qui lui convient.

tu semblait dire que ma solution est plus lourde:
a écrit :
Bah faut changer tes tendances... ton truc est bourin à donf !

donc j'apporte des précisions. En quoi c'est bourrin comme solution?

a écrit :
L'array est l'objet que PHP gère le mieux, on aurait tort de s'en priver.

Tout à fait d'accord avec toi, il ne s'agit ici que d'un exemple