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] Requêtes SQL INSERT INTO et UPDATE en utilisant AJAX


Sujet :

AJAX

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 278
    Points : 74
    Points
    74
    Par défaut [AJAX] Requêtes SQL INSERT INTO et UPDATE en utilisant AJAX
    Bonjour,

    Je souhaiterais faire des requêtes SQL INSERT INTO et UPDATE en utilisant AJAX. Je vous explique : j'ai une page qui affiche l'intégralité du cours. Après chaque question, j'ai mis un <textarea> (avec un compteur qui s'incrémente) pour que l'internaute puisse saisir sa réponse. J'aimerais qu'en quittant un <textarea> (évènement onChange), la réponse de l'internaute s'enregistre dans la base de données (avec bien sûr les bons identifiants de la question et de l'utilisateur). A noter qu'une question est dans uniquement un cours.

    Pour cela, j'utilise ces deux fonctions javascript :
    Code javascript : 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
    <script type='text/javascript'>
    function init_xhr() {
        if (window.XMLHttpRequest) // Firefox
     
            xhr = new XMLHttpRequest();
     
        else {
     
            if (window.ActiveXObject) // Internet Explorer
     
               xhr = new ActiveXObject("Microsoft.XMLHTTP");
     
            else { // XMLHttpRequest non supporté par le navigateur
     
                alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
     
                return;
            }
        }
        return xhr;
    }
    </script>
     
    <script type='text/javascript'>
    function go(tp_rep_id, reponse) {
     
        var xhr = init_xhr();
     
        xhr.onreadystatechange = function () {
     
            if (xhr.readyState == 4 && xhr.status == 200) {
     
                reponse = xhr.responseText;
     
                if (reponse=="0") document.getElementById("image" + tp_rep_id).innerHTML = "<img src=tp_en_attente.png align=left title='En attente de validation' />";
     
                if (reponse=="1") document.getElementById("image" + tp_rep_id).innerHTML = "<img src=en_travaux.png align=left title='Réponse incomplète' />";
     
                if (reponse=="4") document.getElementById("image" + tp_rep_id).innerHTML = "<img src=tp_validee.png align=left title='Réponse OK' />";
     
            }
        }
     
        xhr.open("POST", "fichier_traitement.php", true);
     
        xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
        /* Utilisation des variables PHP (identifiants du cours et de l'utilisateur) - Il détecte les bons identifiants (cours, l'utilisateur connecté) */
        var id_cours_tp = '<?php echo $id_cours_tp; ?>'; /* A mon avis, ce n'est pas la peine de transférer l'identifiant du cours puisqu'une question ne peut pas être dans plusieurs cours ! */
    	var id_utilisateur = '<?php echo $query_recuperation_identifiant_connecte; ?>';
    	var id_question = ''; 
    	// Cette ligne ne va pas (il faut qu'il transfère dans le traitement PHP les identifiants du cours, de l'utilisateur connecté, de l'identifiant de la bonne question et la réponse saisie) pour pouvoir les mettre dans la requête SQL INSERT INTO, de plus il faut voir comment récupérer l'identifiant de la bonne question pour la transférer dans le traitement PHP
    	message = "id_cours_tp=" + id_cours_tp + "id_utilisateur=" + id_utilisateur + "tp_rep_id=" + tp_rep_id + encodeURIComponent(reponse); // en faisant un  alert(reponse);, il prend en compte la réponse saisie, en faisant un alert(message); , il prend en compte les identifiants du cours, de l'utilisateur (j'ai ajouté tp_rep_id pour qu'il prenne en compte l'identifiant et le contenu de la réponse) et du contenu de la réponse
     
    	document.getElementById("image" + tp_rep_id).innerHTML = "<img src=progressbar.gif align=left title='En attente du serveur' width=24 />";
    }
    </script>

    Voici le code du <textarea> sur l'évènement onChange (il faudra faire en sorte que s'il y a la réponse de l'utilisateur dans la base de données, elle s'affiche dans le <textarea>) :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    // Affichage des questions (avec le compteur) du chapitre, s'il y en a
    if ($row['contenu_question']) {
    	$compteur_question++;
    	echo '<div class="exercice"><ul><li>'.$row['contenu_question'].'</li></ul><a name="question'.$compteur_question.'"></a>
            <div class="reponse_cours_tp">Votre réponse <b>n°'.$compteur_question.'</b>
            <div style="position:relative; top:1.5em;left:0em;float:left;" id="image'.$compteur_question.'"></div>:<br /><textarea onkeyup="dynamicHeight(this);" rows="1" style="height: 40px;" cols="80" name="reponse'.$compteur_question.'" onChange="go('.$compteur_question.', this.value);"></textarea>
    </div></div>';
    }

    Avec ce code (les deux fonctions javascript), uniquement l'icône "En attente du serveur" s'affiche quelque soit la réponse saisie. Il utilise le bon identifiant de l'utilisateur. Comme vous pouvez le voir dans les codes, j'ai mis des commentaires.

    A mon avis, il faut changer le contenu de la variable "message" puisqu'il faut transmettre les différentes variables (identifiant de la bonne question, identifiant de l'utilisateur connecté et le contenu de la réponse saisie encodé pour gérer les caractères spéciaux) vers le fichier du traitement PHP. Justement, ce fichier doit récupérer l'identifiant de la question, l'identifiant de l'utilisateur, le contenu de la réponse saisie encodée de la zone de texte <textarea> active.

    Dans ce fichier, j'ai fait un test pour vérifier l'existence d'une réponse : s'il y en n'a pas, il faut faire la requête SQL d'insertion (INSERT INTO) sinon il ne faut pas en insérer une mais la modifier (UPDATE). Pour ce faire, j'ai mis le code suivant mais lors des essais il n'effectue pas les requêtes SQL (affichage d'une seule icône : "En attente du serveur"). Quand je teste les requêtes SQL dans PHPMyAdmin, elles fonctionnent.

    De plus, quand j'accède au fichier en passant par l'adresse URL, ce message s'affiche : "Vous n'avez pas le droit !!!".
    La transmission des variables entre la page qui permet d'afficher un cours et le traitement PHP qui permet la requête SQL (soit INSERT INTO soit UPDATE) ne s'effectue pas d'où pourquoi l'icône "En attente du serveur" s'affiche quelque soit la réponse saisie.


    Voici le code de traitement 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
    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
    <?php
    include('config_bdd.php');
    // On ouvre la session pour la transmission des variables
    session_start(); // Démarre une nouvelle session ou reprend une session existante
     
    // Récupération des variables
    //$id_cours_tp = (isset($_POST["id_cours_tp"])) ? $_POST["id_cours_tp"] : NULL; // Ce n'est même pas la peine de transférer l'identifiant du cours puisqu'une question est dans un seul cours !
    $id_utilisateur = (isset($_POST["id_utilisateur"])) ? $_POST["id_utilisateur"] : NULL;
    $id_question = (isset($_POST["id_question"])) ? $_POST["id_question"] : NULL;
    $contenu_reponse = (isset($_POST["contenu_reponse"])) ? $_POST["contenu_reponse"] : NULL; // A voir, il faut récupérer ce que l'utilisateur a écrit comme réponse
    // Sélection des réponses pour insérer ou modifier les données dans la base de données
    $selection_reponse=mysql_query("
    SELECT texte_reponse
    FROM reponses
    WHERE id_question='".$id_question."'")
    or die('Erreur lors de la sélection des réponses d\'un Cours/TP'.mysql_error()); // Envoie une requête à un serveur MySQL
     
    // On teste si les valeurs existent - à voir pour $contenu_reponse
    if (isset($id_utilisateur)&&(isset($id_question))) {// && $contenu_reponse
    	// S'il n'y a aucune réponse dans la base de données, il faut l'insérer
    	if(mysql_num_rows($selection_reponse)==0) {
    		// Insertion dans la base de données des réponses de l'utilisateur
    		$insertion_reponses = "
                    INSERT INTO reponses (auteur_reponse,id_question,texte_reponse,date_maj_reponse)
                    SELECT auteur_reponse,'$id_question','$contenu_reponse',now()
                    FROM reponses, test_site_utilisateur
                    WHERE test_site_utilisateur.pseudo_utilisateur=reponses.auteur_reponse";
    		$query_insertion_reponses = mysql_query($insertion_reponses)
                    or die('Erreur sur la requête SQL qui insère les réponses de l\'utilisateur aux questions.'.mysql_error());
    	}
    	else
    		// S'il y a déjà une réponse dans la base de données, il faut la modifier
    		$modification_reponses = "
                    UPDATE reponses
                    SET auteur_reponse=
                    (SELECT pseudo_utilisateur
                    FROM test_site_utilisateur
                    WHERE pseudo_utilisateur=auteur_reponse),id_question='$id_question',texte_reponse='$contenu_reponse',date_maj_reponse=now()";
    		$query_modification_reponses = mysql_query($modification_reponses)
                    or die('Erreur sur la requête SQL qui modifie les réponses de l\'utilisateur aux questions.'.mysql_error());
    }
    else {
    	// Message si les variables sont vides, nulles
    	echo "Vous n'avez pas le droit !!!";
    }
    ?>

    Comment faire pour que quand on poste une réponse, la requête SQL s'exécute (avec le bon identifiant de la question et le contenu de la réponse saisie) puis affiche la bonne icône (c'est-à-dire
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (reponse=="0") document.getElementById("image" + tp_rep_id).innerHTML = "<img src=tp_en_attente.png align=left title='En attente de validation' />";
     
    if (reponse=="1") document.getElementById("image" + tp_rep_id).innerHTML = "<img src=en_travaux.png align=left title='Réponse incomplète' />";
     
    if (reponse=="4") document.getElementById("image" + tp_rep_id).innerHTML = "<img src=tp_validee.png align=left title='Réponse OK' />";
    ) et si on accède au traitement PHP sans poster de réponse, un message d'erreur s'affiche au lieu de faire la requête SQL ?

    Comme je l'ai mis en commentaire dans les codes, je ne pense pas qu'il est nécessaire de transmettre l'identifiant du cours puisqu'une question ne peut pas être dans plusieurs cours mais dans un seul.

    Je viens vers vous après avoir essayé.

    Cordialement

    Note du mercredi 9 avril 2013 : Dans la fonction go, j'ai modifié le contenu de la variable message donc cette ligne : message = "id_cours_tp=" + id_cours_tp + "id_utilisateur=" + id_utilisateur + "tp_rep_id=" + tp_rep_id + encodeURIComponent(reponse);
    -En faisant un alert(reponse);, il prend en compte la réponse saisie.
    -En faisant un alert(message);, il prend en compte les identifiants du cours, de l'utilisateur (j'ai ajouté tp_rep_id pour qu'il prenne en compte l'identifiant et le contenu de la réponse) et du contenu de la réponse.
    -En faisant alert(message);, dans la boite de dialogue il affiche les identifiants de l'utilisateur, du cours et de la réponse.
    En ce qui concerne celui de la réponse, il renvoie son identifiant mais par rapport à la page et non à celui de la base de données : il faudra donc trouver un moyen pour qu'il sélectionne et envoie le bon identifiant dans la base de données.

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    181
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 181
    Points : 189
    Points
    189
    Par défaut
    Bonjour,

    Ne l'ayant pas comprise, je ne vais pas répondre à la question
    Mais pourquoi ne pas faire le test d'insert ou update sur la sortie du champ de réponse ?

    pouvez vous préciser la question ?
    ...

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 278
    Points : 74
    Points
    74
    Par défaut
    L'objectif recherché est tout simple.

    Je voudrais que quand l'utilisateur quitte la zone de texte (évenement onChange) :

    - s'il n'y a pas de réponse dans la base de données alors il l'insère avec les bons identifiants (dans la table reponses) -> Requête SQL : INSERT INTO
    - s'il y a déjà une réponse dans la base de données (c'est-à-dire si l'utilisateur change sa réponse) alors il la modifie avec les bons identifiants (dans la table reponses) -> Requête SQL : UPDATE
    - suivant l'état du onreadystatechange, une icône s'affiche (fichiers tp_en_attente.png, en_travaux.png, tp_validee.png, progressbar.gif) à côté de la réponse correspondante. Actuellement, seule progressbar.gif s'affiche.

    En fait, c'est juste pour faire soit une requête SQL INSERT INTO soit une requête SQL UPDATE et afficher une icône suivant ce que renvoie onreadystatechange à côté de la réponse saisie sans recharger la page donc dynamiquement.

  4. #4
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 278
    Points : 74
    Points
    74
    Par défaut
    Je reviens vers vous pour vous signaler que j'en suis toujours au même point. La transmission entre les deux pages ne s'effectue pas : Quand j'affiche une alerte sur la page qui permet d'envoyer les données vers le traitement PHP, il m'indique les bonnes valeurs alors que sur la page du traitement PHP, il n'y a aucune variable qui est transmise. En résumé, la liaison entre les deux fichiers ne se fait pas.

    Est-ce que quelqu'un pourrait m'indiquer, avec son code, comment faut-il faire pour que des variables soient transmises entre les deux pages en utilisant AJAX et l'objet xhr pour utiliser les variables transmises dans des requêtes SQL INSERT INTO ou UPDATE ?

  5. #5
    Membre confirmé Avatar de freddou17
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2013
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2013
    Messages : 341
    Points : 566
    Points
    566
    Par défaut
    A aucun moment je ne vois de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    xhr.send(parametresAenvoyer)... (Ajax mtd POST)
    dans ta fonction go

    je n'ai pas regardé dans le code en détail du coup je peux me tromper
    "Aucun de nous ne sait ce que nous savons tous, ensemble."
    Lien vers mon appli Funcash n'hésitez pas à donner votre avis

  6. #6
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 278
    Points : 74
    Points
    74
    Par défaut
    Voici les deux scripts javascript actualisé (j'ai juste modifié le nom des variables par rapport au précédent) :
    Code javascript : 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
    function init_xhr() {
        if (window.XMLHttpRequest) // Firefox
     
            xhr = new XMLHttpRequest();
     
        else {
     
            if (window.ActiveXObject) // Internet Explorer
     
               xhr = new ActiveXObject("Microsoft.XMLHTTP");
     
            else { // XMLHttpRequest non supporté par le navigateur
     
                alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
     
                return;
            }
        }
        return xhr;
    }
    </script>
     
    <script type='text/javascript'>
    function go(id_cours_rep, reponse) {
     
        var xhr = init_xhr();
     
        xhr.onreadystatechange = function () {
     
            if (xhr.readyState == 4 && xhr.status == 200) {
     
                reponse = xhr.responseText;
     
                if (reponse=="0") document.getElementById("image" + id_cours_rep).innerHTML = "<img src=tp_en_attente.png align=left title='En attente de validation' />";
     
                if (reponse=="1") document.getElementById("image" + id_cours_rep).innerHTML = "<img src=en_travaux.png align=left title='Réponse incomplète' />";
     
                if (reponse=="4") document.getElementById("image" + id_cours_rep).innerHTML = "<img src=tp_validee.png align=left title='Réponse OK' />";
     
            }
        }
        xhr.open("POST", "fichier_destination.php", true);
     
        xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
        /* Utilisation des variables PHP (identifiants du cours et de l'utilisateur) - Il détecte les bons identifiants (cours, l'utilisateur connecté) */
        var id_cours_tp = '<?php echo $id_cours_tp; ?>'; /* A mon avis, ce n'est pas la peine de transférer l'identifiant du cours puisqu'une question ne peut pas être dans plusieurs cours ! */
    	var id_utilisateur = '<?php echo $query_recuperation_identifiant_connecte; ?>';
    	// Cette ligne ne va pas (il faut qu'il transfère dans le traitement PHP les identifiants du cours, de l'utilisateur connecté, de l'identifiant de la bonne question et la réponse saisie) pour pouvoir les mettre dans la requête SQL INSERT INTO
    	message = "id_cours_tp=" + id_cours_tp + "id_utilisateur=" + id_utilisateur + "id_cours_rep=" + id_cours_rep + encodeURIComponent(reponse); // en faisant un  alert(reponse);, il prend en compte la réponse saisie, en faisant un alert(message); , il prend en compte les identifiants du cours, de l'utilisateur (j'ai ajouté id_cours_rep pour qu'il prenne en compte l'identifiant et le contenu de la réponse)
     
    	xhr.send (message); // Cette ligne n'envoie pas les données sur la page de traitement PHP
     
    	document.getElementById("image" + id_cours_rep).innerHTML = "<img src=progressbar.gif align=left title='En attente du serveur' width=24 />";
    }
    </script>

    Pour information, j'ai mis des commentaires.

  7. #7
    Membre confirmé Avatar de freddou17
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2013
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2013
    Messages : 341
    Points : 566
    Points
    566
    Par défaut
    dans ton php tu as

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $id_utilisateur = (isset($_POST["id_utilisateur"])) ? $_POST["id_utilisateur"] : NULL;
    $id_question = (isset($_POST["id_question"])) ? $_POST["id_question"] : NULL;
    $contenu_reponse = (isset($_POST["contenu_reponse"])) ? $_POST["contenu_reponse"] : NULL;

    les parametres que tu t'attends à recevoir sont id_utilisateur;id_question;contenu_reponse .

    Dans ton js tu as

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    message = "id_cours_tp=" + id_cours_tp + "id_utilisateur=" + id_utilisateur + "id_cours_rep=" + id_cours_rep + encodeURIComponent(reponse);
    les paramètres envoyés sont id_cours_tp;id_utilisateur;_id_cours_rep

    En comparant simplement ces deux bout de code je ne vois pas comment tu veux récupérer tes infos (à part id_utilisateur)

    PS: je me base sur ton php des premiers post

    Peux tu confirmer mon analyse ou remettre à jour tes sources si celles-ci ont évolués

    ++
    "Aucun de nous ne sait ce que nous savons tous, ensemble."
    Lien vers mon appli Funcash n'hésitez pas à donner votre avis

  8. #8
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 278
    Points : 74
    Points
    74
    Par défaut
    Voici l'actuel traitement 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
    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
    <?php
    session_start();
    include('config_bdd.php');
     
    $message = mysql_real_escape_string($_POST['message']);
    $id_cours_tp = mysql_real_escape_string($_POST['id_cours_tp']);
    $id_cours_rep = mysql_real_escape_string($_POST['id_cours_rep']);
    $reponse = mysql_real_escape_string($_POST['reponse']);
    if  (isset($_POST['id_cours_tp']) )
    { 
    echo "ça passe";
    // Sélection des réponses pour insérer ou modifier les données dans la base de données
    $selection_reponse=mysql_query("
    SELECT texte_reponse
    FROM reponse
    WHERE id_question='".$id_cours_rep."'")
    or die('Erreur lors de la sélection des réponses d\'un Cours/TP'.mysql_error()); // Envoie une requête à un serveur MySQL
    	// S'il n'y a aucune réponse dans la base de données, il faut l'insérer
    	if(mysql_num_rows($selection_reponse)==0) {
    		// Insertion dans la base de données des réponses de l'utilisateur
    		$insertion_reponses = "
                    INSERT INTO reponses (auteur_reponse,id_question,texte_reponse,date_maj_reponse)
                    SELECT auteur_reponse,'$id_cours_rep','$reponse',now()
                    FROM reponses, test_site_utilisateur
                    WHERE test_site_utilisateur.pseudo_utilisateur=reponses.auteur_reponse";
    		$query_insertion_reponses = mysql_query($insertion_reponses)
                    or die('Erreur sur la requête SQL qui insère les réponses de l\'utilisateur aux questions.'.mysql_error());
    	}
    	else
    		// S'il y a déjà une réponse dans la base de données, il faut la modifier
    		$modification_reponses = "
                    UPDATE reponses
                    SET auteur_reponse=(SELECT pseudo_utilisateur
                    FROM test_site_utilisateur
                    WHERE pseudo_utilisateur=auteur_reponse),id_question='$id_cours_rep',texte_reponse='$contenu_reponse',date_maj_reponse=now()";
    		$query_modification_reponses = mysql_query($modification_reponses)
    or die('Erreur sur la requête SQL qui modifie les réponses de l\'utilisateur aux questions.'.mysql_error());
    echo "fin";
    }
    // On teste si les requêtes SQL sont exécutées 
    if($insertion_reponses||$modification_reponses){ 
       $reponse_insertion="Insertion de la requête SQL d'insertion ".$insertion_reponses." réussie dans la BDD "; 
    }else{ 
         $reponse_insertion="La requête d'insertion n'a pas fonctionnée<br />";
    	 $reponse_insertion="La requête de modification n'a pas fonctionnée"; 
    } 
    //envoi de la réponse à Ajax 
    echo $insertion_reponses; 
    ?>

  9. #9
    Membre confirmé Avatar de freddou17
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2013
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2013
    Messages : 341
    Points : 566
    Points
    566
    Par défaut
    Je crois savoir...j'espère
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    message = "id_cours_tp=" + id_cours_tp + "id_utilisateur=" + id_utilisateur + "id_cours_rep=" + id_cours_rep
    doit s'écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    //tu as oublié le délimiteur de paramètre "&" 
    message = "id_cours_tp=" + id_cours_tp + "&id_utilisateur=" + id_utilisateur + "&id_cours_rep=" + id_cours_rep
    ++
    "Aucun de nous ne sait ce que nous savons tous, ensemble."
    Lien vers mon appli Funcash n'hésitez pas à donner votre avis

  10. #10
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 278
    Points : 74
    Points
    74
    Par défaut
    En l'essayant avec cette modification, ça fait la même chose qu'avant (affichage de l'icône progressbar.gif, aucune requête SQL effectuée). Quand je vais sur la page du traitement PHP où j'ai rien modifié (en passant par l'adresse URL), une page blanche s'affiche.

    Pour information sur la page du traitement, quand je met :
    -if (isset($_POST['id_cours_tp'])) { : une page blanche s'affiche
    -if (empty($_POST['id_cours_tp'])) { : ça rentre dans le test if

    Voici ce que je voudrais :
    J'ai une page qui affiche un cours. Après chaque question, il y a un <textarea> qui s'affiche pour que l'internaute puisse saisir sa réponse. J'aimerais qu'en sortant du <textarea> (évènement onChange) avec la fonction go()), soit sa réponse :
    -s'insère (si c'est la première)
    -se modifie (s'il y a déjà la réponse)
    En gros, faire des requêtes SQL en passant par l'AJAX !!! C'est tout !!!

  11. #11
    Membre confirmé Avatar de freddou17
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2013
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2013
    Messages : 341
    Points : 566
    Points
    566
    Par défaut
    Ha! j'y croyais car sans "&" ça ne pouvait pas marcher...

    J'ai bien compris ton besoin et il n'y a rien de sorcier dans ce que tu veux faire...

    1. Peux tu faire un echo de $POST et me donner l'ensemble de son contenu
    2. A partir de firebug peux tu regarder les paramètres envoyés (onglet réseau).
    3. Peux tu me dire à quoi correspond ta variable "reponse" (en détail) stp.
    4. Peux tu remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    if (xhr.readyState == 4 && xhr.status == 200) {
     
                reponse = xhr.responseText;
     
                if (reponse=="0") document.getElementById("image" + id_cours_rep).innerHTML = "<img src=tp_en_attente.png align=left title='En attente de validation' />";
     
                if (reponse=="1") document.getElementById("image" + id_cours_rep).innerHTML = "<img src=en_travaux.png align=left title='Réponse incomplète' />";
     
                if (reponse=="4") document.getElementById("image" + id_cours_rep).innerHTML = "<img src=tp_validee.png align=left title='Réponse OK' />";
     
            }
    par:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if (xhr.readyState == 4 && xhr.status == 200) {
     
                alert(xhr.responseText);
            }
    Le but étant d"éliminer différentes pistes, tu peux aussi de faire un fichier testAjax.php et tu test le 1) et le retour (sans mettre de requete...).
    "Aucun de nous ne sait ce que nous savons tous, ensemble."
    Lien vers mon appli Funcash n'hésitez pas à donner votre avis

  12. #12
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 278
    Points : 74
    Points
    74
    Par défaut
    Citation Envoyé par freddou17 Voir le message
    1. Peux tu faire un echo de $POST et me donner l'ensemble de son contenu
    En mettant <?php echo "POST = ".$POST;?> lors du test, il affiche POST =. Quand je saisi quelque chose dans un <textarea>, il n'y a pas de modification mais c'est normal car c'est du PHP et pas du javascript.
    Citation Envoyé par freddou17 Voir le message
    2. A partir de firebug peux tu regarder les paramètres envoyés (onglet réseau).
    Quand j'essaye d'insérer une réponse (saisie d'un texte dans un <textarea> avant de sortir de la zone de texte) en regardant sur firebug dans l'onglet réseau, puis dans xhr, voici ce que ça met :
    l'adresse URL, le statut (200 OK, le domaine, le poids, l'adresse IP, la chronologie). Par cette ligne, j'en déduis que l'envoi s'exécute mais qu'il n'y a aucune réponse en retour.
    Citation Envoyé par freddou17 Voir le message
    3. Peux tu me dire à quoi correspond ta variable "reponse" (en détail) stp.
    Voici le contenu de la variable "reponse" : message = "id_cours_tp=" + id_cours_tp + "&id_utilisateur=" + id_utilisateur + "&id_cours_rep=" + id_cours_rep + "&reponse="+ encodeURIComponent(reponse); que j'envoie avec xhr.send (message);. Avec ça, je voudrais transmettre les identifiants du cours, de l'utilisateur, de la réponse à la page du traitement PHP. Par contre, je ne sais pas pourquoi : une fois la première réponse postée quand je poste une autre réponse, il ne passe pas à la deuxième réponse mais reste sur la première.

    Citation Envoyé par freddou17 Voir le message
    4. Peux tu remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    if (xhr.readyState == 4 && xhr.status == 200) {
     
                reponse = xhr.responseText;
     
                if (reponse=="0") document.getElementById("image" + id_cours_rep).innerHTML = "<img src=tp_en_attente.png align=left title='En attente de validation' />";
     
                if (reponse=="1") document.getElementById("image" + id_cours_rep).innerHTML = "<img src=en_travaux.png align=left title='Réponse incomplète' />";
     
                if (reponse=="4") document.getElementById("image" + id_cours_rep).innerHTML = "<img src=tp_validee.png align=left title='Réponse OK' />";
     
            }
    par:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if (xhr.readyState == 4 && xhr.status == 200) {
     
                alert(xhr.responseText);
            }
    Lors de l'envoi de la réponse, une boite de dialogue s'affiche dans laquelle il n'y a rien d'écrit (que le bouton "OK") sur Firefox.

    Est-ce que tu veux que je te mettes en pièces jointes les fichiers (le fichier qui doit envoyer la réponse et le fichier qui doit récupérer les données pour les mettre dans les requêtes SQL) pour que tu vois par toi même ? Je ne sais pas si je me fais bien comprendre à travers les messages postés.
    Sinon, on repart de zéro : tu postes les deux codes (celui pour envoyer et celui pour récupérer les données) et on adapte pour faire ce que je voudrais.
    Pour information : après avoir réussi ça, je voudrais faire un tableau de bord qui permettra de valider ou d'invalider en postant des commentaires. Je te dit ça pour que tu aies une vision d'ensemble afin qu'on puisse aller dans le bon chemin !

  13. #13
    Membre confirmé Avatar de freddou17
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2013
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2013
    Messages : 341
    Points : 566
    Points
    566
    Par défaut
    Pour le $POST je parlais du $_POST (un foreach dessus en gros).

    Ouai je veux bien tes fichier js html et php stp

    ++
    "Aucun de nous ne sait ce que nous savons tous, ensemble."
    Lien vers mon appli Funcash n'hésitez pas à donner votre avis

  14. #14
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 278
    Points : 74
    Points
    74
    Par défaut
    Voici les deux fichiers PHP fichier_envoi.php et sauvegarde_reponses_cours_tp.php.
    Les deux scripts javascript sont dans fichier_envoi.php.
    J'ai supprimé les blocs qui ne posent pas de problème.

    Le but recherché : l'utilisateur poste ses réponses à partir de fichier_envoi.php, j'aimerais les envoyer dans le fichier sauvegarde_reponses_cours_tp.php qui se chargera de faire soit les insertions soit les modifications dans la base de données.Pièce jointe 143331Pièce jointe 143332

  15. #15
    Membre confirmé Avatar de freddou17
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2013
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2013
    Messages : 341
    Points : 566
    Points
    566
    Par défaut
    Salut,

    J'ai repris tes fichier en bouchonnant les appels à la BDD. Effectivement j'ai une erreur 'Undefined index" que j'aurais du voir avant (toi aussi )

    1)
    dans ton fichier sauvegarde_reponses tu as:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $message = mysql_real_escape_string($_POST['message']);
    mais dans dans fichier_envoie tu as:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      message = "id_cours_tp=" + id_cours_tp + "&id_utilisateur=" + id_utilisateur + "&id_cours_rep=" + id_cours_rep + "&reponse="+ encodeURIComponent(reponse);
      xhr.send (message);
    à aucun moment tu transmets le paramètre "message"

    2)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (!empty($_POST['id_cours_tp'])) {
    Rajoute le point d'exclamation car ton dans ton cas tu as toujours un id_cours_tp de transmis et ton traitement ne s'effectuera que s'il est vide enfin empty(). je suppose que ce n'est pas ce que tu veux????

    extrait du manuel

    Retourne FALSE si var existe et est non-vide, et dont la valeur n'est pas zéro.

    Ce qui suit est considéré comme étant vide :

    "" (une chaîne vide)
    0 (0 en tant qu'entier)
    0.0 (0 en tant que nombre à virgule flottante)
    "0" (0 en tant que chaîne de caractères)
    NULL
    FALSE
    array() (un tableau vide)
    $var; (une variable déclarée, mais sans valeur)


    3)
    Rajoute
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    echo $id_cours_tp;
    echo $id_cours_rep;
    echo $reponse;
    juste après

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $id_cours_tp = mysql_real_escape_string($_POST['id_cours_tp']);
    $id_cours_rep = mysql_real_escape_string($_POST['id_cours_rep']);
    $reponse = mysql_real_escape_string($_POST['reponse']);
    et dans ton appel ajax

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      reponse = xhr.responseText;
      alert(reponse);
    à la place de:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    reponse = xhr.responseText;
     
                if (reponse=="0") document.getElementById("image" + id_cours_rep).innerHTML = "<img src=../ressources_site/img/cours_tp_dynamiques/tp_en_attente.png align=left title='En attente de validation' />";
     
                if (reponse=="1") document.getElementById("image" + id_cours_rep).innerHTML = "<img src=../ressources_site/img/cours_tp_dynamiques/en_travaux.png align=left title='Réponse incomplète' />";
     
                if (reponse=="4") document.getElementById("image" + id_cours_rep).innerHTML = "<img src=../ressources_site/img/cours_tp_dynamiques/tp_validee.png align=left title='Réponse OK' />";

    pour moi ça marche avec l'appel à la function

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <script>
    go(2, "testReponse");
    </script>
    Je te laisse refaire des tests avec les infos ci-dessus:

    PI:
    - J'ai bouchonné les variables de session
    - Supprimé les liens vers tes images
    - supprimé include du fichier de cnx BDD
    - Tu trouveras un screen de mon firebug en PJ
    Images attachées Images attachées  
    "Aucun de nous ne sait ce que nous savons tous, ensemble."
    Lien vers mon appli Funcash n'hésitez pas à donner votre avis

  16. #16
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 278
    Points : 74
    Points
    74
    Par défaut
    Je l'ai remplacé par message = "message=" + message + "id_cours_tp=" + id_cours_tp + "&id_utilisateur=" + id_utilisateur + "&id_cours_rep=" + id_cours_rep + "&reponse="+ encodeURIComponent(reponse);.


    J'ai modifié mais je n'arrive pas à avoir comme toi. En pièces jointes, tu trouveras les deux "vrais" fichiers. Est-ce que tu peux faire les modifications sur ces deux pages et me les renvoyer STP ?

    Il y aura toujours un id_cours_tp qui sera transmis entre les deux pages.

    Nouvel essai : Avec message = "id_cours_tp=" + id_cours_tp + "&id_utilisateur=" + id_utilisateur + "&id_cours_rep=" + id_cours_rep + "&reponse="+ encodeURIComponent(reponse);, il y a une transmission à chaque ouverture de page, j'ai supposé que c'était dû à : <script>go(2, "testReponse");</script>. Je l'ai, donc, supprimé et la transmission s'effectue !!!
    Pour être sûr je t'ai mis en pièces jointes les fichiers.

    Est-ce que tu peux tout vérifier pour voir si tu ne remarques rien d'anormal STP ?

    Quand je fais un test, il y a ce message qui s'affiche : le bon identifiant du cours, le bon identifiant de la question, Erreur sur la requête SQL qui modifie les réponses de l\'utilisateur aux questions. Query was empty (sans espace). Normalement, ça devrait faire la requête SQL INSERT INTO avant UPDATE. Je continue de chercher et je poste s'il y a quelque chose de neuf comme j'ai fait là ! A mon avis, le traitement PHP ne reçoit pas les données envoyées. Aucune requête SQL s'exécute du fait du message d'erreur.

    Quand on obtient le message d'erreur Query was empty, c'est parce que la requête SQL est vide. Comment faire pour qu'il insère les données envoyées ?

    Nouvel essai (2) : J'ai mis la dernière version du traitement PHP en pièce jointe. J'ai modifié if(mysql_num_rows($selection_reponse)==0) { en mettant if(mysql_num_rows($selection_reponse)==1) {. La requête s'est exécutée INSERT INTO lors de la première insertion (le premier essai). Je précise, ça a marché qu'une fois !!! Concernant l'identifiant de la question, il insère l'identifiant de la question issu de la page, il faudrait qu'il aille chercher l'identifiant de la bonne question dans la table questions pour pouvoir le rendre exploitable. Quand je change de cours, plus rien ne s'insère dans la base de données.

  17. #17
    Membre confirmé Avatar de freddou17
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2013
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2013
    Messages : 341
    Points : 566
    Points
    566
    Par défaut
    il y a ce message qui s'affiche : le bon identifiant du cours, le bon identifiant de la question, Erreur sur la requête SQL qui modifie les réponses de l\'utilisateur aux questions
    ce message veut dire que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    echo $id_cours_tp; // est transmis
    echo $id_cours_rep;//est tranmis
    echo $reponse;// reponse est vide
    ensuite il y quelque chose de bizar

    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
    if (!empty($_POST['id_cours_tp'])) { 
    echo "ça passe, ça avance...";
    // Sélection des réponses pour insérer ou modifier les données dans la base de données
    $selection_reponse=mysql_query("SELECT texte_reponse FROM reponses WHERE id_question='".$id_cours_rep."'") or die('Erreur lors de la sélection des réponses d\'un Cours/TP'.mysql_error()); // Envoie une requête à un serveur MySQL
    	// S'il n'y a aucune réponse dans la base de données, il faut l'insérer
    	if(mysql_num_rows($selection_reponse)==1) { // devrait être == 0, non?
    		// Insertion dans la base de données des réponses de l'utilisateur
    		$insertion_reponses = "INSERT INTO reponses (auteur_reponse,id_question,texte_reponse,date_maj_reponse) SELECT auteur_reponse,'$id_cours_rep','$reponse',now() FROM reponses, test_site_utilisateur WHERE test_site_utilisateur.pseudo_utilisateur=reponses.auteur_reponse";
    		$query_insertion_reponses = mysql_query($insertion_reponses) or die('Erreur sur la requête SQL qui insère les réponses de l\'utilisateur aux questions.'.mysql_error());
    	}
    	else
    		// S'il y a déjà une réponse dans la base de données, il faut la modifier
    		$modification_reponses = "UPDATE reponses SET auteur_reponse=(SELECT pseudo_utilisateur FROM test_site_utilisateur WHERE pseudo_utilisateur=auteur_reponse),id_question='$id_cours_rep',texte_reponse='$contenu_reponse',date_maj_reponse=now()";
    		$query_modification_reponses = mysql_query($modification_reponses) or die('Erreur sur la requête SQL qui modifie les réponses de l\'utilisateur aux questions.'.mysql_error());
    echo "fin";
    }

    dans ton cas si tu remontes 0 tu fais un update ????!!!!
    "Aucun de nous ne sait ce que nous savons tous, ensemble."
    Lien vers mon appli Funcash n'hésitez pas à donner votre avis

  18. #18
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 278
    Points : 74
    Points
    74
    Par défaut
    Oui, j'ai modifié if(mysql_num_rows($selection_reponse)==1) { par if(mysql_num_rows($selection_reponse)==0) {

    Cette requête SQL ne veut pas s'exécuter :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    $insertion_reponses = "INSERT INTO reponses (auteur_reponse,id_question,texte_reponse,date_maj_reponse) SELECT auteur_reponse,questions.id_question,'$reponse',now() FROM reponses,questions,test_site_utilisateur WHERE test_site_utilisateur.pseudo_utilisateur=reponses.auteur_reponse AND questions.id_question='$id_cours_rep'";



    Par contre, si je modifie la requête SQL en mettant
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $insertion_reponses = "INSERT INTO reponses (auteur_reponse,id_question,texte_reponse,date_maj_reponse) VALUES('un auteur (texte en brut)','".$id_cours_rep."','".$reponse."',now())";
    , la requête SQL s'exécute.
    Le problème concerne l'identifiant de la question : il insère l'identifiant de la question par rapport à la page (c'est logique !). Or, je voudrais qu'il aille chercher le bon identifiant de la question dans la table questions d'où la requête SQL ci-dessus qui ne veut pas s'exécuter !

    Nouvel essai : J'ai testé avec en ajoutant reponses.auteur_reponse cette requête SQL :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO reponses (auteur_reponse,id_question,texte_reponse,date_maj_reponse) SELECT reponses.auteur_reponse,questions.id_question,'".$reponse."',now() FROM reponses,questions,test_site_utilisateur WHERE test_site_utilisateur.pseudo_utilisateur=reponses.auteur_reponse AND questions.id_question='".$id_cours_rep."'";
    mais rien ne s'insère avec cette requête SQL.

    A mon avis, je viens de capter pourquoi () : C'est dû à la condition AND questions.id_question='".$id_cours_rep."'";. Il ne faut pas les comparer puisque ça ne pourra jamais être égal. Est-ce que je me rapproche à ton avis ?
    J'ai essayé avec cette requête SQL
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO reponses (id_question,texte_reponse,date_depot,auteur_reponse) SELECT questions.id_question,'".$reponse."',now(),reponses.auteur_reponse FROM reponses,questions,test_site_utilisateur WHERE test_site_utilisateur.pseudo_utilisateur=reponses.auteur_reponse AND reponses.id_question IN(SELECT id_question FROM questions)
    , même résultat !
    J'ai essayé cette requête SQL
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO reponses (id_question,texte_reponse,date_depot,auteur_reponse) SELECT questions.id_question,'".$reponse."',now(),reponses.auteur_reponse FROM reponses,questions,test_site_utilisateur WHERE test_site_utilisateur.pseudo_utilisateur=reponses.auteur_reponse AND reponses.id_question IN (SELECT questions.id_question FROM questions,reponses WHERE questions.id_question=reponses.id_question)
    , même résultat !

    Je te mets en pièce jointe le traitement PHP (dans lequel j'ai mis des commentaires) puisque désormais le problème se trouve ici.

  19. #19
    Membre confirmé Avatar de freddou17
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2013
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2013
    Messages : 341
    Points : 566
    Points
    566
    Par défaut
    Lorsque tu insères une réponse c'est qu'il n'y en a pas à updater donc pour moi la requêtes ci-dessous n'a pas de sens
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    INSERT INTO reponses (id_question,texte_reponse,date_depot,auteur_reponse) 
    SELECT questions.id_question,'".$reponse."',now(),reponses.auteur_reponse FROM reponses,questions,test_site_utilisateur 
    WHERE test_site_utilisateur.pseudo_utilisateur=reponses.auteur_reponse 
    //AND reponses.id_question IN(SELECT id_question FROM questions) //reponses.id_question n'existe pas vu que tu vas l'insérer

    Je t'avoue que je suis perdu sur les infos que tu veux insérer mais normalement
    1 question à 1 cours
    1 question à 0 ou 1 réponse ou n réponses (à toi de me le dire car d'après ton code j'ai l'impression que si une réponse existe pour une question tu l'update, moi j'insérerais toute les réponses. Avec ton MLD ou MCD je verrais plus clair)
    1 réponse à 1 user

    tu peux me donner ton MLD (partie qui nous intéresse).
    le problème de l'AJAX est résolue je pense qu'il faut que tu prennes du recul sur les infos que tu veux insérer, ne cherche pas des requêtes compliquée

    ++ (pense au MLD)
    "Aucun de nous ne sait ce que nous savons tous, ensemble."
    Lien vers mon appli Funcash n'hésitez pas à donner votre avis

  20. #20
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 278
    Points : 74
    Points
    74
    Par défaut
    Citation Envoyé par freddou17 Voir le message
    Lorsque tu insères une réponse c'est qu'il n'y en a pas à updater donc pour moi la requêtes ci-dessous n'a pas de sens
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    INSERT INTO reponses (id_question,texte_reponse,date_depot,auteur_reponse) 
    SELECT questions.id_question,'".$reponse."',now(),reponses.auteur_reponse FROM reponses,questions,test_site_utilisateur 
    WHERE test_site_utilisateur.pseudo_utilisateur=reponses.auteur_reponse 
    //AND reponses.id_question IN(SELECT id_question FROM questions) //reponses.id_question n'existe pas vu que tu vas l'insérer
    J'ai supprimé AND reponses.id_question IN(SELECT id_question FROM questions)
    Citation Envoyé par freddou17 Voir le message
    Je t'avoue que je suis perdu sur les infos que tu veux insérer mais normalement
    1 question à 1 cours
    1 question à 0 ou 1 réponse ou n réponses (à toi de me le dire car d'après ton code j'ai l'impression que si une réponse existe pour une question tu l'update, moi j'insérerais toute les réponses. Avec ton MLD ou MCD je verrais plus clair)
    1 réponse à 1 user

    tu peux me donner ton MLD (partie qui nous intéresse).
    Alors je récapitule :
    -une question appartient uniquement à un cours
    -une question peut avoir 0 ou 1 réponse (pas plus)

    Citation Envoyé par freddou17 Voir le message
    le problème de l'AJAX est résolue je pense qu'il faut que tu prennes du recul sur les infos que tu veux insérer, ne cherche pas des requêtes compliquée
    Effectivement on a réglé le problème de l'AJAX.
    Désormais il faut juste que la table reponse se remplie avec le bon identifiant de la question celui de la table questions.
    Citation Envoyé par freddou17 Voir le message
    ++ (pense au MLD)
    En pièces jointes, je te mets tout les fichiers :
    -Create Table.rtf (les tables SQL)
    -cours_tp_v2bis.php (la page où on poste les réponses)
    -sauvegarde_reponses_cours_tp.php (le traitement PHP qui s'occupe d'exécuter les requêtes SQL)

    Note : La condition WHERE test_site_utilisateur.pseudo_utilisateur=reponses.auteur_reponse me parait pas adéquate pour cette requête SQL puisqu'elle concerne la partie à insérer, je l'ai donc supprimé mais il n'y a pas de changement.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 05/07/2016, 13h52
  2. Requête SQL Insert Into
    Par Requiem11 dans le forum JDBC
    Réponses: 3
    Dernier message: 15/01/2010, 11h32
  3. Problème de requête sql INSERT INTO
    Par momoh dans le forum VB.NET
    Réponses: 2
    Dernier message: 18/02/2009, 17h58
  4. Problème requête sql : INSERT INTO
    Par bobosh dans le forum VBA Access
    Réponses: 2
    Dernier message: 20/08/2008, 11h43
  5. Requête SQL Insert Into
    Par jjg65 dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 07/11/2007, 09h35

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