Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/10/2011, 18h59   #1
Candidat au titre de Membre du Club
 
Homme
Étudiant
Inscription : octobre 2011
Messages : 35
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2011
Messages : 35
Points : 11
Points : 11
Par défaut Problème de type, PHPMyAdmin

Bonjour,
J'ai créé un PHP permettant de saisir et d'afficher des messages, au moyen d'un formulaire (input).
Les messages sont enregistrés dans la base de donnée, à l'aide d'une requête d'insertion.

Mon problème :
Sur PHPMyAdmin, j'ai configuré la colonne dans laquelle mes messages sont enregistrés comme cela :
Type : VARCHAR
Taille : 1000
L'insertion se déroule correctement tant que je ne met aucune apostrophe (tous les autres caractères ont l'air de passer). A la moindre apostrophe, PHPMyAdmin n'enregistre pas le message dans la base de données.

Ma question :
A quoi correspond la taille ? Au nombre maxi de caractères ?
Que dois-je mettre comme type pour que l'apostrophe ne bloque plus, tout en conservant un nombre intéressant de caractères ? (et si possible en pouvant toujours saisir des chiffres).

J'ai consulté de nombreux tutoriels, mais les réponses sont souvent vagues...

Merci d'avance.
Taratis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2011, 19h17   #2
Membre régulier
 
Homme Abdelilah amezghal
Développeur informatique
Inscription : février 2006
Messages : 56
Détails du profil
Informations personnelles :
Nom : Homme Abdelilah amezghal

Informations professionnelles :
Activité : Développeur informatique
Secteur : Tourisme - Loisirs

Informations forums :
Inscription : février 2006
Messages : 56
Points : 95
Points : 95
Salut,
le 1000 correspond au nombre de caractères effectivement
sinon ya un autre type : text

si ça coupe des le premier apostrophe, c'est que t'as pas escape ce caractère,
au lieu de ' mets \'
ou bien regarde coté http://php.net/manual/en/function.addslashes.php
amezghal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2011, 19h21   #3
Membre Expert
 
Avatar de Seb33300
 
Homme Sébastien Alfaiate
Développeur Web
Inscription : janvier 2007
Messages : 1 329
Détails du profil
Informations personnelles :
Nom : Homme Sébastien Alfaiate
Âge : 26
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : janvier 2007
Messages : 1 329
Points : 1 657
Points : 1 657
Pour la taille d'un varchar, oui ça correspond au nombre maximum de caractère.

Pour les apostrophes ce n'est pas un problème de type mais un problème d’échappement de caractère qui fait planter ta requête.

Par exemple :
Code SQL :
INSERT INTO TABLE (champ) VALUES ('texte avec ' une apostrophe')
Tu peux voir que l'apostrophe en milieu de texte est considéré comme la fin de ton texte.

Pour éviter ça et sécuriser ta requete par la meme occasion, tu dois utiliser la fonction mysql_real_escape_string :
Code :
mysql_query("INSERT INTO table (champ) VALUES ('".mysql_real_escape_string($variable)."')")

Note : mysql_real_escape_string et addslashes vont faire "presque" la même chose mais c'est mysql_real_escape_string qui protégera efficacement ta requête contre les injections SQL
__________________
Zend Certified Engineer PHP 5.3

« Crois-tu comprendre le monde juste en matant le 20H Ou connaître l'histoire en ayant lu que l'angle des vainqueurs ? » Keny Arkana
Seb33300 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2011, 19h49   #4
Candidat au titre de Membre du Club
 
Homme
Étudiant
Inscription : octobre 2011
Messages : 35
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2011
Messages : 35
Points : 11
Points : 11
Tout d'abord, merci d'avoir répondu si vite.
Je ne suis pas bien sûr d'avoir saisi vos deux réponses.

@amezghal : Tu ne dis pas à quel endroit je dois mettre \'...
Etant très mauvais en anglais, j'ai du mal avec ton lien =/
Est-ce dans le code ou dans le texte que je saisi au moyen du formulaire ?
Que permet le type "TEXT" ? Quelle est sa différence avec "VARCHAR" ?

@Seb33300 : Je ne crois pas avoir ce genre de problème, juge par toi-même, voici ma requête :

$sql = "INSERT INTO messages (texte, nom)
VALUES ( '$textes', '$pseudo') " ;

Peut être me suis-je mal expliqué : l'insertion est un échec lorsque je met une apostrophe dans le champs de saisie de mon formulaire, pas dans le code.
Par exemple, si je souhaite entrer : "Taratis aime les pommes", la requête s'exécute et ma page affiche le message. Maintenant si je tape "J'aime les pommes" dans le champs de saisie du formulaire, la requête n'a pas lieu, la base de donnée reste vide (car "j'aime" contient une apostrophe).
Taratis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2011, 20h07   #5
Membre régulier
 
Homme Abdelilah amezghal
Développeur informatique
Inscription : février 2006
Messages : 56
Détails du profil
Informations personnelles :
Nom : Homme Abdelilah amezghal

Informations professionnelles :
Activité : Développeur informatique
Secteur : Tourisme - Loisirs

Informations forums :
Inscription : février 2006
Messages : 56
Points : 95
Points : 95
Salut,
essayes ca,
figures toi que dans le contenu de ta variable tu risque d'avoir un apostrophe (ce qui est le cas, et donc ça va planter ta requête)
donc tu es obligé de protéger tes variables avant.

Code php :
1
2
3
4
5
 
$textes = mysql_real_escape_string($textes);
$pseudo = mysql_real_escape_string($pseudo);
$sql = "INSERT INTO messages (texte, nom)
VALUES ( '$textes', '$pseudo') " ;

sinon voici la version fr de:
http://php.net/manual/fr/function.addslashes.php
et
http://php.net/manual/fr/function.my...ape-string.php

je prefere mysql_real_escape_string c'est le plus adapté dans ton cas
amezghal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2011, 21h12   #6
Candidat au titre de Membre du Club
 
Homme
Étudiant
Inscription : octobre 2011
Messages : 35
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2011
Messages : 35
Points : 11
Points : 11
Problème résolu, merci !
mysql_real_escape_string est géniale =)

Merci beaucoup à vous deux, pour votre aide précieuse !
Je garde les liens du manuel, je vais potasser.
Taratis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/10/2011, 03h07   #7
Membre Expert
 
Avatar de Seb33300
 
Homme Sébastien Alfaiate
Développeur Web
Inscription : janvier 2007
Messages : 1 329
Détails du profil
Informations personnelles :
Nom : Homme Sébastien Alfaiate
Âge : 26
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : janvier 2007
Messages : 1 329
Points : 1 657
Points : 1 657
Citation:
Envoyé par Taratis Voir le message
@Seb33300 : Je ne crois pas avoir ce genre de problème, juge par toi-même, voici ma requête :

$sql = "INSERT INTO messages (texte, nom)
VALUES ( '$textes', '$pseudo') " ;
Lorsque ta variable va être remplacé par sa valeur, le problème que j'ai cité au dessus va se produire si ta variable contient une apostrophe.
__________________
Zend Certified Engineer PHP 5.3

« Crois-tu comprendre le monde juste en matant le 20H Ou connaître l'histoire en ayant lu que l'angle des vainqueurs ? » Keny Arkana
Seb33300 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h18.


 
 
 
 
Partenaires

Hébergement Web