Page 1 sur 1
Problem avec enregistrement d'un formulaire
Posté : 18 juin 2008, 16:47
par marcello2
J'ai développé un formulaire avec flash.
J'utilise des scripts php et bien sur mysql sur le serveur.
Lors des beta tests, certains utilisateurs enregistrent parfaitement leur formulaire alors que pour d'autres, il n'y a rien dans la base.
Tous font la même chose et cliquent pour soumettre le formulaire.
Je ne comprends pas comment un script peut marcher pour certains et pas pour d'autres.
Merci de votre aide.
marcello :
Posté : 18 juin 2008, 17:05
par animithra
Bonjour.
Nous montrer ton code source serait un plus...
Sinon regarde si cela n'est pas lié à des caractères spéciaux non-encodés ou à l'utilisation de '.
Refais une série de tests et note dans chaque cas si ça fonctionne ou pas avec les éléments que tu as entré afin qu'on ait une idée de ce qui fonctionne ou pas.
Posté : 18 juin 2008, 18:30
par marcello2
Tu veux dire mon code php ?
Est-que le problème ne peut pas venir du code ActionScript ?
Voici le code php
<?php
//require_once('blocageCache.php');
//récupération des variables envoyées par Flash
if(isset($_POST['idUtilisateur'])) $idUtilisateur= utf8_decode($_POST['idUtilisateur']); else $idUtilisateur="inconnu";
if(isset($_POST['semaine'])) $semaine= utf8_decode($_POST['semaine']); else $semaine="inconnu";
if(isset($_POST['jour'])) $jour= utf8_decode($_POST['jour']); else $jour="inconnu";
if(isset($_POST['numero'])) $numero= utf8_decode($_POST['numero']); else $numero="inconnu";
if(isset($_POST['type'])) $type= utf8_decode($_POST['type']); else $type="inconnu";
if(isset($_POST['nom'])) $nom= utf8_decode($_POST['nom']); else $nom="inconnu";
if(isset($_POST['coeur'])) $coeur= utf8_decode($_POST['coeur']); else $coeur="inconnu";
if(isset($_POST['couleur'])) $couleur= utf8_decode($_POST['couleur']); else $couleur="inconnu";
//------------------------CONNEXION ET SELECTION DE LA BASE---------------------------
require_once('Connections/connexionLogin.php');
mysql_select_db("DB327152");
//--------------FONCTIONS
function envoi($var, $val){
echo "&".$var."=".utf8_encode($val);
}
//------------------------RECUPERATION DES INFORMATIONS(depuis la table utilisateurs)
$sql = "INSERT INTO elements (idUtilisateur, semaine, jour, type, numero, nom, coeur, couleur) VALUES ('$idUtilisateur', '$semaine','$jour', '$type',
'$numero','$nom','$coeur', '$couleur')";
mysql_query($sql, $connexionLogin) or die(mysql_error());
envoi("retour","ok");
?>
Posté : 18 juin 2008, 18:57
par Berzemus
je ne vois pas ou tu échappes tes valeurs.. il suffit d'un apostrophe pour faire flancher ta requête.
Regarde addslashes() .
Posté : 18 juin 2008, 19:28
par marcello2
Et je le mets où addslashes ?
Bon, je vais étudier la question de près avec mes bouquins et les tutorials.
C'est pas toujours marrant de débuter
Merci.
Posté : 18 juin 2008, 23:26
par Volkow
Le addslashes() tu l'utilise comme cela, pour prendre exemple sur la réception d'un formulaire:
$titre = addslashes($_POST['titre']);
Ce qui mettra des anti-slash devant les apostrophes.
Exemple:
Le champ titre est égal à "l'oiseau de l'île de Paradis".
Après application du addslashes:
"l\'oiseau de l\'île de Paradis".
Voilà.

Posté : 19 juin 2008, 05:00
par marcello2
J'ai réécris mon script ainsi :
f(isset($_POST['coeur'])) $nom= addslashes(utf8_decode($_POST['coeur'])); else $coeur="inconnu";
http://www.phpfrance.com/forums/posting ... t&p=252283
PHPFrance :: Editer le sujet
Les apostrophes passent bien dans la base.
Mais on ne voit pas de slashes dans les enregistrements
J'obtiens ceci dans la base sql pour le champ $coeur :
tu t'y crois vraiment o'bannion
et pas tu t/y crois vraiment o/bannion.
Mais ça semble être lu correctement par flash.
D'après mon bouquin php, je croyais qu'il fallait utiliser stripslashes() pour revenir vers flash.
Posté : 19 juin 2008, 09:18
par Volkow
Donc si je résume:
Dans les enregistrements de ta base tu as des \ devant chaque apostrophe, c'est ça?
Si c'est le cas, au moment de les sortir de la base, tu fais passer la variable au stripslashes(). Cela aura pour effet d'enlever les anti-slash.

Posté : 19 juin 2008, 09:42
par marcello2
En fait, je n'ai pas de / devant les apostrophes dans la base.
J'ai fait pas mal d'essais : ça fonctionne très bien.
L'aide du forum a été précieuse.
Autre chose que je devrait savoir pour éviter les problèmes avant de lancer l'application lundi ?
[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]
Posté : 19 juin 2008, 10:23
par Berzemus
En fait, je n'ai pas de / devant les apostrophes dans la base.
J'ai fait pas mal d'essais : ça fonctionne très bien.
L'aide du forum a été précieuse.
Autre chose que je devrait savoir pour éviter les problèmes avant de lancer l'application lundi ?
je sais pas.. est-ce que le addslashes() protège contre tout type d'injection de requête ? Je n'oserais pas l'affirmer.
Posté : 19 juin 2008, 11:30
par marcello2
Voici mon script d'authentification :
i
Code : Tout sélectionner
f(isset($_POST['login'])) $login= utf8_decode($_POST['login']); else $login="inconnu";
if(isset($_POST['secret'])) $secret= utf8_decode($_POST['secret']); else $secret="inconnu";
$login=addslashes($login);
$secret=addslashes($secret);
//--------------FONCTIONS
function envoi($var, $val){
echo "&".$var."=".utf8_encode($val);
}
//--------CONNEXION ET SELECT BASE ------------
require_once('Connections/connexionLogin.php');
mysql_select_db("maBase");
$query_rs = "SELECT * FROM utilisateurs WHERE login='$login' ";
$rs = mysql_query($query_rs, $connexionLogin) or die(mysql_error());
if(($secret == $row_rs['secret'])&&($total_rs!=0)){
//test si le controle du mot de passe est ok
$_SESSION['login']=$login;
//mémorise le login de l'utilisateur en session
envoi("retour","ok");
$idUtilisateur = $row_rs['idUtilisateur'];
$_SESSION['idUtilisateur']=$idUtilisateur;
est-il à l'abri d'une injection SQL.
Si ce n'est pas le cas, comment le protéger ?
Merci de votre aide.