Récupération apostrophe

Steve -  
 Steve -
Bonjour,

Dans l'administration de mon script s'affiche tout ce qui est dans la base de donnée
et pour chaque ligne, j'ai la possibilité de la modifier.

Quand je clique sur modifier, la ligne qui m'intéresse s'affiche mais pas au complet
dès qu'il y a un apostrophe il ne l'affiche plus, (grrrrrr...)

je pense que pour éviter ça il faudrait placer un stripslasches... enfin je suppose..
mais si c'est ça je ne sais pas ou......

ci-dessous la partie de mon script qui permet la modification

Par avance merci de votre aide
Yule

ps:
on m'a conseillé value=\'$description\' et value=\"$description\"
dans cette partie du script (case 4 partie echo) et c'est sans succès !

je vais mettre en dessous de ces lignes le script au complet peut-être ai-je fais une
erreur ailleurs.

Merci d'avance de votre aide et surtout d'avoir pris le temps de me lire
cordialement

**************************************************
Partie du script "modifier les résultat" => case 4
**************************************************
break;
case 4: // modifier des resultats
if ($op4)
{
$query="UPDATE $table SET titre='$titre', url='$url', description='$description', mots='$mots' WHERE id='$id'";
$res=mysql_query($query);
if ($res)
{
echo"<center><h4>Entrée modifiée</h4></center>";
}
else
{
echo"<center><h4>Erreur</h4></center>";
};
};
echo"<table width='0%' cellpadding='5' cellspacing='0' border='0' align='center' bgcolor='#CCCCCC'>
<form name='modifier' action='admin.php?task=4' method='post'>
<tr>
<td colspan='2' align='center'><h2>Modifier</h2></td>
</tr>
<tr>
<td align='right'>Id</td>
<td>$id</td>
</tr>
<tr>
<td align='right'>Titre</td>
<td><input type='text' name='titre' value='$titre'></td>
</tr>
<tr>
<td align='right'>Url</td>
<td><input type='text' name='url' value='$url'></td>
</tr>
<tr>
<td align='right'>Description</td>
<td><input type='text' name='description' value='$description'></td>
</tr>
<tr>
<td align='right'>Mots clefs</td>
<td><input type='text' name='mots' value='$mots'></td>
</tr>
<tr>
<td>&nbsp;</td>
<td>
<input type='hidden' name='id' value='$id'>
<input type='submit' name='op4' value='Modifier'></td>
</tr>
</form>
</table>";

*****************************************
Script admin en totalité

<?php
$host="localhost";
$user="*****";
$pass="******";
$base="******";
$table="recherche";

$bdd=@mysql_connect($host,$user,$pass);
@mysql_select_db($base,$bdd);

if (!$bdd)
{
echo"<center><h4>Impossible de se connecter à la base de données.</h4></center>";
exit;
};

echo "<table align='center'><tr><td>
<H2>Moteur interne</H2>
<li><A HREF='admin.php?task=1'>ajouter une entrée dans la base</A></li><br>
<li><A HREF='admin.php?task=2'>recherche dans la base</A></li>
</td></tr></table>
<hr color='#000000'>";

