Problem avec enregistrement d'un formulaire

Eléphanteau du PHP | 27 Messages

18 juin 2008, 16:47

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 :

Eléphant du PHP | 174 Messages

18 juin 2008, 17:05

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.
"Il vaut mieux avoir du luxe dans ses sentiments que sur ses habits, je ne crains, moi, le mépris de personne" Honoré De Balzac.
"On s'étonne trop de ce que l'on voit rarement et trop peu de ce que l'on voit chaque jour" Mme de Genlis
"L'absence diminue les médiocres passions et augmente les grandes comme le vent éteint les bougies et allume le feu" La RocheFoucauld
"People have hope because they can't see Death standing behind them" (anonymous)
"Of all the things I've lost, I miss my brain the most" (from a fanfic)

Eléphanteau du PHP | 27 Messages

18 juin 2008, 18:30

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");
?>

ViPHP
ViPHP | 4039 Messages

18 juin 2008, 18:57

je ne vois pas ou tu échappes tes valeurs.. il suffit d'un apostrophe pour faire flancher ta requête.

Regarde addslashes() .
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Eléphanteau du PHP | 27 Messages

18 juin 2008, 19:28

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 :lol:

Merci.

Eléphant du PHP | 75 Messages

18 juin 2008, 23:26

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à. :)

Eléphanteau du PHP | 27 Messages

19 juin 2008, 05:00

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.

Eléphant du PHP | 75 Messages

19 juin 2008, 09:18

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.

:)

Eléphanteau du PHP | 27 Messages

19 juin 2008, 09:42

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]

ViPHP
ViPHP | 4039 Messages

19 juin 2008, 10:23

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 ?
:shock:

je sais pas.. est-ce que le addslashes() protège contre tout type d'injection de requête ? Je n'oserais pas l'affirmer.
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Eléphanteau du PHP | 27 Messages

19 juin 2008, 11:30

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.