Précédent   Forum des professionnels en informatique > PHP > Langage > Formulaires
Formulaires Forum d'entraide sur les formulaires avec PHP. Avant de poster -> FAQ formulaires, Cours de formulaires et Sources de formulaires
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 25/06/2008, 12h10   #1
Membre confirmé
 
Inscription : mars 2003
Messages : 674
Détails du profil
Informations forums :
Inscription : mars 2003
Messages : 674
Points : 242
Points : 242
Par défaut Boutons radio non cochés

Bonjour.

Contexte : Quand une personne a complété un dossier et qu'elle veut le modifier, j'affiche dans un formulaire tout ce qu'elle a saisi auparavant.
J'ai un petit problème avec le checked des boutons radio.
Quand je récupère la valeur d'un champ, je veux mettre sur le bouton radio correspondant la valeur checked.
Voici la struture de ma page.
j'ai commencé par écrire la fonction
Code :
1
2
3
4
5
6
7
8
9
10
11
12
//vérifie s'il s'agit d'une entreprise ou d'un établissement scolaire
function est_selectionne_etabl($option) {
    if (!isset($_POST['etabl_type'])) {
            return FALSE;
    }
    for ($i = 0, $c = count($_POST['etabl_type']); $i < $c; $i++) {
        if ($_POST['etabl_type'][$i] == $option) {
            return TRUE;
        }
    }
    return FALSE;
}
ensuite je teste quel bouton est "checké"
Code :
1
2
3
4
5
6
$etabl_type = "";
if (isset($_POST['etabl_type'])){
    for ($i = 0, $c = count($_POST['etabl_type']); $i < $c; $i++) {
        $etabl_type = "" . $_POST['etabl_type'][$i] . "";
    }
}
Récupération des champs de la table
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
if (isset($_REQUEST['id_etablist'])){
	$id_etablist = $_REQUEST['id_etablist'];
	$sql = mysql_query("SELECT * FROM etablissement WHERE id_etablist = $id_etablist");
	if (mysql_num_rows($sql) > 0){
		$res = mysql_fetch_array($sql);
		$id_etablist_table = $res['id_etablist'];
		$type_etablist_table = stripslashes(htmlentities(trim($res['type_etablist'])));
		$nom_etablist_table = stripslashes(htmlentities(trim($res['nom_etablist'])));
		$adresse_etablist_table = stripslashes(htmlentities(trim($res['adresse_etablist'])));
		$cp_etablist_table = $res['cp_etablist'];
		$ville_etablist_table = stripslashes(htmlentities(trim($res['ville_etablist'])));
		$tel_etablist_table = $res['tel_etablist'];
		$fax_etablist_table = $res['fax_etablist'];
		$email_etablist_table = $res['email_etablist'];
		$effectif_etablist_table = $res['effectif_etablist'];
	}
}
et enfin le formulaire (je ne mets ici que la partie qui me pose problème)
Code :
1
2
<input type="radio" name="etabl_type[]" value="Entreprise" <?php if(est_selectionne_etabl("Entreprise")) { echo 'checked'; } else if($type_etablist_table == "Entreprise"){ echo 'checked';} ?>/>Une entreprise 
<input type="radio" name="etabl_type[]" value="Scolaire" <?php if(est_selectionne_etabl("Scolaire")) { echo 'checked'; } else if($type_etablist_table == "Scolaire"){ echo 'checked';} ?>style="margin-left:60px"/>Un établissement scolaire
Merci donc de me dire pourquoi un bouton radio n'est pas "checked" alors que j'ai bien une valeur dans le champ.
philippef est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/06/2008, 14h05   #2
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 383
Points : 16 383
Fais un var_dump($type_etablist_table) et un print_r($_POST['etabl_type']) avant ton test de condition et tu sauras ce qu'ils valent puisque ce n'est ni "Entreprise" ni "Scolaire".

