1. #1
    Membre du Club
    Homme Profil pro
    Développeur multimédia
    Inscrit en
    juin 2015
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur multimédia
    Secteur : Arts - Culture

    Informations forums :
    Inscription : juin 2015
    Messages : 49
    Points : 60
    Points
    60

    Par défaut Ajax et insertion dans la base de données

    Bonjour tout le monde

    Je sèche sur un problème depuis ce matin

    pour un site web, les visiteur(trice)s pourront mettre des commentaires sur un livre d'or. Il s'agit d'insérer les commentaires dans la base données et des les afficher sur la page
    J'aimerais faire cette insertion en ajax afin d'éviter le refresh de la page.
    j'utilise la biblio jQuery avec la fonction $.ajax() et le langage php pour le serveur
    voici mon fichier php qui va recevoir la requête post
    il revient des message d'erreur en cas d'oubli du message et du nom et sinon il insère dans la bdd en voyant un message ok:

    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
    27
    28
    29
    30
    <?php
     
    $errors = [];
    if(!array_key_exists('name', $_POST) || $_POST['name'] == '') {
    	$errors['name'] = "name";
    }
    if(!array_key_exists('message', $_POST) || $_POST['message'] == '') {
    	$errors['message'] = "message";
    }
     
    if (empty($errors)){
     
    	$matableTable = App::getInstance()->getTable('Matable');
     
    	$nom = $_POST['name'];
    	$message = $_POST['message'];
     
     
    	$matableTable->create( [
     
    		'titre' => $nom,
    		'contenu' => $message
     
    	]);
     
    	$errors['ok'] = "ok";	
     
    }
     
    echo json_encode($errors);
    si j'enlève mon App::getInstance et ma fonction create() mon dispositif fonctionne car j'ai testé en renvoyant les valeurs directement sur la page avec la fonction html() et ça fonctionne très bien

    donc je suppose que c'est mon App::getInstance qui pose problème, ça me permet de faire référence à mes tables, mes fonctions enfin toute mon application php
    comme erreur la console une erreur d'écriture dans un fichier json: "SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON "

    si quelqu'un a des pistes ou des conseils pour la réflexion ça serait top, là je sèche
    et dans mes recherches, je tombe que sur des tutos, des explications avec des fichiers php procédural avec même parfois la connection à la bdd, voir le tableau config avec le mot de passe (sic)
    je sais bien qu'en mettant tout les éléments dans mon fichier et en écrivant php procédural ça va fonctionner mais au niveau sécurité c'est pas génial et si je peux laisser mon fichier php tel quel (ou presque)...

    et ici je vous mets le script jquery avec la requête ajax au cas où:

    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
    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
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
     $('#form').on("keyup", function(){
     
            if ($("#name").val()!==""  && $("#message").val()!=="") {
     
     
                $("#send").removeAttr("disabled");
     
            }
            if ($("#name").val()===""  || $("#message").val()==="") {
     
     
               $("#send").attr("disabled", "disabled");
     
            }
     
        });
     
        //fonction pour envoyer le formulaire de contact en ajax
        var busy = 0;
     
        $( "#form" ).on( "submit", function( event ) {
          event.preventDefault();
          form = $(this);
     
          var name = $(this).find('#name').val();
          var message = $(this).find('#message').val();
     
            if (busy ===0) {
     
                busy = 1;
     
                $.ajax({
                  type: "POST",
                  url: 'http://localhost/cyril_perso/pages/admin/monFichier.php',
                  data: {
     
                      name: name,
                      message: message
     
     
                  },
                  success: function(data) {
     
     
                        if(data.ok == "ok") {
                          $('#messageError').append("<p>super ça marche</p>")
                          form[0].reset();
                          $("#send").attr("disabled", "disabled");
                        }
                        if(data.name == "name") {
     
                          $('#messageError').append("<p>vous n'avez pas renseigné votre nom</p>")
     
                        }  
                        if(data.message == "message") {
     
                          $('#messageError').append("<p>vous n'avez pas mis de message</p>")
     
                        }
                  },
                  error: function(jqXHR, textStatus, errorThrown) {
                  alert('An error occurred... Look at the console (F12 or Ctrl+Shift+I, Console tab) for more information!');
     
                  $('#result').html('<p>status code: '+jqXHR.status+'</p><p>errorThrown: ' + errorThrown + '</p><p>jqXHR.responseText:</p><div>'+jqXHR.responseText + '</div>');
                  console.log('jqXHR:');
                  console.log(jqXHR);
                  console.log('textStatus:');
                  console.log(textStatus);
                  console.log('errorThrown:');
                  console.log(errorThrown);
              },
                  dataType: 'json'
                });
            }
     
     
     
     
            });
    merci d'avance et à bientôt

    Cyril

  2. #2
    Rédacteur/Modérateur
    Avatar de jreaux62
    Homme Profil pro
    Webdesigner
    Inscrit en
    août 2008
    Messages
    10 385
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Arts - Culture

    Informations forums :
    Inscription : août 2008
    Messages : 10 385
    Points : 20 733
    Points
    20 733

    Par défaut

    Bonjour,

    ...les visiteur(trice)s...
    Ah tiens, "visitrices"....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ...donc je suppose que c'est mon App::getInstance qui pose problème...
    Bingo ! Tu as bien deviné.

    Le fait est qu'un fichier appelé via Ajax est "externe", donc "indépendant".

    Donc, il faut y INCLURE les librairies, classes,... bref, TOUT ce qui est nécessaire à son fonctionnement.
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    include('......');
    // ou
    require('......');
    "Si tu suis le chemin qui s'appelle « plus tard », tu arriveras à la place qui s'appelle « jamais »."
    François Camille Prévot (1910-1996), instituteur puis Directeur d'école et... mon grand-père.
    "Pose ta question, tu seras idiot une seconde. Ne la pose pas, tu seras idiot toute ta vie."
    Albert Einstein (1879-1955).
    Mes tutos DVP
    Gestion-Affichage de Nouvelles
    Affichage en tableau HTML
    Fonctions de redimensionnement d'images

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur multimédia
    Inscrit en
    juin 2015
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur multimédia
    Secteur : Arts - Culture

    Informations forums :
    Inscription : juin 2015
    Messages : 49
    Points : 60
    Points
    60

    Par défaut

    oups en fait des fois j'emploie utilisateur(trice), j'ai du faire un lapsus en écrivant sorry
    avec l'écrite épicène je me fous dedans des fois

  4. #4
    Membre du Club
    Homme Profil pro
    Développeur multimédia
    Inscrit en
    juin 2015
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur multimédia
    Secteur : Arts - Culture

    Informations forums :
    Inscription : juin 2015
    Messages : 49
    Points : 60
    Points
    60

    Par défaut

    Super merci pour ta réponse
    je ne savais pas qu'un fichier appelé via ajax était indépendant
    donc j'ai fait beaucoup de blabla pour un truc tout con mais j'ai appris quelque chose
    merci beaucoup pour l'info
    A+

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

Discussions similaires

  1. Parcours d'un fichier et insertion dans une base de données !
    Par condor_01 dans le forum Général Java
    Réponses: 2
    Dernier message: 24/04/2008, 10h24
  2. [paradox7] Problème d'insertion dans la base de données
    Par mouna201 dans le forum Bases de données
    Réponses: 4
    Dernier message: 01/02/2006, 10h47
  3. problème d'insertion dans une base de données
    Par belmansour tidjani dans le forum JDBC
    Réponses: 7
    Dernier message: 18/01/2006, 23h13
  4. [Hibernate] problème d'insertion dans la base de données
    Par Willy7901 dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 18/08/2005, 14h19
  5. Probleme d'insertion dans la base de données
    Par PrinceMaster77 dans le forum ASP
    Réponses: 5
    Dernier message: 11/06/2004, 17h21

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