0

I have a problem with my code when I add some line in my file. This is my first step in ajax, i try to use a $_GET variable in SQL statement to catch only the message of specific event..

Currently, this is my file: A part of chat.php:

<?php
    $id_membre = $_SESSION['id_membre'];
?>
<section class="chat">
    <div class = messages>
    </div>
    <div class="user-input">
        <form action="../src/App/handler.php?task=write" method="POST">
            <input type="hidden" name ="auteur" id="auteur" value="<?php echo $id_membre ?>">
            <input type="hidden" name ="id_event" id="id_event" value="<?php echo $id_event ?>">
            <input type="text" id="message" name="message">
            <button type="submit">Envoyer</button>
        </form>
    </div>
</section>
<script src="../src/JS/chat.js"></script>

chat.js:

function getMessages() {
    const requeteAjax = new XMLHttpRequest();
    requeteAjax.open("GET", "../src/App/handler.php");

    requeteAjax.onload = function() {
        const resultat = JSON.parse(requeteAjax.responseText);
        console.log(resultat);
        const html = resultat.reverse().map(function(mess){
            return `
                <div class="message">
                <span class="date">${mess.date.substring(11, 16)}</span>
                <span class="author">${mess.id_auteur}</span> : 
                <span class="content">${mess.message}</span>
                </div>
            `
        }).join('');

        const messages = document.querySelector('.messages');
        messages.innerHTML = html;
        messages.scrollTop = messages.scrollHeight;
    }
    requeteAjax.send();
}

function postMessage(event) {
    event.preventDefault();

    const auteur = document.querySelector('#auteur');
    const id_event = document.querySelector('#id_event');
    const message = document.querySelector('#message');

    const data = new FormData();
    data.append('message', message.value);
    data.append('auteur', auteur.value);
    data.append('id_event', id_event.value);

    const requeteAjax = new XMLHttpRequest();
    requeteAjax.open('POST', '../src/App/handler.php?task=write');

    requeteAjax.onload = function() {
        content.value = '';
        content.focus();
        getMessages();
    } 
    requeteAjax.send(data);
} 

document.querySelector('form').addEventListener('submit', postMessage);
const interval = window.setInterval(getMessages, 100);
getMessages();

handler.php:

<?php
$pdo = new PDO('mysql:host=localhost;dbname=calendrier', 'root', '', [
                PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
                PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
]);

$task = "list";

if (array_key_exists("task", $_GET)) {
    $task = $_GET['task'];
}

if ($task == "write") {
    postMessage();
} else {
    getMessages();
}

function getMessages() {
    global $pdo;

    $resultats = $pdo->query("SELECT * FROM messages ORDER BY date DESC LIMIT 20");
    $messages = $resultats->fetchAll();
    echo json_encode($messages);
}

function postMessage() {
    global $pdo;

    if (!array_key_exists('auteur', $_POST) || !array_key_exists('message', $_POST)) {
        echo json_encode(["status" => "error", "message" => "One field or many have not been sent"]);
        return;
    }

    $message = $_POST['message'];
    $auteur = $_POST['auteur'];
    $id_event = $_POST['id_event'];

    $query = $pdo->prepare('INSERT INTO messages SET id_messages_evenement = :id_messages_evenement, id_auteur = :id_auteur , message = :message, date = NOW()');

    $query->execute([
        "id_messages_evenement" => $id_event,
        "id_auteur" => $auteur,
        "message" => $message
    ]);

    echo json_encode(["status" => "success"]);
}

I try to do this in my form to add $id_membre in my URL

<form action="../src/App/handler.php?task=write&id=<?php echo $id_membre;?>" method="POST">

After this, in handler.php, I try to use my id in SQL:

$id = $_GET['id'];
function getMessages() {
    global $pdo;
    $resultats = $pdo->query("SELECT * FROM messages WHERE id = '$id' ORDER BY date DESC LIMIT 20");
}

But nothing happend. Can someone explain to me why this is not working?

Thanks.

Nic3500
  • 8,144
  • 10
  • 29
  • 40
samuel
  • 477
  • 7
  • 21
  • Please post minimal and precise code – Zain Farooq Apr 21 '19 at 09:50
  • 3
    Possible duplicate of [Reference: What is variable scope, which variables are accessible from where and what are "undefined variable" errors?](https://stackoverflow.com/questions/16959576/reference-what-is-variable-scope-which-variables-are-accessible-from-where-and) – Qirel Apr 21 '19 at 09:51
  • actually this is not the same problem, because, because I use $_GET variable, but whatever how I declare it, my script stop working – samuel Apr 21 '19 at 09:55
  • @samuel check my answer – Danyal Sandeelo Apr 21 '19 at 10:01
  • 2
    Your variable `$id` is not defined within that function, so the duplicate is highly relevant. – Qirel Apr 21 '19 at 10:05

0 Answers0