PHP

Résolu/Fermé
SonSon86 Messages postés 4 Date d'inscription mercredi 3 février 2010 Statut Membre Dernière intervention 8 février 2010 - 3 févr. 2010 à 16:48
avion-f16 Messages postés 19249 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 15 juin 2024 - 4 févr. 2010 à 17:33
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();
?>
/////////////////////
A voir également:

4 réponses

avion-f16 Messages postés 19249 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 15 juin 2024 4 505
3 févr. 2010 à 16:58
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
0
Bonjour

Pas d'accord avion-f16 Ce qui est exécuté c'est
SELECT id_sing, type FROM singulier WHERE mot='.avion.'
(ce qui ne change pas grand chose)
0
avion-f16 Messages postés 19249 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 15 juin 2024 4 505
3 févr. 2010 à 18:08
PHP remplace les variables par leur valeur avant d'envoyer la requête au serveur SQL.
Donc c'est bien
SELECT 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"
0
le père > avion-f16 Messages postés 19249 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 15 juin 2024
3 févr. 2010 à 23:53
Avec 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'");
0
avion-f16 Messages postés 19249 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 15 juin 2024 4 505 > le père
4 févr. 2010 à 17:33
Dé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.
0
SonSon86 Messages postés 4 Date d'inscription mercredi 3 février 2010 Statut Membre Dernière intervention 8 février 2010
3 févr. 2010 à 17:12
slt, pour le substr() c en commentaire... :s
0
Merci le pere et avion-f16, oui j'avais probleme dans la chaine... ca marche maintenant
0