Page 1 sur 1

SHOW TABLE + ARRAY KEY EXISTS (1er posts sur concaténation)

Posté : 28 févr. 2007, 15:47
par dread
Bonjour à tous.
Je débute en php et je rencontre quelques difficultés avec la synthaxe.
Je réalise un formulaire que je souhaite dynamique cad qu'une partie du formulaire va être commune à l'ensemble des utilisateurs et qu'une autre partie va différée selon les groupes d'utilisateurs. C'est pourquoi j" souhaite mettre en place une condition if afin de générer cette autre partie en fonction des besoins de ces utilisateurs.
J'ai commencé par un bout de code comme celui-ci mais arrivé à une condition if qui se trouvait dans la première, une erreur intervient.
Je me dit que ça doit être une erreur de synthaxe avec la concaténation.
Voici le bout de code incriminé:
<?php
	   if ($row_rs_fiche_etab['type_etab'] == 'camping') {echo '
etc...
<input name="icone_hand" type="checkbox" id="icone_hand" value="oui" '.if ($row_rs_fiche_etab['icone_hand'] == "oui") {echo "checked"}.'/> etc...
Je ne suis pas trop habitué à la synthaxe avec concaténation des éléments HTML et PHP donc si quelqu'un pouvait m'aider.
Merci par avance.

Posté : 28 févr. 2007, 16:29
par polo
Bonjour,
déjà normal que tu ai une erreur, car tu na pas fermé ton premier if et un echo, je met ça sur le coups du copié > collé, mais après tu a fais une erreur de syntaxe en mettant un if dans un echo donc voici ton code corrigé:
<?php
       
if ($row_rs_fiche_etab['type_etab'] == 'camping') {
// si ta var = camping on passe à ce qui a en dessous

echo 'etc...<input name="icone_hand" type="checkbox" id="icone_hand" value="oui"';

if ($row_rs_fiche_etab['icone_hand'] == "oui") {
// si ta var = oui c'est fini on passe pas par le else

echo "checked />";

}else{
// si ta var ne vaut pas ok on ferme l'input

echo '/>';

} // fin second if

echo 'etc...';

} // fin premier if
?>
Voila :D

Posté : 28 févr. 2007, 16:38
par thehawk
je me suis fait avoir sur le fil du rasoir ...
et mon cher tu ne peux pas inserer un if avec un concanation ...

Posté : 28 févr. 2007, 17:30
par dread
Merci à vous deux Polo et Thehawk pour vos réponses.
J'ai réussi à faire ce que je voulais.
A tout hasard, vous ne sauriez pas comment je pourrais traduire en php le fait de vérifier si une table existe.
Cad que:
si (table_truc existe)
alors { faire requete }
sinon {faire requete}
Merci encore.

Posté : 28 févr. 2007, 18:03
par Hywan
Bonjour :)

J'ai envie de dire : oulala, mais mince !
Et les conditions ternaires vous en faites quoi ?

On a plusieurs types de conditions, je vous laisse lire le magnifique manuel de PHP (qui apparement, est de moins en moins lu ...) : Les expressions : Exemple 14.2. L'opérateur conditionnel ternaire.

Donc tu pourrais avoir au final quelque chose de beaucoup plus léger :
<?php

if($row_rs_fiche_etab['type_etab'] == 'camping')
    echo '<input type="icone_hand" type="checkbox" id="icone_hand" value="value"'.($row_rs_fiche_etab['icone_hand'] == 'oui' ? ' checked' : '').' />';

?>
Attention à la gestion des espaces (j'édite parce que j'avais fais la faute :p).

D'ailleurs, c'est peut-être préférable de mettre "true" ou "false" dans tes champs de table, plutôt que "oui" et "non".


Concernant ta seconde question, tu as plusieurs possibilités.
  • Soit tu fais une requête vers la table, et tu regardes si tu as une erreur ou pas. Mais c'est super crado, et je te le déconseille vivement ^^ ;
    Ou, tu utilises la fonction mysql_list_tables();, et tu regardes si le tableau de retour contient ta table (avec array_key_exists par exemple) ;
    Ou alors, tu utilises l'alternative de mysql_list_tables, à savoir, tu exécutes la requête SQL suivante : SHOW TABLES FROM <db>, avec un mysql_query.
Personnellement, je préfère mysql_list_tables();, car elle me retourne directement un tableau, je n'ai pas besoin de faire de manipulation avec mysql_fetch_* (même si elle est dépréciée : je vous rapporte de nouveau au manuel).

En espérant t'avoir aidé.


Bonne journée :)

Posté : 28 févr. 2007, 20:37
par polo
Oui, en effet ^^
bien joué HyWan
j'avais complètement oublier les "conditions ternaires", Merci pour ce rafraichissement de mémoire :D

Posté : 01 mars 2007, 15:37
par Hywan
Pas de quoi :P

Mais tu remarqueras que c'est vachement plus pratique comme ça !


Bonne journée à tous :)

Posté : 01 mars 2007, 16:08
par dread
Suite à vos précieux conseils, j'ai bien essayer les différentes méthodes proposées avec SHOW TABLES pour générer toutes les tables présentes dans ma base de données et array key exists pour vérifier si la table que j'appelait dans ma requete existait dans ma base de données mais rien y fait.
Je mettrais ça sur le compte de l'inexpérience si vous me le permettez.
A l'heure actuelle, voici à quoi j'en suis arrivé pour que ca marche. Comme vous le constaterez, j'ai écrit en dur mes tables présentes dans ma base de données mais dans l'idéal, il vaudrait mieux que ca se fasse tout seul mais j'ai pas pu faire mieux.
$query_rs_type = "SELECT type_etab, etab_id FROM tbl_etab WHERE etab_id = '".$_GET['num_fiche']."'";
$rs_type = mysql_query($query_rs_type);
$row_rs_type = mysql_fetch_assoc($rs_type);

$table = array (
    "tbl_camping" => "1" ,
    "tbl_hotel" => "2",
	"tbl_gite" => "3",
	"tbl_auberge" => "4",
	"tbl_chambrehote" => "5",);


if (array_key_exists("tbl_".$row_rs_type['type_etab'], $table)) {
$query_rs_fiche_etab = "SELECT * FROM tbl_etab, tbl_".$row_rs_type['type_etab']." WHERE tbl_etab.etab_id = tbl_".$row_rs_type['type_etab'].".id_etab AND etab_id = '".$_GET['num_fiche']."'";
} else {
$query_rs_fiche_etab = "SELECT * FROM tbl_etab WHERE etab_id = '".$_GET['num_fiche']."'";
}
$rs_fiche_etab = mysql_query($query_rs_fiche_etab) or die(mysql_error());
$row_rs_fiche_etab = mysql_fetch_assoc($rs_fiche_etab);
Donc si quelqu'un se sent assez charitable pour me dire comment coupler array key exists avec SHOW TABLES, je lui en serait très reconnaissant.

Merci par avance d'aider un débutant à parfaire son éducation en php!!

Posté : 01 mars 2007, 19:39
par Hywan
Heya :)

Si tu avais fais gaffe à mes liens, tu verrais que dans le manuel, tu as un script tout fait qui immite le comportement de mysql_list_tables avec la requête SHOW TABLE FROM <db> ... tu as lu mes liens ? :o

Voici le lien avec l'ancre, tu devrais arrivé directement dessus :
PHP : mysql_list_tables : Exemple d'alternative à mysql_list_tables() (1523).

Bonne soirée :)