Par contre tu as un if et un elseif qui font la meme action donc autant les rassembler.

Pour parcourir le tableau $_POST['etabl_type'] tu peux utiliser foreach() plutot que de faire une une boucle for.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/06/2008, 15h18   #3
Membre confirmé
 
Inscription : mars 2003
Messages : 674
Détails du profil
Informations forums :
Inscription : mars 2003
Messages : 674
Points : 242
Points : 242
merci.

j'ai modifié le code de la fonction
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function est_selectionne_type($option) {
var_dump($type_etablist_table)
print_r($_POST['etabl_type'])
    if (!isset($_POST['etabl_type'])) {
            return FALSE;
    }
    for ($i = 0, $c = count($_POST['etabl_type']); $i < $c; $i++) {
        if ($_POST['etabl_type'][$i] == $option) {
            return TRUE;
        }
    }
    return FALSE;
 
}
j'ai un message d'erreur
Code :
Parse error: parse error in c:\weblocal\sites\clubeuropeendelasante\prix_sante\appels\dossier_candidature.php on line 10
philippef est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/06/2008, 15h49   #4
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 383
Points : 16 383
Tu n'as pas mis le ; a la fin de la commande var_dump

Sinon c'est avant "if($type_etablist_table" qu'il faut le mettre.
$type_etablist_table n'existe pas a l'interieur de ta fonction.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/06/2008, 16h53   #5
Membre confirmé
 
Inscription : mars 2003
Messages : 674
Détails du profil
Informations forums :
Inscription : mars 2003
Messages : 674
Points : 242
Points : 242
merci.
J'avoue que j'ai un peu de mal
donc j'ai ajouté var_dump ici
Code :
1
2
<input type="radio" name="etabl_type[]" value="Entreprise" <?php var_dump($type_etablist_table); print_r($_POST['etabl_type']); if(est_selectionne_type("Entreprise")) { echo 'checked'; } elseif($type_etablist_table == "Entreprise"){ echo 'checked';} ?>/>Une entreprise
<input type="radio" name="etabl_type[]" value="Scolaire" <?php var_dump($type_etablist_table); print_r($_POST['etabl_type']); if(est_selectionne_type("Scolaire")) { echo 'checked'; } elseif($type_etablist_table == "Scolaire"){ echo 'checked';} ?>style="margin-left:60px"/>Un établissement scolaire
et maintenant j'ai cette erreur
Code :
1
2
3
  Notice: Undefined index: etabl_type in c:\weblocal\sites\clubeuropeendelasante\prix_sante\appels\formulaire_candidature.php on line 31
/>Une entreprise  Notice: Undefined index: etabl_type in c:\weblocal\sites\clubeuropeendelasante\prix_sante\appels\formulaire_candidature.php on line 32
checkedstyle="margin-left:60px"/>Un établissement scolaire
les 31 et 32 correspondent au 2 lignes de code.
Info complémentaire j'ai scindé la page en 2
La page candidature où j'ai tout le code php avec un include pour afficher la page qui contient le formulaire.
J'espère que l'erreur ne vient pas de là !!
philippef est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/06/2008, 11h47   #6
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 383
Points : 16 383
Fais :

Code :
1
2
3
4
5
6
7
8
 
<? 
echo '<p>POST etabl_type contient : </p>' . var_dump($_POST['etabl_type']);
echo '<p>type_etablist_table contient : </p> . var_dump($type_etablist_table);
?>
 
<input type="radio" name="etabl_type[]" value="Entreprise" />Une entreprise 
<input type="radio" name="etabl_type[]" value="Scolaire" />Un établissement scolaire
Comme ca on verra precisemment ou on en est.

----------

Mais sinon sur le fond je comprends mal ce que tu fais

Si le choix n'apparait qu'une seul fois dans ton formulaire, tu appelles juste ton champ radio "etabl_type" et ensuite au traitement soit
$_POST["etabl_type"] = "Entreprise" ou $_POST["etabl_type"]="Scolaire" selon la case cochée.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/06/2008, 16h43   #7
Membre confirmé
 
