Page 1 sur 1

[resolu]problème affichage données mysql liste déroulante

Posté : 30 août 2005, 14:57
par yannlog
Bonjour à tous,

Je rencontre une difficulté avec un script permettant de récupérer des données contenues dans une bd mysql au moyen d'une liste déroulante. L'affichage et l'envoi des champs remplis à la main sont corrects avec l'apostrophe (pas de problème sur l'insert ou l'update).

Champ : L'actualité / affichage = L'actualité

En revanche au niveau de la liste déroulante elle-même, lorsque les noms de service que j'utilise comportent des caractères "apostrophe", suite à l'envoi de la requête, l'affichage s'arrête après l'apostrophe.

Liste déroulante : L'actualité / affichage = L

Je me suis pas mal documenté sur le net au niveau de la doc php (mysql_escape_string, addslashes ...) mais je n'arrive pas à trouver le moyen de corriger cette erreur.

Voilà le morceau de code (liste déroulante) que je cherche à modifier pour qu'il ne prenne pas en compte le fameux " ' " qui arrête l'éxecution de la requête pour affichage:

Que faut-il placer et à quel endroit svp ?

<?php
	
  	$select_service= "<select name=service>\n";	
	$sql = 'SELECT id, service FROM rep_service ORDER BY service ASC';
	$result = mysql_query($sql);
	while( $row = mysql_fetch_object($result))
	{
    if ($myrow['theme'] == $row->service)
	$selected = "SELECTED";
	else
	$selected ="";
	$select_service .="<option value='$row->service' $selected>$row->service</option>\n";
	}
	$select_service .="</select>\n";
	echo "$select_service";
	?>

ps : Magic_quotes_gpc est pourtant à ON.

Merci à tous pour votre aide :wink:

Posté : 30 août 2005, 15:04
par ouckileou
normal, tu entoures les attributs avec des simple quotes, donc une apostrophe signifie ici la fin de la valeur de l'attribut

fais plutôt comme ceci :
$select_service .="<option value=\"$row->service\" $selected>$row->service</option>\n";
ou comme ça :
$select_service .='<option value="$row->service" $selected>$row->service</option>\n';
mais dans la deuxième solution le \n ne marchera plus

Posté : 30 août 2005, 15:05
par Cyrano
Normal, tu encadres les valeurs de tes attributs html avec des apostrophes aussi, donc dès que le navigateur recontre la seconde, il n'affiche plus le reste. Propositionde correction avec une petite optimisation en plus:
<?php

$select_service= "<select name=service>\n";
mysql_real_escape_string($service);
$sql = 'SELECT id, service FROM rep_service ORDER BY service ASC';
$result = mysql_query($sql);
while( $row = mysql_fetch_object($result))
{
    $selected = ($myrow['service'] == $row->service) ? " SELECTED" : null;
    $select_service .="  <option value=\"". $row->service ."\"". $selected .">". $row->service ."</option>\n";
}
$select_service .="</select>\n";
echo "$select_service";
?>

Posté : 30 août 2005, 15:26
par yannlog
Un grand merci à vous, tout est ok. Je n'ai pas encore l'oeil du codeur, vous m'avez fait gagner un temps précieux et permis de comprendre mon erreur !

Posté : 02 sept. 2005, 09:23
par yannlog
Dans le même esprit, je souhaite faire un update sur des boutons type radio.

Au niveau html
<input type="radio" name="cas" value="1">oui
<input type="radio" name="cas" value="0" checked>non

Au niveau php
Pour l'update j'utilise la variable $myrow["cas"] pour appeler le 1 (oui) ou le 0 (non) inscrit dans la table mais je ne sais pas quelle condition utiliser pour réafficher les boutons radio cochés à l'origine (soi le oui ou soi le non) ? Je pense devoir les insérer avec php dans le "value" ? Une idée ?

merci encore.

Posté : 02 sept. 2005, 09:28
par Cyrano
Nouveau sujet => nouveau message. Slon la suite je couperai peut-être ce message pour en créer un nouveau, le précédent étant résolu.

Ceci dit, je ne comprends pas grand chose : Si on avait un bout de code de base, ce serait probablement plus facile de suivre...

Posté : 02 sept. 2005, 09:38
par yannlog
Autant pour moi. Je vais voir ça. merci.

Posté : 02 sept. 2005, 09:53
par yannlog
vais essayer d'être plus clair avec un petit exemple

saisie du nom dans le champ nom, pas de problème :
<label class="label">nom: </label>
<input type="Text" name="nom" size="35"><br>

Update du champ nom, pas de problème non plus :
<label class="label">nom:</label>
<input type="Text" name="nom" size="35" value="<?php echo $myrow["nom"]?>"><br>

Je veux faire la même chose mais avec un champ de type "bouton radio"
<label class="label">cas:</label>
<input type="radio" name="cas" value="1">oui
<input type="radio" name="cas" value="0" checked>non

Je ne sais pas comment rappeler les valeurs d'origine avec php
comme dans l'exemple précédent (champ nom) pour mettre à jour le bouton radio (soi oui soi non).

Voilà, sorry si je manque de clarté, sinon je continue à chercher.
Pas facile pour un designer de se plonger dans les arcanes du code, même le plus basique. Ah la polyvalence ...

ps: je n'ai pas jugé utile de publier mes requêtes insert et update qui fonctionnent sans problème pour toutes les variables inscrites dans la base.

Posté : 02 sept. 2005, 09:59
par Cyrano
Je ne saisis toujours pas où est exactement ta difficulté : pour récupérer la valeur d'un champ, tu l'initialises dans une variable en récupérant la valeur dans la super globale $_POST ou $_GET selon la méthode employée.

Dans le cas d'un bouton radio, il y en a en général plusieurs dont un seul peut être sélectionné, mais tous ont la même valeur d'attribut "name" : tu en récupères donc la valeur en appelant $_POST['nom_champ_radio'].

Voilà tout ce que j'arrive à deviner pour l'instant.

Posté : 02 sept. 2005, 10:01
par ouckileou
je crois qu'il veut pré-cocher un bouton radio, comme il avait pré-positionné les listes déroulantes, suivant les valeurs de la Bdd

il suffit de faire un petit test :
tu as la valeur de chaque bouton radio, si elle est égale à celle enregistrée, tu insers "checked"

Posté : 02 sept. 2005, 10:44
par yannlog
c'est exactement ça mais je galère un peu pour placer le code php où il faut avec l'option checked ... tu peux m'aider ?

J'ai pensé à ça mais ça ne récupère pas le checked ...

<input type="radio" name="cas" value="<?php if ($myrow["cas"] == 0) echo "checked>non"?>"

<input type="radio" name="cas" value="<?php if ($myrow["cas"] == 1) echo "checked>oui"?>"

Posté : 02 sept. 2005, 10:52
par ouckileou
<input type="radio" name="cas" value="non" 
<?php if ($myrow["cas"] == 0) echo "checked"; ?>
>

Posté : 02 sept. 2005, 11:05
par yannlog
Encore une fois parfait ! Un petite question, tu as bcp d'heures de vol en php ? Merci à vous.

Posté : 02 sept. 2005, 11:15
par ouckileou
Encore une fois parfait ! Un petite question, tu as bcp d'heures de vol en php ? Merci à vous.
non pas tant que ça, ça c'est simple et c'est l'habitude ;)
++