PHP
Résolu
Bonjour, je débute en php et je ne sais pas ou est le probleme dans mon code ci dessous, il doit afficher un mot en pluriel mais il n'affiche rien:
////////////////////
<?php
$con=@mysql_connect("localhost", "root", "");
mysql_select_db('sing_plu') or die("impossible d'ouvrir la base de donnees");
$mot_singulier=$_POST['Singulier'];
/*$len=strlen($mot_singulier);
$type=substr($mot_singulier,$len-2,2); */
$rep=mysql_query("select id_sing,type from singulier where mot='.$mot_singulier.'");
if (!$rep) {
echo 'Impossible d\'exécuter la requête : ' . mysql_error();
exit;
}
$donnees = mysql_fetch_array($rep);
echo $donnees['type'] ;
switch($donnees['type'])
{
case 'a':$rep1=mysql_query("select mot from type_ail where id_a=".$donnees['id_sing']."");
$var=mysql_fetch_array($rep1);
$pluriel=$var['mot_a'];
echo $pluriel ;
break;
case 'b':$rep1=mysql_query("select mot from type_al where id_b=".$donnees['id_sing']."");
$var=mysql_fetch_array($rep1);
$pluriel=$var['mot_b'];
echo $pluriel ;
break;
case 'c':$rep1=mysql_query("select mot from type_ou where id_c=".$donnees['id_sing']."");
$var=mysql_fetch_array($rep1);
$pluriel=$var['mot_c'];
echo $pluriel ;
break;
case 'd':$rep1=mysql_query("select mot from type_eau where id_d=".$donnees['id_sing']."");
$var=mysql_fetch_array($rep1);
$pluriel=$var['mot_d'];
echo $pluriel ;
break;
case 'e':$rep1=mysql_query("select mot from type_S where id_e=".$donnees['id_sing']."");
$var=mysql_fetch_array($rep1);
$pluriel=$var['mot_e'];
echo $pluriel ;
break;
}
mysql_close();
?>
/////////////////////
////////////////////
<?php
$con=@mysql_connect("localhost", "root", "");
mysql_select_db('sing_plu') or die("impossible d'ouvrir la base de donnees");
$mot_singulier=$_POST['Singulier'];
/*$len=strlen($mot_singulier);
$type=substr($mot_singulier,$len-2,2); */
$rep=mysql_query("select id_sing,type from singulier where mot='.$mot_singulier.'");
if (!$rep) {
echo 'Impossible d\'exécuter la requête : ' . mysql_error();
exit;
}
$donnees = mysql_fetch_array($rep);
echo $donnees['type'] ;
switch($donnees['type'])
{
case 'a':$rep1=mysql_query("select mot from type_ail where id_a=".$donnees['id_sing']."");
$var=mysql_fetch_array($rep1);
$pluriel=$var['mot_a'];
echo $pluriel ;
break;
case 'b':$rep1=mysql_query("select mot from type_al where id_b=".$donnees['id_sing']."");
$var=mysql_fetch_array($rep1);
$pluriel=$var['mot_b'];
echo $pluriel ;
break;
case 'c':$rep1=mysql_query("select mot from type_ou where id_c=".$donnees['id_sing']."");
$var=mysql_fetch_array($rep1);
$pluriel=$var['mot_c'];
echo $pluriel ;
break;
case 'd':$rep1=mysql_query("select mot from type_eau where id_d=".$donnees['id_sing']."");
$var=mysql_fetch_array($rep1);
$pluriel=$var['mot_d'];
echo $pluriel ;
break;
case 'e':$rep1=mysql_query("select mot from type_S where id_e=".$donnees['id_sing']."");
$var=mysql_fetch_array($rep1);
$pluriel=$var['mot_e'];
echo $pluriel ;
break;
}
mysql_close();
?>
/////////////////////
Configuration: Windows XP Safari 532.5
4 réponses
-
Mais pourquoi toujours cette manie de stocker la connexion dans une variable lorsqu'il n'y en a qu'une ?
Dans substr, au lieu de faire $len - 2, fais directement -2.rep=mysql_query("select id_sing,type from singulier where mot='.$mot_singulier.'");On ne t'a jamais dis qu'une chaine devait toujours être en guillemets (simples ou doubles) ? Car au final c'est ça qui est exécuter par MySQL :SELECT id_sing, type FROM singulier WHERE mot=avion -
Bonjour
Pas d'accord avion-f16 Ce qui est exécuté c'estSELECT id_sing, type FROM singulier WHERE mot='.avion.'
(ce qui ne change pas grand chose)-
PHP remplace les variables par leur valeur avant d'envoyer la requête au serveur SQL.
Donc c'est bienSELECT id_sing, type FROM singulier WHERE mot=avion
Qui est envoyé à MySQL après avoir remplacer $mot_singulier par avion. Normalement la requête devrait être écrite comme ceci :mysql_query('SELECT id_sing, type FROM singulier WHERE mot="'.$mot_singulier.'"');Et la, ça serait ça qui serait envoyé à MySQL :SELECT id_sing, type FROM singulier WHERE mot="avion"
-
@avion-f16Avec la requête $rep=mysql_query("select id_sing,type from singulier where mot='.$mot_singulier.'");, c'est bien select id_sing,type from singulier where mot='.avion.' qui est envoyé. Il n'y a aucun doute la-dessus. Je ne pensais pas que la substitution de variable dans les chaînes avait des secrets pour toi. Je te fais remarquer que la chaîne commence par un " et se termine par un autre ", et que les ' et . qui sont dedans ne sont donc ni des délimiteurs de chaînes (pour le PHP), ni des opérateurs de concaténation, mais de simples caractères ' et .
Je t'invite à faire un echo pour le vérifier.
Ta correction est bonne bien sûr. Pour modifier le moins possible celle proposée au départ, il suffit de retirer les deux points:$rep=mysql_query("select id_sing,type from singulier where mot='$mot_singulier'"); -
@le pèreDésolé, j'avais mal regardé son code.
En voyant la concaténation (invalide) avec des simple quotes, j'ai pensé que la chaine était entre simple quotes.
-
-
slt, pour le substr() c en commentaire... :s
-
Merci le pere et avion-f16, oui j'avais probleme dans la chaine... ca marche maintenant