Problème avec les apostrophes !!!

mdpubs
Invité n'ayant pas de compte PHPfrance

16 févr. 2011, 16:57

Bonjour,

Après recherche sur Internet je ne trouve pas de réponse à mon problème. En fait, les données que j'affiche de ma base de données, ne s'affichent pas dès qu'il y un titre avec "l apostrophe", exemple : "L'art dans les écoles", se bloque à "L'". Alors j'ai vu avec "addslashes()", mais je sais pas comment l'intégrer dans ma page, car j'ai tout essayé et ça marche pas ! En fait, c'est juste sur la variable "$title" que j'en ai besoin, car pour les autres variables, il n'y a pas d'apostrophe. Que dois-je ajouter et où ? Je suis dans l'affichage d'un tableau "mysql_fetch_row". Si une personne peut m'aider, voici mon code... :
<?php

include ("connexion.php");

$mysql_link = mysql_connect($host', $username, $password');
mysql_select_db($database');

$sql = ("SELECT banner, title, date, category, username FROM matable ORDER BY date");

$result = mysql_query($sql, $mysql_link) or die($sql.'<br/>'.mysql_error());

while($resultat = mysql_fetch_row($result)){

$banner = $resultat[0];
$title = $resultat[1];
$date = $resultat[2];
$category = $resultat[3];
$username = $resultat[4];

echo "<div style='text-align:justify'><img src='$resultat[0]' alt='$resultat[1]' title='<fieldset><span class=cadre>Ajoutee le :</span> <span class=roseann4>$resultat[2]</span> | <span class=cadre>Titre de la Video :</span><span class=roseann4> $resultat[1]</span> | <span class=cadre>Categorie de la Video :</span><span class=roseann4> $resultat[3]</span></fieldset><br /><center><a class=parten10 href=http://www.abracada.com/conscience/$res ... tat[4].php target=_self><b>Voir la vid&eacute;o</b></a></center>' /></div>";

}
mysql_close();
?>

ViPHP
ViPHP | 5462 Messages

16 févr. 2011, 17:04

separer ton PHP de ton HTML, c'est plus du PHP dans le HTML que du HTML dans le PHP, sépare bien ton code, l'a ta juste 1 seul echo c'est pour ca que t'as des soucis

Mammouth du PHP | 737 Messages

16 févr. 2011, 18:03

Bonjour,

La remarque de stealth35 est juste.

Concernant ton problème, tu dois utiliser des addslashes dans l'insert et des stripslashes en sortie.

D'autre part, tu devrais concaténer tes variables et utiliser des simples quotes à l'ouverture de ton echo de façon à pouvoir utiliser les guillemets.
Ainsi :
echo 'blablablabalbal';
et par exemple
href=http://www.abracada.com/conscience/$resultat[3]/$resultat[4].php target=_self
devient
href="http://www.abracada.com/conscience/'.$resultat[3].'/'.$resultat[4].'.php" target="_self"
ce qui me semble plus propre.

Mega
;)
Dyslexics are teople poo

ViPHP
ViPHP | 3607 Messages

16 févr. 2011, 18:10

Concernant ton problème, tu dois utiliser des addslashes dans l'insert et des stripslashes en sortie.
Là je dis non!
C'est du bidouillage et ça ne sert à rien!
On utilise les fonctions d'échappements dédiées, comme mysql_real_escape_string() pour mysql!
Et on fait rien en sortie! (sauf un htmlspecialchars éventuel)

ViPHP
ViPHP | 5462 Messages

16 févr. 2011, 18:30

Concernant ton problème, tu dois utiliser des addslashes dans l'insert et des stripslashes en sortie.
Là je dis non!
C'est du bidouillage et ça ne sert à rien!
On utilise les fonctions d'échappements dédiées, comme mysql_real_escape_string() pour mysql!
Et on fait rien en sortie! (sauf un htmlspecialchars éventuel)
je plussoie :wink:

mdpubs
Invité n'ayant pas de compte PHPfrance

16 févr. 2011, 18:31

Merci pour vos réponses :)

Le fait de séparer les echo, ne change rien il me semble..., Mais je l'ai fait et bien entendu, ça n'apporte rien à mon problème :)

Pareil pour le fait de concaténer, c'est une technique, mais qui n'apporte rien à mon problème. Ceci dit, merci pour cette technique, car je la voyais, mais je ne l'avais pas associé au quote, donc c'est cool :)

Je pense que le mieux est effectivement d'utiliser la fonction mysql_real_escape_string(), mais peut-on me dire comment l'intégrer dans mon code, car j'ai essayé plein de chose et ça marche pas !!!

Merci si vous pouvez me guider :)

A+
Et merci encore :)

ViPHP
ViPHP | 5462 Messages

16 févr. 2011, 18:35

mysql_real_escape_string c'est uniquement lors de l'insertion de données, la ton code c'est de la recuperation, verifie t'es valeur dans phpmyadmin, mais aussi dans la source HTML de ton fichier (clique droit -> afficher la source (dépend du navigateur))

mdpubs
Invité n'ayant pas de compte PHPfrance

16 févr. 2011, 18:47

Mes données dans la bases fonctionnent très bien sur d'autres pages php. Les apostrophes sont respectés.

Donc, c'est juste sur cette page (ce code), que j'ai le problème.

En fait ce code est incrusté dans un mootools (carousel), donc il y a du javascript. Est-ce que c'est cela qui pose problème ? Peut-être, voir même sûrement d'ailleurs en y pensant, mais comment faire ????

