Aller au contenu

Damned, une apostrophe


Sujets conseillés

Posté

Bonjour

Lutilisateur fait ses saisies dans un formulaire avec quelque chose comme ça :


<input type="text" name="...

Plus loin, mon code fait :


$nombreLignes = mysql_num_rows($result);

sur la table où sont enregistrées ces données.

Problème : quand les données saisies comportent une apostrophe, le num_rows se plante.

A votre avis, comment faire ? supprimer les apostrophes à la saisie ?

Merci par avance de votre aide.

Francois

Posté

Bonjour,

As-tu tenté un addslashes(mysql_num_rows($result)); ?

Ou encore un Addslashes lors de l'écriture en base de donnée, juste après la saisie.

ça parrait bête, mais sait-on jamais :)

Cordialement,

Posté

Bonjour,

Il n'y a aucune raison que ça plante sous prétexte qu'il y a des apostrophes. A mon avis, c'est que tes données sont mal enregistrées dès le départ.

Pour bien enregistrer les données, il faut les insérer avec mysql_real_escape_string(), pour échapper apostrophes, guillemets, etc.

Il faut aussi s'assurer que le serveur n'ajoute pas lui-même des slashes sur les données de formulaire, ce qui est généralement le cas sur les serveurs mutualisés, car pour des raisons de sécurité le paramètre magic_quotes_gpc est à On, auquel cas il faut d'abord supprimer ces slashes avec stripslashes() et ensuite faire l'inclusion avec mysql_real_escape_string().

Posté

bonjour et merci de vos réponses.

Vos réponses m'ouvrent des horizons très intéressants en présentant des fonctions dont j'ignorais l'existence.

Je vais travailler la-dessus; merci encore de votre aide.

Francois

Posté

Le problème ce n'est en effet pas le mysql_num_rows, mais le moment où tu fais ta requête. Il est obligatoire et indispensable d'utiliser mysql_real_escape_string sur toutes les données que tu insères dans une requête SQL, surtout si les données viennent de l'extérieur (une saisie utilisateur, mais de façon générale tout ce que ton script récupère: variables, cookies, headers...). Sinon ça t'ouvre à tes problèmes de sécurité très graves (injection SQL).

Alternativement, tu peux utiliser les fonctions PDO pour accéder à mysql, qui feront tout ça automatiquement si tu utilises la bonne syntaxe (avec des "placeholders" pour chaque variable, et le passage des variables séparément).

Jacques.

EDIT: typo

Posté

+1 Ernestine : la fonction mysql_real_escape_string()doit être utilisée pour toute valeur potentiellement dangereuse, c'est à dire renseignée par un internaute. Sinon il y a un risque d'injection MYSQL et de hack de la BD, puis du site.

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...