Inscription : mars 2003
Messages : 674
Détails du profil
Informations forums :
Inscription : mars 2003
Messages : 674
Points : 242
Points : 242
Merci j'ai testé et voilà ce que j'obtiens :
Code :
1
2
3
Notice: Undefined index: etablist in c:\weblocal\sites\clubeuropeendelasante\prix_sante\appels\dossier_candidature.php on line 17
NULL POST etabl_type contient : 
string(0) "" type_etablist_table contient
Comme j'ai tout refais les noms sont un peu changés.
Mais je ne comprends pas pourquoi ça ne marche pas pour "etablist" alors que ça marche pour "concertation"
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function est_selectionne_etablist($option) {
    if (!isset($_POST['etablist'])) {
            return FALSE;
    }
    for ($i = 0, $c = count($_POST['etablist']); $i < $c; $i++) {
        if ($_POST['etablist'][$i] == $option) {
            return TRUE;
        }
    }
    return FALSE;
}
 
$etablist = "";
if (isset($_POST['etablist'])){
    for ($i = 0, $c = count($_POST['etablist']); $i < $c; $i++) {
        $etablist = "" . $_POST['etablist'][$i] . "";
    }
}
 
<input type="radio" name="etablist[]" value="Entreprise" <?php if(est_selectionne_etablist("Entreprise")) { echo 'checked'; } else if ($etablist == "Entreprise"){ echo 'checked';} ?>/>Une entreprise 
<input type="radio" name="etablist[]" value="Scolaire" <?php if(est_selectionne_etablist("Scolaire")) { echo 'checked';}  else if ($etablist == "Scolaire"){ echo 'checked';} ?>style="margin-left:60px"/>Un établissement scolaire
et pour ça ça marche
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function est_selectionne_concertation($option) {
    if (!isset($_POST['concertation'])) {
            return FALSE;
    }
    for ($i = 0, $c = count($_POST['concertation']); $i < $c; $i++) {
        if ($_POST['concertation'][$i] == $option) {
            return TRUE;
        }
    }
    return FALSE;
}
 
$concertation = "";
if (isset($_POST['concertation'])){
    for ($i = 0, $c = count($_POST['concertation']); $i < $c; $i++) {
        $concertation = "" . $_POST['concertation'][$i] . "";
    }
}
 
<input type="radio" name="concertation[]" value="Oui" <?php if(est_selectionne_concertation("Oui")) { echo 'checked'; } else if($concertation == "Oui"){ echo 'checked';} ?> style="margin-left:90px" />Oui
<input type="radio" name="concertation[]" value="Non" <?php if(est_selectionne_concertation("Non")) { echo 'checked'; } else if($concertation == "Non"){ echo 'checked';} ?> style="margin-left:90px" />Non</span>
Quand je fais echo $etablist; qui provient de la table, j'ai bien dans ce cas là : Scolaire

Ce qui m'étonne c'est que la même chose marche sur un site que j'ai déjà fais.
Très bizarre
philippef est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/06/2008, 19h56   #8
Membre confirmé
 
Inscription : mars 2003
Messages : 674
Détails du profil
Informations forums :
Inscription : mars 2003
Messages : 674
Points : 242
Points : 242
Encore plus bizarre

Si etablist = Entreprise, le bouton est coché
mais pas si etablist = Scolaire

philippef est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/06/2008, 20h23   #9
Membre confirmé
 
Inscription : mars 2003
Messages : 674
Détails du profil
Informations forums :
Inscription : mars 2003
Messages : 674
Points : 242
Points : 242
Bon je sais pas pourquoi mais maintenant ça marche.

Merci encore à Sabotage
philippef est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h13.


 
 
 
 
Partenaires

Hébergement Web