switch($task)
{
case 1: // ajouter une entrée dans la base
if ($op1)
{
$query="INSERT INTO $table VALUES ('','$titre','$url','$description','$mots')";
$res=mysql_query($query);
if ($res)
{
echo"<center><h4>Entrée ajoutée</h4></center>";
}
else
{
echo"<center><h4>Erreur</h4></center>";
};
};

echo"<table width='0%' cellpadding='5' cellspacing='0' border='0' align='center' bgcolor='#CCCCCC'>
<form name='ajouter' action='admin.php?task=1' method='post'>
<tr>
<td colspan='2' align='center'><h2>Ajouter une entrée</h2></td>
</tr>
<tr>
<td align='right'>Titre</td>
<td><input type='text' name='titre'></td>
</tr>
<tr>
<td align='right'>Url</td>
<td><input type='text' name='url'></td>
</tr>
<tr>
<td align='right'>Description</td>
<td><input type='text' name='description'></td>
</tr>
<tr>
<td align='right'>Mots clefs</td>
<td><input type='text' name='mots'></td>
</tr>
<tr>
<td>&nbsp;</td>
<td><input type='submit' name='op1' value='Ajouter'></td>
</tr>
</form>
</table>";
break;
case 2: // recherche dans la base
if ($op2)
{
$query="SELECT * FROM $table WHERE id IS NOT NULL";
if ($titre)
{
$query.=" AND titre LIKE '$titre%'";
};
if ($url)
{
$query.=" AND url LIKE '$url%'";
};
if ($description)
{
$query.=" AND description LIKE '%$description%'";
};
if ($mots)
{
$query.=" AND mots LIKE '%$mots%'";
};
$query.=" ORDER BY titre";
$res=mysql_query($query);

echo"<table width='0%' cellpadding='5' cellspacing='1' border='0' align='center'>";
echo"<tr><td bgcolor='#CCCCCC' align='center'><b>Id</b></td><td bgcolor='#CCCCCC' align='center'><b>Titre</b></td><td bgcolor='#CCCCCC' align='center'><b>Url</b></td><td bgcolor='#CCCCCC' align='center'><b>Description</b></td><td bgcolor='#CCCCCC' align='center'><b>Mots</b></td><td>&nbsp;</td><td>&nbsp;</td></tr>";

while($val=mysql_fetch_array($res,$bdd))
{
$id = $val['id'];
$titre = $val['titre'];
$url = $val['url'];
$description = $val['description'];
$mots = $val['mots'];
echo"<tr><td bgcolor='#CCCCCC'>".$id."</td><td bgcolor='#CCCCCC'>".$titre."</td><td bgcolor='#CCCCCC'>".$url."</td><td bgcolor='#CCCCCC'>".$description."</td><td bgcolor='#CCCCCC'>".$mots."</td><td bgcolor='#CCCCCC'><A HREF='admin.php?task=4&id=$id&titre=$titre&url=$url&description=$description&mots=$mots'>modifier</A></td><td bgcolor='#CCCCCC'><A HREF='admin.php?task=3&id=$id'>effacer</A></td></tr>";
};

echo"</table><br>";

};
echo"<table width='0%' cellpadding='5' cellspacing='0' border='0' align='center' bgcolor='#CCCCCC'>
<form name='recherche' action='admin.php?task=2' method='post'>
<tr>
<td colspan='2' align='center'><h2>Rechercher</h2></td>
</tr>
<tr>
<td align='right'>Titre</td>
<td><input type='text' name='titre'></td>
</tr>
<tr>
<td align='right'>Url</td>
<td><input type='text' name='url'></td>
</tr>
<tr>
<td align='right'>Description</td>
<td><input type='text' name='description'></td>
</tr>
<tr>
<td align='right'>Mots clefs</td>
<td><input type='text' name='mots'></td>
</tr>
<tr>
<td>&nbsp;</td>
<td><input type='submit' name='op2' value='Rechercher'></td>
</tr>
</form>
</table>";
break;
case 3: // test de suppression des resultats
echo"<table align='center'><tr><td>Vous êtes sûr ?<li><A HREF='admin.php?task=5&id=$id'>OUI<A/></li><li><A HREF='javascript:history.back();'>Annuler<A/></li></td></tr></table>";
break;
case 4: // modifier des resultats
if ($op4)
{
$query="UPDATE $table SET titre='$titre', url='$url', description='$description', mots='$mots' WHERE id='$id'";
$res=mysql_query($query);

if ($res)
{
echo"<center><h4>Entrée modifiée</h4></center>";
}
else
{
echo"<center><h4>Erreur</h4></center>";
};
};
echo"<table width='0%' cellpadding='5' cellspacing='0' border='0' align='center' bgcolor='#CCCCCC'>
<form name='modifier' action='admin.php?task=4' method='post'>
<tr>
<td colspan='2' align='center'><h2>Modifier</h2></td>
</tr>
<tr>
<td align='right'>Id</td>
<td>$id</td>
</tr>
<tr>
<td align='right'>Titre</td>
<td><input type='text' name='titre' value='$titre'></td>
</tr>
<tr>
<td align='right'>Url</td>
<td><input type='text' name='url' value='$url'></td>
</tr>
<tr>

<td align='right'>Description</td>
<td><input type='text' name='description' value='$description'></td>
</tr>
<tr>
<td align='right'>Mots clefs</td>
<td><input type='text' name='mots' value='$mots'></td>
</tr>
<tr>
<td>&nbsp;</td>
<td>
<input type='hidden' name='id' value='$id'>
<input type='submit' name='op4' value='Modifier'></td>
</tr>
</form>
</table>";

break;
case 5:
$query="DELETE FROM $table WHERE id = '$id'";
$res=mysql_query($query);
if ($res)
{
echo"<center><h4>Entrée supprimée</h4></center>";
}
else
{
echo"<center><h4>Erreur</h4></center>";
};
break;
default:

echo "<center><h3>HELLO ;o)</h3></center>";

break;
}
mysql_close;
?>

7 réponses

RiKé
 
Tet que c une connerie mais essaie de doubler ton apostrophe par une methode de recherche/remplacement avant l'affichage

champs_ok= replace (champs," ' "," '' ")
afficher champs_ok

