Parse error: syntax error, unexpected '''

Résolu/Fermé
Kevinteger - 27 mai 2008 à 19:05
Kevinteger Messages postés 9 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 28 mai 2008 - 28 mai 2008 à 13:08
Bonjour,
Le but de mon code est d'interoger ma base de données chez free et d'afficher la recherche. (comme un dictionnaire)
j'ai un souci et je ne vois pas ce qui cloche:

Voici mon code php. Lorsque j'éxécute ma recherche, il me dit:
Parse error: syntax error, unexpected ''' in /mnt/167/sda/6/1/k.dejoye/rechercher.php on line 12


<?php // on se connecte à MySQL
$db = mysql_connect('sql.free.fr', 'k.dejoye', '********');
// on sélectionne la base
mysql_select_db('k_dejoye',$db);
// on crée la requête SQL
$sql = "SELECT Terme,Definition FROM k_dejoye WHERE Terme LIKE '%$Recherche%'";
// on envoie la requête
$req = mysql_query($sql) or die('Erreur SQL !.$sql.mysql_error());
// on fait une boucle qui va faire un tour pour chaque enregistrement
while($data = mysql_fetch_assoc($req))
// on affiche les informations de la table
PRINT '.$data["Terme"].$data["Definition"]';
// on ferme la connexion à mysql
mysql_close();
?>

4 réponses

sly-bzh Messages postés 415 Date d'inscription jeudi 10 janvier 2008 Statut Membre Dernière intervention 5 décembre 2009 118
27 mai 2008 à 19:28
Bonjour,
Je te déconseille d'utiliser la fonction print pour afficher des données. Il me semble que pour les tableaux il faut utiliser, par exemple {$data['terme']} si tu utilises cette fonction.
Moi (et une majeure partie des utilisateurs de php que je connais) je préfère utiliser echo "...";
Et tu as oublié les {} de ton while
Essaye çà :
<?php // on se connecte à MySQL
$db = mysql_connect('sql.free.fr', 'k.dejoye', '********');
// on sélectionne la base
mysql_select_db('k_dejoye',$db);
// on crée la requête SQL
$sql = "SELECT Terme,Definition FROM k_dejoye WHERE Terme LIKE '%$Recherche%'";
// on envoie la requête
$req = mysql_query($sql) or die('Erreur SQL !.$sql.mysql_error());
// on fait une boucle qui va faire un tour pour chaque enregistrement
while($data = mysql_fetch_assoc($req))
// on affiche les informations de la table (Ca va te mettre un point entre tes valeurs c'est bien ça que tu veux ?)
{
   echo ".$data['Terme'].$data['Definition'] <br/>";
}
// on ferme la connexion à mysql
mysql_close();
?>
0
Kevinteger Messages postés 9 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 28 mai 2008
27 mai 2008 à 21:02
Ce qu'il me faut c'est un ":" entre le terme et sa définition.
Maintenant j'ai cette erreur:
Parse error: syntax error, unexpected T_STRING in /mnt/167/sda/6/1/k.dejoye/rechercher.php on line 11
Et je n'ai pas vu de {} autour du while il faut les mettre où?
Merci d'avance pour ton aide!
0
aiacciu Messages postés 57 Date d'inscription mercredi 21 mai 2008 Statut Membre Dernière intervention 11 mai 2010 3
27 mai 2008 à 21:17
^^ enleve le commentaire de la ligne 11 ! les acolades sont bien mises
0
Kevinteger Messages postés 9 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 28 mai 2008
27 mai 2008 à 21:52
Cette fois-ci l'erreur est passée à la ligne 13.
Ce qui me semble bizar c'est que la fonction echo ne soit pas écrite en bleu dans mon code...

<?php // on se connecte à MySQL
$db = mysql_connect('sql.free.fr', 'k.dejoye', '********');
// on sélectionne la base
mysql_select_db('k_dejoye',$db);
// on crée la requête SQL
$sql = "SELECT Terme,Definition FROM k_dejoye WHERE Terme LIKE '%$Recherche%'";
// on envoie la requête
$req = mysql_query($sql) or die('Erreur SQL !.$sql.mysql_error());
// on fait une boucle qui va faire un tour pour chaque enregistrement
while($data = mysql_fetch_assoc($req))
// on affiche les informations de la table
{
echo ".$data['Terme'].$data['Definition'] <br/>";
}
// on ferme la connexion à mysql
mysql_close();
?>
0
macgawel Messages postés 664 Date d'inscription mercredi 7 mai 2008 Statut Membre Dernière intervention 1 novembre 2008 89 > Kevinteger Messages postés 9 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 28 mai 2008
28 mai 2008 à 11:23
Ligne 8 :
$req = mysql_query($sql) or die('Erreur SQL !.$sql.mysql_error());

Il manque l'apostrophe fermante.
Essaye avec ça :
$req = mysql_query($sql) or die('Erreur SQL !'.$sql.mysql_error());


PS : je l'ai vu grâce à la coloration syntaxique sur Notepad++. Tu utilises quel logiciel ?
0
Kevinteger Messages postés 9 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 28 mai 2008 > macgawel Messages postés 664 Date d'inscription mercredi 7 mai 2008 Statut Membre Dernière intervention 1 novembre 2008
28 mai 2008 à 11:50
J'utilise context...
0
sly-bzh Messages postés 415 Date d'inscription jeudi 10 janvier 2008 Statut Membre Dernière intervention 5 décembre 2009 118 > macgawel Messages postés 664 Date d'inscription mercredi 7 mai 2008 Statut Membre Dernière intervention 1 novembre 2008
28 mai 2008 à 12:14
Oups je l'ai laissée passée celle-là...
Comme quoi notepad++ il n'y a que ça de vrai ;)
0
sly-bzh Messages postés 415 Date d'inscription jeudi 10 janvier 2008 Statut Membre Dernière intervention 5 décembre 2009 118
27 mai 2008 à 23:44
Es-tu sûr de bien avoir un champ Terme et un champ Definition (attention à la majuscule en début de mot) ?
Je te mets le code pour avoir : entre un terme et sa définition mais ça tu aurais pu le trouver tout seul ;)
Et d'ailleurs en passant je te modifie un petit peu le code pour l'affichage, peut être que c'est là que ça plante...
<?php // on se connecte à MySQL
$db = mysql_connect('sql.free.fr', 'k.dejoye', '********');
// on sélectionne la base
mysql_select_db('k_dejoye',$db);
// on crée la requête SQL
$sql = "SELECT Terme,Definition FROM k_dejoye WHERE Terme LIKE '%$Recherche%'";
// on envoie la requête
$req = mysql_query($sql) or die('Erreur SQL !.$sql.mysql_error());
// on fait une boucle qui va faire un tour pour chaque enregistrement
while($data = mysql_fetch_array($req))
// on affiche les informations de la table
{
echo $data['Terme'].":".$data['Definition']." <br/>";
}
// on ferme la connexion à mysql
mysql_close();
?>


edit : Et tant qu'à faire je te remplace aussi ton mysql_fetch_assoc par un mysql_fetch_array que je préfère personnellement (après les gouts et les couleurs...).
0
Kevinteger Messages postés 9 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 28 mai 2008
28 mai 2008 à 11:16
J'ai toujours mon message d'erreur et mes champs dans ma table sont bien Terme et Definition...
toujours ce probleme de T_String à la ligne 13...
0
Kevinteger Messages postés 9 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 28 mai 2008 > Kevinteger Messages postés 9 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 28 mai 2008
28 mai 2008 à 12:13
J'ai résolu mon probleme:

<?php // on se connecte à MySQL
$Recherche=$_POST['Recherche'] ;
//echo $Recherche;
$db = mysql_connect('k.dejoye.sql.free.fr', 'k.dejoye', '20042006');
// on sélectionne la base
mysql_select_db('k_dejoye',$db);
// on crée la requête SQL
//$sql = "SELECT * FROM Glossaire WHERE 'Terme' LIKE '%$Recherche%'";
$sql = "SELECT * FROM Glossaire WHERE Terme like '$Recherche'";
// on envoie la requête
$req = mysql_query($sql) or die('Erreur SQL'.$sql.mysql_error());
// on fait une boucle qui va faire un tour pour chaque enregistrement
while($data = mysql_fetch_array($req))
{
echo $data['Terme'].":".$data['Definition'];
}
// on ferme la connexion à mysql
mysql_close();
?>

Un autre souci se pose maintenant, je m'explique:
j'ai une liste de mots.Et dans cette liste, il est possible d'avoir de mots récurrents comme par exemple pomme et pomme de pain.
Avec mon code, si je recherche la définition de "pomme", il me donne que la première définition qu'il trouve. Je souhaiterais qu'il m'affiche toutes les définition avec pomme comme mot clé...
Autre souci: si je ne respecte pas exactement la casse de ma table, il ne m'affiche pas le terme et sa définition...
Merci pour tout!!!
0
macgawel Messages postés 664 Date d'inscription mercredi 7 mai 2008 Statut Membre Dernière intervention 1 novembre 2008 89 > Kevinteger Messages postés 9 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 28 mai 2008
28 mai 2008 à 12:19
Avec mon code, si je recherche la définition de "pomme", il me donne que la première définition qu'il trouve. Je souhaiterais qu'il m'affiche toutes les définition avec pomme comme mot clé...
Solution :
Reprends le $sql = "SELECT * FROM Glossaire WHERE 'Terme' LIKE '%$Recherche%'"; que tu as mis en commentaire (les % en SQL permettent de sélectionner tous les termes comprennant <Recherche>).
Par contre, dans ce cas tu récupèreras aussi 'Pommette'. Solution : dans ton while, rajoute un test avant de faire ton echo.

Autre souci: si je ne respecte pas exactement la casse de ma table, il ne m'affiche pas le terme et sa définition...
Le plus simple :
Dans la base, tu mets tout en majuscule, et tu fais :
$Recherche=strtoupper($_POST['Recherche'] );
0
Kevinteger Messages postés 9 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 28 mai 2008 > macgawel Messages postés 664 Date d'inscription mercredi 7 mai 2008 Statut Membre Dernière intervention 1 novembre 2008
28 mai 2008 à 12:48
Que fait cette fonction "strtoupper"?
Cela veut dire que tout ce qui est dans ma base de donnée apparaitra en majuscule?
Pour le % ca marche il ne me reste plus que ce problème de casse...
0
macgawel Messages postés 664 Date d'inscription mercredi 7 mai 2008 Statut Membre Dernière intervention 1 novembre 2008 89 > Kevinteger Messages postés 9 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 28 mai 2008
28 mai 2008 à 12:57
Description

string strtoupper(string string )

strtoupper retourne string avec tous ses caractères alphabétiques mis en majuscule. 


En fait, ce n'est pas le contenu de ta BDD qui apparaîtra en majuscule.
Tu prends la variable $Recherche et tu la passes en majuscule.

Exemple :
Quelqu'un fait une recherche sur 'PoMme'
Tu mets strtoUpper('PoMme') = 'POMME' dans $Recherche
Tu fais ton SELECT.

Seule condition : il faut que le champs de ta table soit en majuscule.

Il y a moyen de faire la même chose directement dans la requête, mais comme c'est un calcul, ta requête sera beaucoup plus longue à passer :
SELECT * FROM ... WHERE <gras>UPPER(TonChamp) like UPPER('%$Recherche%')</gras>
0
Kevinteger Messages postés 9 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 28 mai 2008
28 mai 2008 à 13:08
Merci pour tout!!!!
Merci tout le monde!!!!
0