Balise OPTION avec l'attribut SELECTED

[Résolu/Fermé]
Signaler
Messages postés
40
Date d'inscription
samedi 18 août 2012
Statut
Membre
Dernière intervention
22 octobre 2014
-
 sabdoul -
Bonjour, depuis ce matin je suis bloqué sur une erreur de syntaxe que je n'arrive pas a régler. il me semble que la syntaxe de mon code est correct mais dans le navigateur j'ai ce message d'erreur: Parse error: syntax error, unexpected '?'
voici mon code:
/* cree une liste déroulante */
function createList($tableName, $numCol)
{$sql = "SELECT " . $numCol . " FROM " . $tableName ;
$this->executeRq($sql);
if($this->rst)
{$nbCols = odbc_num_fields($this->rst); /*nb colonne de la table */
$ch="";
echo '<SELECT NAME="Ch1">';
while (odbc_fetch_row($this->rst))
{$champ = odbc_result($this->rst,1);
echo $champ;
$ch = $ch . "<OPTION VALUE = "<?php echo $champ ;?>" "<?php if($champ == $_POST["Ch1"]){ echo "SELECTED='SELECTED'";}?>" >". $champ . "</OPTION>";
}
echo $ch;
echo "</SELECT>";
}
j'ai crée une fonction qui permettra d'afficher une liste déroulante dynamiquement mais l'erreur survient au niveau de la balise OPTION car j'aimerais utilisé la l'attribut selected mais j'ai c messaged'erreur( Parse error: syntax error, unexpected '?') a cette ligne

15 réponses

Bonjour,
afin le dernier code de le père fonctionne.
Merci a tous de m'avoir aider et continuons tous a aider les autres.
merci une fois encore a tous.

Voici le code finalisé

/* cree une liste déroulante */
function createList($tableName, $numCol)
{ $i=1;
$sql = "SELECT " . $numCol . " FROM " . $tableName ;

$this->executeRq($sql);
if($this->rst)
{$nbCols = odbc_num_fields($this->rst); /*nb colonne de la table */
$ch="";
echo '<SELECT NAME="Ch1">';
while (odbc_fetch_row($this->rst))
{$i++;
$champ = odbc_result($this->rst,1);

echo "<OPTION "; if(!isset($_POST["Ch1"])) {$_POST["Ch1"]='chaine de caractère';}
if($champ==$_POST["Ch1"]) { echo "selected= 'selected'";}
echo " VALUE = '" . $champ . "'>". $champ . "</OPTION>";
}

echo "</SELECT>";
}

}
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 41713 internautes nous ont dit merci ce mois-ci

Messages postés
1491
Date d'inscription
vendredi 26 octobre 2012
Statut
Membre
Dernière intervention
28 janvier 2013
87
Bonjour sabdoul,

function createList .. elle est incomplète où j'ai mal vu !!

Édit:
Pourquoi avoir ajouté des balises php ouvrante et fermante dans le code .. puisque c'est tout php ?
Messages postés
40
Date d'inscription
samedi 18 août 2012
Statut
Membre
Dernière intervention
22 octobre 2014

oui j'ai pensé a l'utilisation de la balise php dans le code mais ça ne règle pas le problème.
quant à la function createlist elle est correct sauf qu'il y'a une balise fermente qui manque
Messages postés
1491
Date d'inscription
vendredi 26 octobre 2012
Statut
Membre
Dernière intervention
28 janvier 2013
87
Bonjour,

Tout à fait, une accolade fermante est absente !
Et maintenant .. cela fonctionne ou c'est toujours le même problème ?
Pouvez-vous coller le code rectifié .. merci.
Messages postés
1491
Date d'inscription
vendredi 26 octobre 2012
Statut
Membre
Dernière intervention
28 janvier 2013
87
Bonjour,

Quand vous faites un echo, comme ici $ch = $ch . "<OPTION VALUE = " echo $champ ;" ", la variable $champ ; sera affichée dans la page mais pas dans la liste déroulante !!
Messages postés
40
Date d'inscription
samedi 18 août 2012
Statut
Membre
Dernière intervention
22 octobre 2014

non le problème se trouve pas au niveau de l'accolade fermente c'est dans le copier/coller que j'ai oublier la partie. sinon quand j'enlève les balises [ et les différents attributs au sein de la balise OPTION tous fonctionne correctement mais j'ai d'utilisé l'attribut selected pour pouvoir resté sur le nom sélectionne dans la liste
Messages postés
40
Date d'inscription
samedi 18 août 2012
Statut
Membre
Dernière intervention
22 octobre 2014

sinon voici le code rectifié
/* cree une liste déroulante */
function createList($tableName, $numCol)
{$sql = "SELECT " . $numCol . " FROM " . $tableName ;
$this->executeRq($sql);
if($this->rst)
{$nbCols = odbc_num_fields($this->rst); /*nb colonne de la table */
$ch="";
echo '<SELECT NAME="Ch1">';
while (odbc_fetch_row($this->rst))
{$champ = odbc_result($this->rst,1);
echo $champ;
$ch = $ch . "<OPTION " if($champ == $_POST["Ch1"]){ echo "SELECTED='SELECTED'";}" VALUE = " echo $champ ;" >". $champ . "</OPTION>";
}
echo $ch;
echo "</SELECT>";
}

}
Messages postés
40
Date d'inscription
samedi 18 août 2012
Statut
Membre
Dernière intervention
22 octobre 2014

le problème est que j'ai une erreur qui s'affiche a l'ecran m'indiquant qu'il ya une erreur de syntaxe au ligne de la balise option
Messages postés
1491
Date d'inscription
vendredi 26 octobre 2012
Statut
Membre
Dernière intervention
28 janvier 2013
87
Est-ce vous attrapez des verrues quand vous dites "Bonjour" ?

Édit:
Vous confondez HTML et PHP .. et vous ne travaillez qu'avec le langage PHP

J'ai décomposé cette partie de code pour mieux comprendre:
$ch = $ch . "<OPTION " if($champ == $_POST["Ch1"]){ echo "SELECTED='SELECTED'";}" VALUE = " echo $champ ;" >". $champ . "</OPTION>";
:

$ch = $ch . "<OPTION "
if($champ == $_POST["Ch1"])
{
	echo "SELECTED='SELECTED'";
}
" VALUE = " echo $champ ;" >". $champ . "</OPTION>";
.. N'y a-t-il pas quelque chose qui cloche ?
Messages postés
40
Date d'inscription
samedi 18 août 2012
Statut
Membre
Dernière intervention
22 octobre 2014

bonjour Helliot,
je vois pas ce qui cloche malheureusement car la syntaxe et le code me semble correct sauf que j'ai une erreur de syntaxe dont je vois pas.
la $ch contient "<OPTION " if($champ == $_POST["Ch1"]){ echo "SELECTED='SELECTED'";}" VALUE = " echo $champ ;" >". $champ . "</OPTION>"; et ensuite on l'affiche juste avant la fermeture de la balise select.
quand au code lui même lorsqu'on sélectionne un champ et qu'on l'envoi a travers le $_post ce champ est comparé a la variable $champ avant de faire de selected auparavant la valeur chaque champ est identifié a travers la l'attribut VALUE.
j'espère que vous compreniez bien maintenant. merci de ton aide
Messages postés
1491
Date d'inscription
vendredi 26 octobre 2012
Statut
Membre
Dernière intervention
28 janvier 2013
87
Bonsoir sabdoul,

Bienvenue chez les fous !

Essayez ceci:
/* cree une liste déroulante */
function createList($tableName, $numCol)
{
		
	//$sql = "SELECT " . $numCol . " FROM " . $tableName ;
	//$this->executeRq($sql);
	$rst = array("Premier","Deuxième","Troisième","Quatrième");
	if($this->rst)
	{
		//$nbCols = odbc_num_fields($this->rst); /*nb colonne de la table */
		echo '<SELECT NAME="Ch1">';
		$ch="";
		//while (odbc_fetch_row($this->rst))
		foreach ( $tab as $champ )
		{
			//$champ = odbc_result($this->rst,1);
			//echo $champ;
			$ch = $ch . "<OPTION "
			if($champ == $_POST["Ch1"])
			{
				$ch = $ch . "SELECTED='SELECTED'";
			}
			$ch = $ch . " VALUE = " .$champ . " >". $champ . "</OPTION>";
		echo $ch;
		}
	echo "</SELECT>";
	}
} 
Bonjour Helliot,
Vous avez mis des lignes en commentaire au ces lignes sont nécessaire. je précise que travaille sur une base de données ODBC.
Donc je vous met tous le code que j'ai adapté a votre suggestion mais ce toujours ce message d'erreur(Parse error: syntax error, unexpected 'if' (T_IF) ) au niveau de la ligne de IF.
Voici le code avec la class elle même comportant la fonction de connexion ainsi que la fonction de création de la liste
<?php
class phpOracle
{var $nomUser, $password, $db;
var $rst;
/*connexion à la BD et exécution d'une requête*/
function executeRq($sql)
{/* se connecter a la base ODBC*/
require_once("connect.php"); //inclut le fichier une seule fois
$this->db = DSN;
$this->nomUser = Nom;
$this->password = MPasse;
$connexion = odbc_connect($this->db, $this->nomUser, $this->password);
if(!$connexion)
{echo "Désolé, connexion au serveur impossible\n";
exit;
}
/* executer la requete sur la connection et placer le resultat dans le tableau rst*/
$this->rst = odbc_do($connexion,$sql);
}

/* cree une liste déroulante */
function createList($tableName, $numCol)
{ $i=1;
$sql = "SELECT " . $numCol . " FROM " . $tableName ;

$this->executeRq($sql);
if($this->rst)
{$nbCols = odbc_num_fields($this->rst); /*nb colonne de la table */
$ch="";
echo '<SELECT NAME="Ch1">';
while (odbc_fetch_row($this->rst))
{$i++;
$champ = odbc_result($this->rst,1);
echo $champ ;
$ch = $ch . "<OPTION "
if($champ == $_POST["Ch1"])
{
$ch = $ch . "SELECTED='SELECTED'";
}
$ch = $ch . " VALUE = " .$champ . " >". $champ . "</OPTION>";
}
echo $ch;
echo "</SELECT>";
}
Messages postés
1491
Date d'inscription
vendredi 26 octobre 2012
Statut
Membre
Dernière intervention
28 janvier 2013
87
Bonjour sabdoul,

Quel if ?

message d'erreur(Parse error: syntax error, unexpected 'if' (T_IF) ) au niveau de la ligne de IF ..

if(!$connexion) ?
if($this->rst) ?
if($champ == $_POST["Ch1"]) ?
Bonjour Helliot,
le 'if' dans la balise OPTION
Bonjour Helliot,
ce dernier
if($champ == $_POST["Ch1"])
Messages postés
1491
Date d'inscription
vendredi 26 octobre 2012
Statut
Membre
Dernière intervention
28 janvier 2013
87
Remplacer les doubles quottes par des simple quottes: $_POST["Ch1"]
Bonjour

Les doubles ou simples quotes n'y sont pour rien.
Mais il ne faut pas oublier le point virgule à la fin de la ligne précédente
Messages postés
1491
Date d'inscription
vendredi 26 octobre 2012
Statut
Membre
Dernière intervention
28 janvier 2013
87
Merci le père .. à qui rien n'échappe.

En effet $ch = $ch . "<OPTION " : manque le point-virgule !!
Bonjour,
j'ai modifié le code pour le simplifie mais toujours le même problème avec le if dans la balise option.
Je précise sans la balise la condition if la balise le code fonctionne normalement mais moi j'aimerais utilisé l'attribut SELECTED pour pouvoir resté sur le champ sélectionne après la sélection.
/* cree une liste déroulante */
function createList($tableName, $numCol)
{ $i=1;
$sql = "SELECT " . $numCol . " FROM " . $tableName ;

$this->executeRq($sql);
if($this->rst)
{$nbCols = odbc_num_fields($this->rst); /*nb colonne de la table */
$ch="";
echo '<SELECT NAME="Ch1">';
while (odbc_fetch_row($this->rst))
{$i++;
$champ = odbc_result($this->rst,1);

echo "<OPTION "if($champ==$_POST["Ch1"]) { "selected= 'selected'";}" VALUE = '" . $champ . "'>". $champ . "</OPTION>";
}

echo "</SELECT>";
}

}
Utilisateur anonyme
Tu as oublié un point virgule :après ton echo "<OPTION " :

echo "<OPTION ";
if($champ==$_POST["Ch1"]) { "selected= 'selected'";}" VALUE = '" . $champ . "'>". $champ . "</OPTION>"; 

ET il n'y a aucune raison d'écrire $_POST["Ch1"] plutôt que $_POST['Ch1'] ou l'inverse, c'est la même chose.
Utilisateur anonyme
D'ailleurs, ce code est tout faux...
echo "<OPTION ";
if($champ==$_POST["Ch1"]) { echo "selected= 'selected'";}
echo " VALUE = '" . $champ . "'>". $champ . "</OPTION>";