Perte de certains envois de formulaire à la base de données

CrazyCow007
WRInaute discret
WRInaute discret
 
Messages: 182
Inscription: 28 Déc 2003

Perte de certains envois de formulaire à la base de données

Message le Dim Nov 19, 2006 15:31

Bonjour,

J'ai mis en place un système permettant aux visiteurs de mon site de poster des réactions (sur le film Casino Royale), qui ensuite apparaissent dans ma console d'admin pour être validées ou supprimées.

Le problème que j'ai déjà remarqué est que certains messages lorsqu'ils sont validés n'apparaissent pas dans la base de données. Pourtant le script n'affiche aucune erreur PHP.

J'ai essayé beaucoup de possibilités différentes mais rien n'y fait c'est très étrange (ça ne vient ni de la longueur ni de caractères spéciaux) :?

Je vous met une portion du code qui ajoute les données du formulaire à la BDD (4 informations au total : date, auteur, commentaire et note).

Code: Tout sélectionner
$auteur = htmlspecialchars($auteur, ENT_QUOTES);
$auteur = spec_chars($auteur);
$commentaire = trim($commentaire);
$commentaire = htmlspecialchars($commentaire);
$commentaire = nl2br($commentaire);
$commentaire = spec_chars($commentaire);
$commentaire = str_replace("Â","",$commentaire);
$date = date('j M Y \à G:i');
$date = spec_chars($date);
db_connect();
$sql = "INSERT INTO $dbtable (ok, auteur, commentaire, note, date) VALUES ('0', '$auteur', '$commentaire', '$note', '$date')";
mysql_query ($sql);


Vous remarquerez que j'ai mis beaucoup de sécurités pour formater le texte entré par l'utilisateur. Il est possible que le problème vienne de là.

Annexe :
Code: Tout sélectionner
function spec_chars($chaine) {
  for ($i = 161; $i < 255; $i++)
    $chaine = ereg_replace(chr($i), "&#$i;", $chaine);
  return $chaine;
}


Merci d'avance pour vos idées !


Leonick
WRInaute accro
WRInaute accro
 
Messages: 19595
Inscription: 8 Aoû 2004

Message le Dim Nov 19, 2006 15:53

et le addslashes() ?

CrazyCow007
WRInaute discret
WRInaute discret
 
Messages: 182
Inscription: 28 Déc 2003

Message le Dim Nov 19, 2006 15:58

J'ai compris qu'il était inutile lorsque magic_quotes_gpc était sur on, ce qui est le cas sur mon serveur chez OVH. D'ailleurs j'avais essayé de le faire mais ça me rajoute juste des \ supplémentaires. Par défaut addslashes est ajouté à chaque enregistrement dans la base :wink:


Leonick
WRInaute accro
WRInaute accro
 
Messages: 19595
Inscription: 8 Aoû 2004

Message le Dim Nov 19, 2006 16:14

la solution, c'est d'enregistrer dans un fichier la variable $sql quand mysql_query ($sql); renvoie une erreur.
Et ensuite, de faire le test de cette insertion avec phpmyadmin.
car j'ai eu ce problème chez OVH d'insertion qui ne se faisaient pas et en ajoutant addslashes ça a remarché :D

CrazyCow007
WRInaute discret
WRInaute discret
 
Messages: 182
Inscription: 28 Déc 2003

Message le Dim Nov 19, 2006 16:50

Ok je vais essayer ça. Merci ! :wink:


rog
WRInaute passionné
WRInaute passionné
 
Messages: 1662
Inscription: 21 Sep 2006

Message le Dim Nov 19, 2006 19:32

pas compris

le probleme vient de l'insertion ou de la validation ?

CrazyCow007
WRInaute discret
WRInaute discret
 
Messages: 182
Inscription: 28 Déc 2003

Message le Dim Nov 19, 2006 19:42

De l'insertion. Tout le reste (fonction update) marche sans problème.

Je pense qu'il doit y avoir une situation ou l'insertion ne peut pas se faire, mais j'ai pourtant essayé toutes les possibilités avec les " et les ' mais à chaque fois ça marche. C'est assez étrange en fait...

Donc j'ai mis en place un code qui m'envoit par mail s'il y a une erreur SQL toutes les infos de l'erreur et le contenu du formulaire... Faudrait-il encore que ça génère une erreur... :?

RomsIW
WRInaute passionné
WRInaute passionné
 
Messages: 1144
Inscription: 25 Mai 2004

Message le Dim Nov 19, 2006 20:59

peux-tu faire un echo $sql histoire de voir ce qui est soumis à la BDD ?, voir un mysql_error ?

CrazyCow007
WRInaute discret
WRInaute discret
 
Messages: 182
Inscription: 28 Déc 2003

Message le Dim Nov 19, 2006 21:32

$sql :
INSERT INTO reactions (ok, auteur, commentaire, note, date) VALUES ('0', 'PseudoDeTest', 'Hello world !', '8', '19 Nov 2006 à 17:09')

Dans la BDD :
id - int(5) - auto_increment
ok - tinyint(1)
auteur - varchar(40)
date - varchar(40)
commentaire - text
note - int(2)

RomsIW
WRInaute passionné
WRInaute passionné
 
Messages: 1144
Inscription: 25 Mai 2004

Message le Dim Nov 19, 2006 21:43

ok là dessus, d'après les infos données, tout va bien, il doit y avoir autre chose. As tu essayé un echo mysql_error(); juste après la requête pour vérifier ?

Après expériences, je ne saurai que trop préférer la syntaxe INSERT INTO table SET champs1='valeur1', champs2='valeur2', etc.

CrazyCow007
WRInaute discret
WRInaute discret
 
Messages: 182
Inscription: 28 Déc 2003

Message le Dim Nov 19, 2006 22:31

J'ai essayé echo mysql_error(); mais ça ne m'affiche rien et l'ajout dans la base se fait comme il faut. Même avec tous les caractères spéciaux possibles. :roll:

Moi je me rappelle quand j'ai eu ce problème aussi, qu'aucune erreur mysql n'était affichée. Donc je ne pense pas que j'en saurais plus avec le système d'alerte par mail...

CrazyCow007
WRInaute discret
WRInaute discret
 
Messages: 182
Inscription: 28 Déc 2003

Message le Dim Nov 19, 2006 22:34

Je pense que je vais laisser comme ça. Peut-être que c'était un problème interne chez l'hébergeur... Espérons que ça ne se reproduise plus...

RomsIW
WRInaute passionné
WRInaute passionné
 
Messages: 1144
Inscription: 25 Mai 2004

Message le Dim Nov 19, 2006 22:35

vérifie l'auteur, etc.

mais le mieux est de faire un rapport d'erreurs par email pour que tu aies des infos de debug..

bonne continuation

CrazyCow007
WRInaute discret
WRInaute discret
 
Messages: 182
Inscription: 28 Déc 2003

Message le Lun Nov 20, 2006 20:08

Oui effectivement j'ai rajouté les mêmes vérifications pour l'auteur que pour le commentaire. Et pour le moment j'ai déjà validé une vingtaine de réactions sans avoir reçu de mail d'erreur. Donc ça à l'air de tenir la route maintenant...


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités