IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Redirection PHP suite à une saisie d'informations [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 41
    Par défaut Redirection PHP suite à une saisie d'informations
    Bonjour,

    Utilisant un système de commentaire permettant de réagir à nos actualités, le principe de fonctionnement est le suivant :

    - l'utilisateur tape son message dans la zone textarea de la page article.php
    - un script comment_add.php s'occupe d'enregistrer les informations puis de rediriger l'utilisateur vers la page ou il était.

    Problème, lorsqu'un utilisateur saisit un commentaire sous Internet Explorer (comme de par hasard) l'enregistrement est doublé. Voici la portion de code du fichier comment_add.php. Je pense que cela doit probablement venir du $_SERVER['HTTP_REFERER'].

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    	$query_insert = "INSERT INTO gc_comment(id_article,id_user,id_statut,contenu_comment,date_comment,ip_user)
    	VALUES('".$_POST['id_article']."','".$_COOKIE['id_user']."',1,'".htmlentities($_POST['contenu_comment'], ENT_QUOTES, "UTF-8")."','".$date."','".$_SERVER["REMOTE_ADDR"]."')";
     
    	$insert = mysql_query($query_insert, $cnx) or die(mysql_error());
     
    	mysql_close($cnx);	
    	header("Location:".$_SERVER['HTTP_REFERER']);
    Dans l'idéal j'aimerais aussi optimiser ce script pour le mettre à la sauce Web2 afin que les utilisateurs puissent saisir le message sans refresh de la page et à la volée. Si vous connaissez des exemples de scripts, je suis preneur

    Merci

  2. #2
    Membre Expert

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Par défaut
    http://fr2.php.net/manual/fr/reserve...les.server.php

    'HTTP_REFERER'
    L'adresse de la page (si elle existe) qui a conduit le client à la page courante. Cette valeur est affectée par le client, et tous les clients ne le font pas. Certains navigateurs permettent même de modifier la valeur de HTTP_REFERER, sous forme de fonctionnalité. En bref, ce n'est pas une valeur de confiance.
    donc a ne pas utiliser...

    A toi de rediriger vers une page fixe, ou une page dont tu connais avec précision l'adresse (passée par GET, POST ou tout autre moyen a ta disposition)

  3. #3
    Membre éprouvé Avatar de SirDarken
    Profil pro
    Développeur Web
    Inscrit en
    Février 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Services de proximité

    Informations forums :
    Inscription : Février 2004
    Messages : 897
    Par défaut
    Dans ton formulaire tu mets un champ hidden avec la valeur de la page voulu, puis tu fait ton header() dessus, exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    header(Location:".$_POST['mapage']);

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 41
    Par défaut
    Merci à tous les deux pour ces précisions, il me semblait bien avoir lu que le HTTP_REFERER n'était pas fiable. Je pense opter pour la solution du champ hidden.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 41
    Par défaut
    Bon... même après changement de méthode rien n'y fait, j'ai toujours ce doublon d'enregistrement qui se fait D'autres solutions

  6. #6
    Membre éprouvé Avatar de SirDarken
    Profil pro
    Développeur Web
    Inscrit en
    Février 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Services de proximité

    Informations forums :
    Inscription : Février 2004
    Messages : 897
    Par défaut
    J'avouerai ne pas voir pourquoi ca double l'insertion.
    Peux-tu prendre une portion plus large de code ? je pense que ca parlera plus.

    Et peut-être aussi ajoute le maximum d'informations on sais jamais ( hébergeur, version de IE qui est en cause ect).
    Perso je sèche pour le moment.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 41
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    <?php
    session_start();
     
    if(isset($_POST['valid']) && $_POST['valid']!="" && $_POST['valid']=="ok" && isset($_COOKIE['id_user']) && isset($_COOKIE['id_user'])!="" && isset($_POST['contenu_comment'])){
     
    	require_once("../Connections/cnx.php");
    	mysql_select_db($database_cnx, $cnx);
     
    	$query_insert = "INSERT INTO gc_comment(id_article,id_user,id_statut,contenu_comment,ip_user)
    	VALUES('".$_POST['id_article']."','".$_COOKIE['id_user']."',1,'".htmlentities($_POST['contenu_comment'], ENT_QUOTES, "UTF-8")."','".$_SERVER["REMOTE_ADDR"]."')";
     
    	$insert = mysql_query($query_insert, $cnx) or die(mysql_error());
     
    	mysql_close($cnx);	
    	header("Location:http://www.game-class.com/".$_POST['page']);
    }
    ?>
    Hébergement serveur dédié chez OVH. Le bug est souvent constaté sous l'utilisation d'Internet Explorer 6. Le script contenant le formulaire est appelé sur les pages via un require_once(); et le submit se fait sur la page comment_add.php. Je seche aussi

  8. #8
    Membre éprouvé Avatar de SirDarken
    Profil pro
    Développeur Web
    Inscrit en
    Février 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Services de proximité

    Informations forums :
    Inscription : Février 2004
    Messages : 897
    Par défaut
    J'ai fait quelque recherches et il semblerai que ton souci avec IE vienne du fait que IE interprête 2 fois ta page, et donc réalise deux envois.

    Voici la source que j'ai trouvé :

    Explications:

    Alors oui, le code PHP est executer coté server, mais l'evenement déclencheur est un submit sur le formulaire en question. Si la page se recharge automatiquement et qu'elle n'est pas 'protégé', le simple fait de presser F5 (rafraichir) va recharger la page et donc inserer une 2ème fois toutes les info en Base.

    Situation concernant IE et FireFox: tout le monde sait que IE et Firefox n'interprète pas le code HTML de la même manière...
    D'ou la situation suivante: ce qui fonctionne sous IE ne fonctionera pas de la même manière sous FireFox !

    Simple: Si une erreur c'est glisser dans le HTML, il se peut que Firefox ne la detecte pas alors que IE le fasse (ou inversement ...). C'est EXACTEMENT ce qui qe passe!!
    En fait, IE va se heuter a une erreur HTML qu'il n'arrive pas a interpreter correctment et recharger la page automatiquement et instantanément sans rien demander a personne .... le PHP est donc recharger (avec la page) et la requête executé une seconde fois d'ou un double INSERT.

    Cette erreur n'a rien a voir avec PHP, ni même avec MySQL. C'est une simple erreur d'interpretation du code HTML sous IE!

    Un exemple concret: http://bugs.php.net/bug.php?id=10599
    Donc je dirai dans le vif y'as une erreur d'interprétation du HTML avec IE qui fait le double INSERT aprés laquelle, je ne serai te dire.

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 41
    Par défaut
    Je vais recoder la page dans ce cas Je vous tiens au jus. Merci des infos

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 25/06/2014, 19h55
  2. [PHP-JS] Forcer une saisie numérique
    Par Empty_body dans le forum Langage
    Réponses: 9
    Dernier message: 04/10/2011, 18h46
  3. [AC-2003] Requête SQL pour Mise à jour de champs dans un formulaire suite à une saisie
    Par sunshine44 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 28/01/2010, 16h25
  4. insérer une nouvelle ligne suite à une saisie
    Par jetset30 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 10/02/2009, 08h32
  5. Réponses: 2
    Dernier message: 08/12/2005, 05h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo