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

AJAX Discussion :

Ajax et insertion dans la base de données


Sujet :

AJAX

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

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

    Informations forums :
    Inscription : Juin 2015
    Messages : 50
    Points : 61
    Points
    61
    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
    Invité
    Invité(e)
    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('......');

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

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

    Informations forums :
    Inscription : Juin 2015
    Messages : 50
    Points : 61
    Points
    61
    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
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Juin 2015
    Messages : 50
    Points : 61
    Points
    61
    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, 09h24
  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, 09h47
  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, 22h13
  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, 13h19
  5. Probleme d'insertion dans la base de données
    Par PrinceMaster77 dans le forum ASP
    Réponses: 5
    Dernier message: 11/06/2004, 16h21

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