Bonjour,
C'est le désespoir total ! Je sais, le problème a été déjà traité maintes et maintes fois. J'ai trouvé une multitude de posts sur divers forums, mais jamais celle solutionnant mon problème. Et c'est pas faute d'avoir essayé !
J'ai créé une page 'artiste' assez basique dans laquelle s'affiche le nom, la bio et la discographie de l'artiste en question.
- Je récupère donc le nom d'artiste passé en variable d'url sous la forme '?name=prenom-nom'
- Je rajoute les espaces et les majuscules, tel que c'est formaté dans la BDD
- Je fais une recherche dans 3 colonnes de la BDD
- Enfin j'affiche le résultat.
Voici le code :
Ca marche très bien pour tous les artistes sauf si un apostrophe est présent dans le nom ou le prenom. J'ai essayé de remplacer l'apostrophe par deux apostrophes comme indiqué dans certains forum, sans succès.
Ce que je ne comprends pas, c'est que le résultat de
par exemple, en passant en url :
/?name=daddy%27s-groove
Autre bizarrerie, si je vais directement dans phpMyAdmin et que je fais une recherche sur le nom, en entrant exactement Daddy\'s Groove, tel qu'il est inscrit dans la BDD, la recherche ne mène à rien, mais il transforme la requete comme celà :
C'est à dire en rajoutant \' à ceux déjà existant. Donc je me demande si ce n'est pas une option à désactiver quelque part, peut-être dans php.ini ?
Quelqu'un aurait-il une explication ?
Merci !!
C'est le désespoir total ! Je sais, le problème a été déjà traité maintes et maintes fois. J'ai trouvé une multitude de posts sur divers forums, mais jamais celle solutionnant mon problème. Et c'est pas faute d'avoir essayé !
J'ai créé une page 'artiste' assez basique dans laquelle s'affiche le nom, la bio et la discographie de l'artiste en question.
- Je récupère donc le nom d'artiste passé en variable d'url sous la forme '?name=prenom-nom'
- Je rajoute les espaces et les majuscules, tel que c'est formaté dans la BDD
- Je fais une recherche dans 3 colonnes de la BDD
- Enfin j'affiche le résultat.
Voici le code :
$name = $_GET['name'];
$nameSpace = ucwords(str_replace('-', ' ', $name));
echo $nameSpace;
$reponseArtist = $bdd->query("SELECT * FROM nouvellePage WHERE artiste1 = '".$nameSpace."' OR artiste2 = '".$nameSpace."' OR artiste3 = '".$nameSpace."' ORDER BY date DESC LIMIT 1");
while ($dataArtist = $reponseArtist->fetch()){
if ($dataArtist['artiste1'] ==$nameSpace){
$bio = $dataArtist['bio1en'];
$photo = 1;
}
elseif($dataArtist['artiste2'] == $nameSpace){
$bio = $dataArtist['bio2en'];
$photo = 2;
}
else{
$bio = $dataArtist['bio3en'];
$photo = 3;
}
$artistLatestRef = $dataArtist['reference'];
}
Ca marche très bien pour tous les artistes sauf si un apostrophe est présent dans le nom ou le prenom. J'ai essayé de remplacer l'apostrophe par deux apostrophes comme indiqué dans certains forum, sans succès.
Ce que je ne comprends pas, c'est que le résultat de
echo $nameSpace;
avant d'envoyer la requete est au bon format, c'est à dire, identique à la valeur dans la BDD.par exemple, en passant en url :
/?name=daddy%27s-groove
echo $nameSpace;
renvoie bien Daddy\'s Groove, tel qu'il est inscrit dans la BDD. Et pourtant, la requête SQL ne renvoie rien. Pas même un message d'erreur.Autre bizarrerie, si je vais directement dans phpMyAdmin et que je fais une recherche sur le nom, en entrant exactement Daddy\'s Groove, tel qu'il est inscrit dans la BDD, la recherche ne mène à rien, mais il transforme la requete comme celà :
SELECT *
FROM `nouvellePage`
WHERE `artiste` LIKE '%Daddy\\''s Groove%'
C'est à dire en rajoutant \' à ceux déjà existant. Donc je me demande si ce n'est pas une option à désactiver quelque part, peut-être dans php.ini ?
Quelqu'un aurait-il une explication ?
Merci !!