OVH Cloud OVH Cloud

Apostrophes dans un formulaire ?

8 réponses
Avatar
l'atelier Ho
Bonjour,

Je débute en PHP et j'ai un petit problème d'apostrophe.
Après le query suivant, j'affiche mes données dans un
formulaire.

$requete = "select ID, FAMILLE, GROUPE, NO_ART, DESI,
TEXTE, PRIX, IMAGE from produits where ID=$id";
$res = mysql_query($requete) or die (mysql_error());
$row = mysql_fetch_array($res);
extract($row);

Malheureusement la donnée est tronqué à la hauteur de
l'apostrophe.

Si j'essaye avec addSlasches après la requête, j'ai une
erreur dans le script.

Voici un extrait du formulaire:

<form onSubmit="return CheckForm(this)" method=post
action="<?= $_SERVER ['PHP_SELF'] ?>" >
<center><br>
<table border=0>
..
..
<input type='text' name="desi" value='<?= $DESI ?>'
size='60'>
..
..
</table>
<input type='submit' name=mode value='enregistrer'>
<input type='submit' name=mode value='effacer'>
<input type=hidden name=last_id value='<?= $id ?>'>
</center>
</form>

Lorsque je click sur enregistrer, je recharge le même scrip
qui passe dans le boucle enregistrer comme suit:

if($mode == "enregistrer")
{
$mes = "Fiche modifiée et enregistrée!";
$id = $last_id;
// Enregistrement des modifications
$req = mysql_query("UPDATE produits SET
FAMILLE='$famille', GROUPE='$groupe', DESI='$desi',
TEXTE='$texte', PRIX='$prix', IMAGE='$image' WHERE
ID=$id");
if (!$req) {
echo "<B>Error ".mysql_errno()." :</B>
".mysql_error()."";
exit;
}
$aff_rows = mysql_affected_rows();
}

Voilà, si maintenant quelqu'un peut me donner un lien pour
que puisse faire école et mieux comprendre ces problème
d'aspostrophes.

Meilleures salutations

Otto

8 réponses

Avatar
Guillaume Bouchard
l'atelier Ho wrote:
Bonjour,

Je débute en PHP et j'ai un petit problème d'apostrophe.
Après le query suivant, j'affiche mes données dans un
formulaire.

$requete = "select ID, FAMILLE, GROUPE, NO_ART, DESI,
TEXTE, PRIX, IMAGE from produits where ID=$id";


déjà il y a une enorme faille de securité la dedans. Recherche dans els
archive le liens que je donne souvent vers un article concernant les
magic quotes.

$res = mysql_query($requete) or die (mysql_error());


$res = mysql_query($requete) or die (mysql_error().$mysql_query);
Plus mieux.

extract($row);


Ca c'est degeu, mais bon...

Malheureusement la donnée est tronqué à la hauteur de
l'apostrophe.


Regarde la source html, tu vera que non, c'est juste l'html qui
interprete l'apostrophe comme fin de champs formulaire.

Si j'essaye avec addSlasches après la requête, j'ai une
erreur dans le script.

Voici un extrait du formulaire:

<form onSubmit="return CheckForm(this)" method=post
action="<?= $_SERVER ['PHP_SELF'] ?>" >


<form onsubmit="return checkform(this);' method="POST" action=<?php echo
$_SERVER ['PHP_SELF'] ?>" >


<center><br>
<table border=0>


Bon, heureusement que c'est pas un NG html, ou je te lincherais :)

<input type='text' name="desi" value='<?= $DESI ?>'
size='60'>


<input type="text" name="desi" id="desi" value="<?php echo
htmlentites($DESI); ?>" />

C'est le htmlentites qui change tout.

<input type='submit' name=mode value='enregistrer'>


<input type='submit' name="mode" id="mode" value="enregistrer" />
...


Lorsque je click sur enregistrer, je recharge le même scrip
qui passe dans le boucle enregistrer comme suit:

if($mode == "enregistrer")


if($_POST['mode'] == 'enregistrer')


{
$mes = "Fiche modifiée et enregistrée!";
$id = $last_id;
// Enregistrement des modifications
$req = mysql_query("UPDATE produits SET
FAMILLE='$famille', GROUPE='$groupe', DESI='$desi',
TEXTE='$texte', PRIX='$prix', IMAGE='$image' WHERE
ID=$id");


$sql = "...";
$res = mysql_query($res) or die(mysql_error().$sql);


Bonne chance.

--
Guillaume.

Avatar
Nudrema
l'atelier Ho wrote:

Bonjour,

- Je débute en PHP et j'ai un petit problème d'apostrophe.
- La donnée est tronqué à la hauteur de l'apostrophe.
- Si j'essaye avec addSlasches après la requête, j'ai une
erreur dans le script.

Voilà, si maintenant quelqu'un peut me donner un lien pour
que puisse faire école et mieux comprendre ces problèmes
d'aspostrophes.


Apparemment, ton problème est dû au fait que tu n'échappes pas
tes valeurs /avant/ de les intégrer dans ta requêtes (peut-être
que la directive magic-quotes-gpc est désactivée chez toi, tu
peux le savoir via la fonction get_magic_quotes_gpc())

Donc, a priori, je dirais que tu dois passer addslashes (ou
mieux, si tu utilises mysql, mysql_escape_string) sur chacune des
données que tu introduis dans ta requête :

$id = (integer)$_POST['id'];
$famille = mysql_escape_string($_POST['famille]);
[...]
"UPDATE produits SET FAMILLE='$famille', [...] WHERE id=$id");

Pour des raisons de sécurité, n'oublie pas aussi d'utiliser les
tableaux superglobaux plutôt que de compter sur register-globals
(d'ailleurs désactivé par défaut depuis 4.2)...

++

--
Nudrema (S.F.)

http://tw.o0o.ch

Avatar
Zouplaz
l'atelier Ho - :

Bonjour,

Je débute en PHP et j'ai un petit problème d'apostrophe.
Après le query suivant, j'affiche mes données dans un
formulaire.

$requete = "select ID, FAMILLE, GROUPE, NO_ART, DESI,
TEXTE, PRIX, IMAGE from produits where ID=$id";
$res = mysql_query($requete) or die (mysql_error());
$row = mysql_fetch_array($res);
extract($row);

Malheureusement la donnée est tronqué à la hauteur de
l'apostrophe.



Je suppose que ta requête produit une valeur texte genre
Robe "Super nana"

et que dans ton champ texte tu vois uniquement Robe.

Si tu regardes le code html généré tu verras que ça donne
<input value="Robe "Super nana"" ... >

Donc emmellage de pinceau, les "" de ta chaine texte devraient être encodé
en utilisant les entities, normalement &quot;

Tu devrais donc générer :
<input value="Robe &quot;Super nana&quot;" ... >

M'enfin, suis pas sur, quelqu'un peut confirmer ou infirmer ?

Avatar
Stephane Pineau
Le 13 Feb 2004 23:49:24 GMT, "l'atelier Ho" écrivait:


Voilà, si maintenant quelqu'un peut me donner un lien pour
que puisse faire école et mieux comprendre ces problème
d'aspostrophes.



http://steph.pineau.free.fr/php/index.php?LNK=PERR
Section "Contenu tronqué d'une variable récupérée en tant que valeur dans un
champ de formulaire" vers la fin de la page.

Cdlt,
Stéph'

--
AcroDict : Dictionnaire francophone des acronymes informatiques
<URL:http://www.teaser.fr/~spineau/acrodict/index.htm>
PHP Page : Script PHP3 Gratuits (Forum, Gestionnaires BDD, etc..)
<URL:http://steph.pineau.free.fr/php/index.php>

Avatar
l'atelier Ho
In article , L'atelier Ho
wrote:
<input type='text' name="desi" value='<?= $DESI ?>'
size='60'>

J'ai trouvé, j'ai remplacé les apostrophes par des

guillemets ' -> "

Sorry pour le dérangement

Meilleures salutations et bon weekend à tous

Otto

Avatar
Frogger
Salut Stéphane,

j'aimerais savoir si tu as une source de ton site Web style en relation avec
php.net?

C'est intéressant, car moi aussi ça fait longtemps que je programme en PHP
et je savais que l'HTML prend les apostrophes ou bien les guillemets pour
délimiter ses valeurs sauf que j'aimerais savoir laquelle est la plus
optimisée contre les erreurs.

Est-ce que PHP 4> & JavaScript 1.2> n'engendre pas de conflits?

Si tout est correct, je vais mettre à jour mon code.

Merci

"Stephane Pineau" a écrit dans le message de
news:
Le 13 Feb 2004 23:49:24 GMT, "l'atelier Ho" écrivait:


Voilà, si maintenant quelqu'un peut me donner un lien pour
que puisse faire école et mieux comprendre ces problème
d'aspostrophes.



http://steph.pineau.free.fr/php/index.php?LNK=PERR
Section "Contenu tronqué d'une variable récupérée en tant que valeur dans
un

champ de formulaire" vers la fin de la page.

Cdlt,
Stéph'

--
AcroDict : Dictionnaire francophone des acronymes informatiques
<URL:http://www.teaser.fr/~spineau/acrodict/index.htm>
PHP Page : Script PHP3 Gratuits (Forum, Gestionnaires BDD, etc..)
<URL:http://steph.pineau.free.fr/php/index.php>



Avatar
Christophe MERESSE
"Frogger" a écrit dans le message de
news:2h4%b.11689$

Est-ce que PHP 4> & JavaScript 1.2> n'engendre pas de conflits?


Aucun conflit possible quelque soit les version puisque le php est
interpreté coté serveur sans "savoir" qu'il genere
du javascript et que le javascript est interprété coté client sans "savoir"
qu'il a été généré par du php.

A+
Christophe


Si tout est correct, je vais mettre à jour mon code.

Merci

"Stephane Pineau" a écrit dans le message de
news:
Le 13 Feb 2004 23:49:24 GMT, "l'atelier Ho"
écrivait:




Voilà, si maintenant quelqu'un peut me donner un lien pour
que puisse faire école et mieux comprendre ces problème
d'aspostrophes.



http://steph.pineau.free.fr/php/index.php?LNK=PERR
Section "Contenu tronqué d'une variable récupérée en tant que valeur
dans


un
champ de formulaire" vers la fin de la page.

Cdlt,
Stéph'

--
AcroDict : Dictionnaire francophone des acronymes informatiques
<URL:http://www.teaser.fr/~spineau/acrodict/index.htm>
PHP Page : Script PHP3 Gratuits (Forum, Gestionnaires BDD, etc..)
<URL:http://steph.pineau.free.fr/php/index.php>





Avatar
Stephane Pineau
Le 25 Feb 2004 19:08:14 GMT, "Frogger" écrivait:

j'aimerais savoir si tu as une source de ton site Web style en relation avec
php.net?


Je comprends pas bien ta question, peux-tu la reformuler ?

C'est intéressant, car moi aussi ça fait longtemps que je programme en PHP
et je savais que l'HTML prend les apostrophes ou bien les guillemets pour
délimiter ses valeurs sauf que j'aimerais savoir laquelle est la plus
optimisée contre les erreurs.


Il n'y a pas de solutions miracles. Il y a toujours des cas particuliers
qu'il faut penser à gérer. La seule recommandation que je peux te faire
c'est de n'utiliser qu'un type de quotes pour le php et l'autre uniquement
pour le HTML. Ca évite par exemple dans la plupart des cas de devoir
échapper les quotes quant du génère du HTML depuis php ou inversement quand
tu inclu du code php au sein du html.

Est-ce que PHP 4> & JavaScript 1.2> n'engendre pas de conflits?


Pas que je sache, mais je n'utilise pas le JS.

Cdlt,
Stéph'


--
AcroDict : Dictionnaire francophone des acronymes informatiques
<URL:http://www.teaser.fr/~spineau/acrodict/index.htm>
PHP Page : Script PHP3 Gratuits (Forum, Gestionnaires BDD, etc..)
<URL:http://steph.pineau.free.fr/php/index.php>