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

jQuery Discussion :

Insertion quand validation Form sous Firefox


Sujet :

jQuery

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 20
    Par défaut Insertion quand validation Form sous Firefox
    Bonjour à tous et à toutes.

    Je post ici mon souci, j'espère être au bon endroit. (J'ai faits des recherches, ici et sur le net bien sûr) et je n'ai rien trouvé se rapprochant de mon problème.

    Jeune développeur web, je crée actuellement mon site pour "vendre" un peu mes bases de connaissances acquises et qui m'aiderait à trouver un premier emploi.

    Bref!

    Mon souci concerne en fait la validation de mon formulaire de contact côté PHP/Mysql en validant un formulaire sous Firefox.

    En effet le code semble bon puis ce que je récupère les données et qu'elles s’inscrivent en BDD sous IE / Chrome / Opera. (donc dans la logique cela me semble bon puis ce que d'un coté ça fait le chemin en totalité)

    Je suis bien conscient qu'un navigateur n'est pas censé intervenir sur un script côté serveur, mais ce que je comprends pas du coup, c'est qu'en POST, j'ai bien la récupération et l'envoient des données formulaires, mais elle n'arrive pas jusqu'à la base.

    Alors je ne sais pas si j'ai raté un truc dans mon code (si mon controler renvoie pas ce que je demande, si c'est la méthode de ma classe que j'ai, n'a pas effectué un bon traitement , ou alors dans ma table MySQL).

    Je peux évidemment mettre des bouts de code si besoin et je pense que cela sera le cas.

    Je remercie d'avance celles et ceux qui prendront un peu de temps pour m'aider avant que je devienne chauve!

    Amicalement

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Ca devrait être assez simple à debuguer.
    Avec Firefox :
    - Que vaut $_POST ?
    - Que vaut la requête ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 20
    Par défaut
    Hello,

    sur Firefox via la console je vois en post :

    email test@test.fr
    firstname test
    lastname test
    message test
    method addMsg
    phone (j'ai laissé ce champ vide, il est optionnel)
    website (j'ai laissé ce champ vide, il est optionnel)

    Un print_r de mon $_post dans le controler = Array ( [firstname] => test [lastname] => test [email] => test@test.fr [website] => [phoneNumber] => [captcha] => 11 [message] => test )

    en revanche je vois pas ce que tu souhaites au niveau de la requête.

    Je te remercie de ton aide!

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Tu executes une requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $cnx->query('une requête');
    affiche ce que vaux 'une requête'
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 20
    Par défaut
    Je suis désolé, je n'arrive pas à faire remonter l'info de ce que contient ma requête.

    Ma méthode est celle ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public function addMessage($array){
    	$stmt = $this->_db->prepare('INSERT INTO messages(firstname,lastname,email,website,phone,message,datePosted)
    		VALUES(:f,:l,:e,:w,:p,:m,:dP)');
    	$stmt->execute(array(
    		"f"			=> $array['firstname'],
    		"l"			=> $array['lastname'],
    		"e"			=> $array['email'],
    		"w"			=> $array['website'],
    		"p"			=> $array['phone'],
    		"m"			=> $array['message'],
    		"dP"		        => date('Y-m-d H:i:s')
    	));
    	return $this->_db->lastInsertId();
    }

  6. #6
    Membre émérite Avatar de patrickbaras
    Homme Profil pro
    Informaticien (à sa mémère).
    Inscrit en
    Septembre 2010
    Messages
    525
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien (à sa mémère).
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 525
    Par défaut
    si tu ajoute print_r($array);:
    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
    public function addMessage($array){
    	print_r($array);
    	$stmt = $this->_db->prepare('INSERT INTO messages(firstname,lastname,email,website,phone,message,datePosted)
    		VALUES(:f,:l,:e,:w,:p,:m,:dP)');
    	$stmt->execute(array(
    		"f"			=> $array['firstname'],
    		"l"			=> $array['lastname'],
    		"e"			=> $array['email'],
    		"w"			=> $array['website'],
    		"p"			=> $array['phone'],
    		"m"			=> $array['message'],
    		"dP"		        => date('Y-m-d H:i:s')
    	));
    	return $this->_db->lastInsertId();
    }
    tu obtient quoi ?

  7. #7
    Membre averti
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 20
    Par défaut
    Le print_r ne remonte pas, que je pointe l'action de mon formulaire sur mon fichier process.php, où messages.class.php ni sur firefox, ni sur chrome (avec lequel l'inscription en bdd se fait parfaitement.), rien ne s'affiche.

    J'avais déja essayé un print_r sur la variable array, qui est censé tout contenir, mais je n'arrive pas à en obtenir le résultat

  8. #8
    Membre émérite Avatar de patrickbaras
    Homme Profil pro
    Informaticien (à sa mémère).
    Inscrit en
    Septembre 2010
    Messages
    525
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien (à sa mémère).
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 525
    Par défaut
    il y a bien un endroit ou tu appelle addMessage(...) il faut vérifier la valeur qui est passée dans (...).

  9. #9
    Membre averti
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 20
    Par défaut
    Dans mon process.php j'utilise ce code la :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    require 'class/messages.class.php';
    if ($_POST['method']=='addMsg') {
    	$messages = new Messages();
    	$add = $messages->addMessage($_POST);
    }
    Ce que contient le $_post est quelques post plus haut pour rappel au moment du test :

    Array ( [firstname] => test [lastname] => test [email] => test@test.fr [website] => [phoneNumber] => [captcha] => 11 [message] => test ) 
    les champs website et phoneNumber sont des champs optionnels non remplis au moment du test

  10. #10
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    "method" a disparu de ton $_POST entre tes deux messages.
    d'ou vient "method" ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  11. #11
    Membre averti
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 20
    Par défaut
    La methode vient de ma requête ajax :

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    $("#submit").on("click",function(){
      var firstname = $("#firstname").val(),
      lastname      = $("#lastname").val(),
      email         = $("#email").val(),
      website       = $("#website").val(),
      phone         = $("#phonenumber").val(),
      message       = $("#message").val();
      if (firstname.length>0 && lastname.length>0 && email.length>0  && website.length>=0  && phone.length>=0 && message.length>0) {
        $.ajax({
          url: 'process.php',
          type: 'POST',
          data: {
            method: 'addMsg',
            firstname: firstname,
            lastname: lastname,
            email: email,
            website: website,
            phone: phone,
            message: message
          },
          success: function(result){
            }
        });
      } else {
        alert('Vous devez remplir tous les champs');
      }
    L'apparition de la method apparait dans la console navigateur, mais n'est pas dans le $_POST

  12. #12
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Direction jQuery.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  13. #13
    Membre émérite Avatar de patrickbaras
    Homme Profil pro
    Informaticien (à sa mémère).
    Inscrit en
    Septembre 2010
    Messages
    525
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien (à sa mémère).
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 525
    Par défaut
    ne faudrait-il pas préciser que data contient du json !?
    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
    ...
        $.ajax({
          url: 'process.php',
          type: 'POST',
          dataType: "json",
          data: {
            method: 'addMsg',
            firstname: firstname,
            lastname: lastname,
            email: email,
            website: website,
            phone: phone,
            message: message
          },
    ...

  14. #14
    Membre averti
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 20
    Par défaut
    Je vais essayer cela je vous tiens au courant.

  15. #15
    Membre émérite Avatar de patrickbaras
    Homme Profil pro
    Informaticien (à sa mémère).
    Inscrit en
    Septembre 2010
    Messages
    525
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien (à sa mémère).
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 525
    Par défaut
    certain navigateur sont plus pointilleux sur certain point !

  16. #16
    Membre averti
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 20
    Par défaut
    Cela ne change malheureusement rien.

    Cependant, la console me met en rouge une erreur :
    http://localhost/Siteperso/process.php / query.js (ligne 9666)

    Ce qui correspond à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    // Do send the request
    // This may raise an exception which is actually
    // handled in jQuery.ajax (so no try/catch here)
    xhr.send( ( options.hasContent && options.data ) || null );
    Donc cela viendrait d'un problème avec l'utilisation d'ajax avec jquery et la connexion à la base de données? C'est bien ça?

  17. #17
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par défaut
    Bonsoir

    Avoir le courage d'indiquer explicitement que les propriétés d'un objet sont de type texte, évite bien des déboires. Le mot method n'est dans la liste des mots réservés, mais je suggère de tester :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
          data: {
            "method" : 'addMsg',
            "firstname" : firstname,
            "lastname" : lastname,
            "email" : email,
            "website" : website,
            "phone" : phone,
            "message" : message
          },

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  18. #18
    Membre averti
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 20
    Par défaut
    Bonsoir,

    Je suis un développeur web débutant, donc je ne maitrise pas toute les bonnes pratiques encore.

    Je ne comprend pas ce que peux signifier
    Avoir le courage d'indiquer explicitement que les propriétés d'un objet sont de type texte, évite bien des déboires.
    C'est au niveau de mon explication, ou du code en lui même?

    Sinon effectuer ces modifications n'ont rien changé. Même code erreur sur firefox, aucun soucis ailleurs. Merci vraiment d'essayer de me filer un coup de patte. Car j'avoue vraiment ne pas comprendre pourquoi ce que j'ai fais fonctionne d'un côté mais pas d'un autre.

  19. #19
    Membre émérite Avatar de patrickbaras
    Homme Profil pro
    Informaticien (à sa mémère).
    Inscrit en
    Septembre 2010
    Messages
    525
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien (à sa mémère).
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 525
    Par défaut
    bien je viens de faire le test dans une page test.php :
    Code html : 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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    <!DOCTYPE html>
    <html>
    <head>
    <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <script language="javascript" type="text/javascript" src="../javascript/jquery-1.7.2.min.js"></script>
    </head>
    <body>
    	<input type='text' id='firstname' value='test'>
    	<input type='text' id='lastname' value='test'>
    	<input type='text' id='email' value='test@test.fr '>
    	<input type='text' id='website' value=''>
    	<input type='text' id='phonenumber' value=''>
    	<input type='text' id='message' value='test'>
    	<input type='button' id='submit'>
    <script>
    $("#submit").on("click",function(){
     
      var firstname = $("#firstname").val(),
      lastname      = $("#lastname").val(),
      email         = $("#email").val(),
      website       = $("#website").val(),
      phone         = $("#phonenumber").val(),
      message       = $("#message").val();
     
      if (firstname.length>0 && lastname.length>0 && email.length>0  && website.length>=0  && phone.length>=0 && message.length>0) 
      {
     
        $.ajax({
                    url: 'page.php',
                    type: 'POST',
                    data: {
                            method: 'addMsg',
                            firstname: firstname,
                            lastname: lastname,
                            email: email,
                            website: website,
                            phone: phone,
                            message: message
                    },
                    success: function(msg){
                            alert(msg);
                    }
                    ,error : function(obj,msg,exep)
                    {
                            alert(msg+" "+exep);
                    }
        });
      } else {
        alert('Vous devez remplir tous les champs');
      } 
     });
    </script>
    </body>
    </html>
    et dans ma page page.php:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
    $out='';
    foreach($_POST as $key=>$value)
    {
    		$out.="POST[$key]=$value\n";
     
    }
    foreach($_GET as $key=>$value)
    {
    		$out.="GET[$key]=$value\n";
     
    }
    echo $out;
    ?>
    J'ai le même resultat sur Chrome & Firefox
    donc le soucis devrait venir du code de process.php ou de la class message

  20. #20
    Membre averti
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 20
    Par défaut
    Hello,

    Effectivement ton code ressort les données contenue en $_POST avec une boucle. j'en comprend bien l'utilité.

    Quand je pointe l'action de mon formulaire sur process.php, je vois l'echo du $out, ou le print_r du $_POST.

    J'ai également une notice qui apparait :

    Notice: Undefined index: method in C:\wamp\www\Siteperso\process.php on line 4
    Ligne où mon code dans process.php ressemble à ça :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    if ($_POST['method']=='addMsg'){

    Une ligne bien récupéré par le POST quand je regarde dans la console de firefox:
    email	=> test@test.fr
    firstname => test
    lastname => test
    message => test
    method => addMsg
    phone => champ optionnel
    website => champ optionnel
    Quel casse-tête, je pensais m'en être sorti correctement, mais apparemment je vais devoir revoir des choses.

    J'arrive pas à visualiser pourquoi tout les navigateurs sembles faire le bout du chemin sauf firefox.

    Après je me suis dit, au vu de l'erreur cité plus haut, avec le paragraphe sur Jquery, je me demande si je ne devrait pas crée une Class PDO pour la connexion à la Bdd et faire des autres Class, des Class héritées. Mais après comment le faire sera une autre paire de manche.

    pour rappel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    // Do send the request
    // This may raise an exception which is actually
    // handled in jQuery.ajax (so no try/catch here)
    xhr.send( ( options.hasContent && options.data ) || null );
    Ma Class Messages :

    Code php : 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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    Class Messages{
    	private 		        $_db;
    	const HOST 		= "localhost";
    	const USER 		= "user";
    	const PASS 		= "mdp";
    	const DBNAME 	        = "siteperso";
     
    	public function __construct(){
    		try {
    			echo('la connexion est ok');
    			$this->_db = new PDO("mysql:host=".self::HOST.";dbname=".self::DBNAME,self::USER,self::PASS);
    		} catch (PDOException $e) {
    			echo $e->getMessage();
    		}
    	}
     
    	public function addMessage($array){
    		$stmt = $this->_db->prepare('INSERT INTO messages(firstname,lastname,email,website,phone,message,datePosted)
    			VALUES(:f,:l,:e,:w,:p,:m,:dP)');
    		$stmt->execute(array(
    			"f"			=> $array['firstname'],
    			"l"			=> $array['lastname'],
    			"e"			=> $array['email'],
    			"w"			=> $array['website'],
    			"p"			=> $array['phone'],
    			"m"			=> $array['message'],
    			"dP"		        => date('Y-m-d H:i:s')
    		));
    		return $this->_db->lastInsertId();
    	}
    }

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Lenteur à la validation d'un formulaire sous Firefox 3
    Par TSnarfK dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 27/10/2008, 16h06
  2. un probleme de mise en form sous Firefox
    Par rinuom99 dans le forum Mise en page CSS
    Réponses: 6
    Dernier message: 17/05/2008, 17h11
  3. Insertion d'un date sous forme d'heure
    Par supbattosai dans le forum SQL
    Réponses: 5
    Dernier message: 12/12/2007, 13h15
  4. FORM fonctionne sous IE mais pas sous Firefox
    Par baudogu dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 06/09/2007, 16h50
  5. Réponses: 8
    Dernier message: 05/02/2006, 10h39

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