(pour le script j'en sais rien, je le fais en VB)
0
Bruno
 
salut steve

si j'ai bien suivi ton probleme : lorsque que ta variable $description = à une chaine de caractere comportant une apostrophe ca merde.
en faite cette apostrophe marque la fin de ta requete c'est pour ca que tu n'a pas la fin ta variable. il se passe la meme chose avec les doubles apostrophes.

j'ai planché moi aussi sur ce probleme pendant 1 semaine et j'ai trouvé une parade a cela en faite avant d'inserer la valeur de ta variable $description dans ta table tu vas lui faire un peu de menage et de changement en remplacent les apostrophes de la chaine par leur valeur en code ASCI qui est : chr(39)

Voici l'exemple que j'utilise dans mon script PHP:
(je t'ai remplace ma variable par ta variable $description normalement tu copies directement les 6 lignes suivantes et tu les colle avant ta requete INSERT ou UPDATE)

$descriptionN = trim($description);
$description = $descriptionN;
$apostrophe = $description;
$truc = str_replace( '\"',"''",$apostrophe);
$truc1 = str_replace( "\'",chr(39),$truc);
$description = $truc1;

mssql_query("insert into client (civil ..etc......values (\"$civil\")");

explication des 6 lignes:

ligne 1: trim($description) permet d'enlever les caracteres blancs devant et derriere la chaine
ligne2 : reinjecter $descriptionN dans $descrition
ligne3 : transfert de valeur entre variable
ligne4 : remplacement des doubles apostrophes (") par 2 simples ( ' ')
ligne 5 : remplacement des simples apostrophes par leur valeur ASCI chr(39)
ligne6: transfert de valeur entre $truc et $description

et voila tu te retrouve avec une chaine nettoyé , normalement ca marche bien si probleme ou mal comprehension de ma part de ton probleme envoie un mail sur : brucl@caramail.com

peut etre a bientot bon courrage je croise les doigts pour toi :))
0
Tittom Messages postés 422 Statut Membre 128
 
Je vois une solution simpliste mais qui peut ne pas te convenir au niveau design :

utilise un <textarea>$description</textarea> au lieu du <input...>.

En attendant de trouver une meilleure solution, ton script fonctionnera.

Tittom
0
Tittom Messages postés 422 Statut Membre 128
 
je crois que j'ai la solution à ton problème...

Pour résumer et si j'ai bien compris, la difficulté consiste à indiquer dans l'attribut value de l'élément HTML <INPUT> une valeur qui comporte des guillemets, et des apostrophes.

Si cette valeur ne contenait que des apostrophes, la valeur mise entre guillements serait correctement affichée.
Si cette valeur ne contenait que des guillemets, la valeur mise entre apostrophes serait correctement affichée.
Seulement donc, elle comporte les deux.

La réponse au problème est dans la recommandation HTML du W3C :
L'attribut value de l'élément <input> accepte des valeurs du type CDATA. Voici ce comment le W3C définit ce type de valeur :
"CDATA is a sequence of characters from the document character set and may include character entities"

Il suffit donc de remplacer les caractères spéciaux (en l'occurence les guillemets) par leur entité équivalente.

Voici le test que j'ai fait, réalisé avec succès :

=============== DEBUT DU CODE ===========
<?

$texte = "le spectacle &quot;L'oiseau et l'enfant&quot; est un bon spectacle";

?>
<html>
<head>
<title>Exemple</title>
</head>
<body>

<h1>formulaire </h1>
<form>
<pre>
Texte : <input type="text" name="val1" value="<? echo $texte; ?>">

</pre>
</form>

</body>
</html>
============ FIN DU CODE =============

Dans ton formulaire, tu as mis des apostrophes autour de $description.z
Pour que mon exemple fonctionne, il faut mettre des guillemets. Cependant, si tu trouves l'entité correspondant à l'apostrophe, c'est gagné pour toi : il suffit de remplacer (str_replace) les apostrophes par leur entité équivalente.

Reste à trouver l'entité apostrophe :p

J'espère que cela t'aidera

Tittom
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Tittom Messages postés 422 Statut Membre 128
 
Hum, je viens de trouver l'entité apostrophe en tapant "html entité apostrophe" sur le moteur de recherche de newsgroup http://groups.google.com

Il s'agit de l'entité &#146; (& # 1 4 6 ; <---- je le mets avec des espaces au cas où ça ne soit pas visible sans espaces...)

C'est donc gagné :
remplace les apostrophes par &#146; et les guillemets par &quot; avec str_replace , et tu n'auras plus de pb (normalement ;))

a+
Tittom
0
Bobinours Messages postés 2903 Statut Membre 504
 
Steve, t'en es où avec ton problème ?

Ca fait 3 jours que je cherche dans tout les sens pour trouver la solution idéale et apparement y'a en pas..

Je vais faire un Message avec tout ce que j'ai trouvé...

-= Bobinours =-
0
Steve
 
D'abord merci à vous tous pour votre aide

actuellement j'essaye une autre façon de proceder mais c'est pas encore gagné....

while ($i < $nb){ // On parcoure les résultats de la requête
$id = mysql_result($res,$i,"id");
$titre = mysql_result($res,$i,"titre");
$url = mysql_result($res,$i,"url");
$description = mysql_result($res,$i,"description");
$mots = mysql_result($res,$i,"mots");

$titre = stripslashes("$titre"); // Supression des / dans $titre
$mots = stripslashes("$mots"); // Supression des / dans $mots
$description = stripslashes("$description"); // Supression des / dans $description

Ca va venir......lol
Cordialement
Steve

0