....

ViPHP
ViPHP | 5462 Messages

16 févr. 2011, 18:51

Mes données dans la bases fonctionnent très bien sur d'autres pages php. Les apostrophes sont respectés.

Donc, c'est juste sur cette page (ce code), que j'ai le problème.

En fait ce code est incrusté dans un mootools (carousel), donc il y a du javascript. Est-ce que c'est cela qui pose problème ? Peut-être, voir même sûrement d'ailleurs en y pensant, mais comment faire ????

....
affiche la en lien direct et regarde si la source HTML correspond a ce que tu veux

mdpubs
Invité n'ayant pas de compte PHPfrance

16 févr. 2011, 19:09

En fait dans la source, ça apparaît bien, mais en rouge et sur la page html, ça n'apparait pas.

Exemple pour "n'apparait pas" = dans la source "n'apparait pas" et sur la page "n'"

Donc il me faut une fonction pour que les infos après les l' c' qu', etc... apparaissent et les ' ne bloquent pas...

ViPHP
ViPHP | 3607 Messages

16 févr. 2011, 19:15

Si tu utilises tes données dans du js (et que tu utilises l'encodage utf8 -ça peut-être une bonne occasion d'y passer ;) - )...
Utilise json_encode() pour faire passer tes données
Exemple:
<?php

$tab = array("j'y vais!","j'aime les chats");

$val = 'bla bla " bla bla \' bla bla ';

?>
<script type="text/javascript">

var monObj = <?php echo json_encode($tab);?> ;

var maChaine = <?php echo json_encode($val);?> ;

</script>

ViPHP
ViPHP | 5462 Messages

16 févr. 2011, 19:24

En fait dans la source, ça apparaît bien, mais en rouge et sur la page html, ça n'apparait pas.

Exemple pour "n'apparait pas" = dans la source "n'apparait pas" et sur la page "n'"

Donc il me faut une fonction pour que les infos après les l' c' qu', etc... apparaissent et les ' ne bloquent pas...
copie ta source pour voir

mdpubs
Invité n'ayant pas de compte PHPfrance

16 févr. 2011, 20:13

excuse jojolapine, en fait c'est pas intégré entre <javascript> et </javascript>... mais comme c'est un carousel, c'est un fichier externe en javascript qui gère le carousel. L'intégration de en PHP se fait lui dans un fichier en php... Ce que je voulais dire, c'est que cette histoire d'apostrophe pose peut-être problème par l'intervention d'un javascript...

Sinon voici une des réponse de la base de données. On constate que : "L'instant présent" apparait bien dans la source, alors qu sur la page, elle n'apparait pas ??? :

<div style='text-align:justify'><img src='http://www.abracada.com/conscience/YJTu ... resent.jpg' alt='Vivre l'instant présent' title='<fieldset><span class=cadre>Ajoutee le :</span> <span class=roseann4>2011-01-05</span> | <span class=cadre>Titre de la Video :</span><span class=roseann4> Vivre l'instant présent</span> | <span class=cadre>Categorie de la Video :</span><span class=roseann4> Videos-Conscience</span></fieldset><br /><center><a class=parten10 href=http://www.abracada.com/conscience/Vide ... resent.php target=_self><b>Voir la vid&eacute;o</b></a></center>' /></div>

ViPHP
ViPHP | 5462 Messages

16 févr. 2011, 20:17

tes quote de tag HTML sont aussi des ', faut bien séparer ton code sinon tu va pas t'en sortir

c'est pas :
<?php
    $test = 'blabla';
    echo '<p>' . $test . '</p>';
?>
c'est :
<?php
    $test = 'blabla';
?>
<p><?php echo $test; ?></p>

mdpubs
Invité n'ayant pas de compte PHPfrance

16 févr. 2011, 20:41

ça y est j'ai trouvé !!!!!!!! C'était bien cette histoire de quote.....

Par rapport à mon premier code, j'ai ajouté un antislash dans la ligne précise qui correspond aux infos d'une donnée du carousel (un peu comme dans une ligne XML...).

Donc voici l'ancien code :
echo "<div style='text-align:justify'><img src='$resultat[0]' alt='$resultat[1]' title='<fieldset><span class=cadre>Ajoutee le :</span> <span class=roseann4>$resultat[2]</span> | <span class=cadre>Titre de la Video :</span><span class=roseann4> $resultat[1]</span> | <span class=cadre>Categorie de la Video :</span><span class=roseann4> $resultat[3]</span></fieldset>
<center><a class=parten10 href=http://www.abracada.com/conscience/$res ... tat[4].php target=_self><b>Voir la vid&eacute;o</b></a></center>' /></div>";
Et le nouveau avec l'antislash positionné au bon endroit et précisément :
echo "<div style='text-align:justify'><img src='$resultat[0]' alt='$resultat[1]' title=\"<fieldset><span class=cadre>Ajoutee le :</span> <span class=roseann4>$resultat[2]</span> | <span class=cadre>Titre de la Video :</span><span class=roseann4> $resultat[1]</span> | <span class=cadre>Categorie de la Video :</span><span class=roseann4> $resultat[3]</span></fieldset><br /><center><a class=parten10 href=http://www.abracada.com/conscience/$res ... tat[4].php target=_self><b>Voir la vid&eacute;o</b></a></center>\" /></div>";
Alors merci beaucoup à tous, car ce sont vos directions qui m'ont permis de trouver... :) Plus de problème avec les apostrophes maintenant... :)


A+
William