Balise OPTION avec l'attribut SELECTED

Résolu/Fermé
sabdoul Messages postés 40 Date d'inscription samedi 18 août 2012 Statut Membre Dernière intervention 22 octobre 2014 - 3 janv. 2013 à 12:51
 sabdoul - 4 janv. 2013 à 12:20
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
Heliotte Messages postés 1491 Date d'inscription vendredi 26 octobre 2012 Statut Membre Dernière intervention 28 janvier 2013 92
Modifié par Heliotte le 3/01/2013 à 13:03
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 ?
0
sabdoul Messages postés 40 Date d'inscription samedi 18 août 2012 Statut Membre Dernière intervention 22 octobre 2014
3 janv. 2013 à 13:09
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
0
Heliotte Messages postés 1491 Date d'inscription vendredi 26 octobre 2012 Statut Membre Dernière intervention 28 janvier 2013 92
Modifié par Heliotte le 3/01/2013 à 13:12
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.
0
Heliotte Messages postés 1491 Date d'inscription vendredi 26 octobre 2012 Statut Membre Dernière intervention 28 janvier 2013 92
3 janv. 2013 à 13:18
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 !!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
sabdoul Messages postés 40 Date d'inscription samedi 18 août 2012 Statut Membre Dernière intervention 22 octobre 2014
3 janv. 2013 à 13:26
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
0
sabdoul Messages postés 40 Date d'inscription samedi 18 août 2012 Statut Membre Dernière intervention 22 octobre 2014
3 janv. 2013 à 13:28
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>";
}

}
0
sabdoul Messages postés 40 Date d'inscription samedi 18 août 2012 Statut Membre Dernière intervention 22 octobre 2014
3 janv. 2013 à 13:30
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
0
Heliotte Messages postés 1491 Date d'inscription vendredi 26 octobre 2012 Statut Membre Dernière intervention 28 janvier 2013 92
Modifié par Heliotte le 3/01/2013 à 13:43
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 ?
0
sabdoul Messages postés 40 Date d'inscription samedi 18 août 2012 Statut Membre Dernière intervention 22 octobre 2014
3 janv. 2013 à 15:28
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
0
Heliotte Messages postés 1491 Date d'inscription vendredi 26 octobre 2012 Statut Membre Dernière intervention 28 janvier 2013 92
3 janv. 2013 à 19:03
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>";
	}
} 
0
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>";
}
0
Heliotte Messages postés 1491 Date d'inscription vendredi 26 octobre 2012 Statut Membre Dernière intervention 28 janvier 2013 92
4 janv. 2013 à 10:50
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"]) ?
0
Bonjour Helliot,
le 'if' dans la balise OPTION
0
Bonjour Helliot,
ce dernier
if($champ == $_POST["Ch1"])
0
Heliotte Messages postés 1491 Date d'inscription vendredi 26 octobre 2012 Statut Membre Dernière intervention 28 janvier 2013 92
4 janv. 2013 à 11:08
Remplacer les doubles quottes par des simple quottes: $_POST["Ch1"]
0
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
0
Heliotte Messages postés 1491 Date d'inscription vendredi 26 octobre 2012 Statut Membre Dernière intervention 28 janvier 2013 92
4 janv. 2013 à 11:46
Merci le père .. à qui rien n'échappe.

En effet $ch = $ch . "<OPTION " : manque le point-virgule !!
0
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>";
}

}
0
Utilisateur anonyme
4 janv. 2013 à 11:43
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.
0
Utilisateur anonyme
4 janv. 2013 à 11:46
D'ailleurs, ce code est tout faux...
echo "<OPTION ";
if($champ==$_POST["Ch1"]) { echo "selected= 'selected'";}
echo " VALUE = '" . $champ . "'>". $champ . "</OPTION>";
0