#php #html
#php #HTML
Вопрос:
Я пытаюсь создать инструкцию SQL с переменной $ _GET
Это мой handler.php:
if(array_key_exists("task", $_GET)){
$task = $_GET['task'];
}
if(array_key_exists("id", $_GET)){
$id_event = $_GET['id'];
}
if($task == "write"){
postMessage();
} else {
getMessages();
}
function getMessages(){
global $pdo;
global $id_event;
$resultats = $pdo->prepare("SELECT * FROM messages WHERE id_messages_evenement = :id ORDER BY date DESC LIMIT 10");
$resultats->execute([
"id" => $id_event
]);
$messages = $resultats->fetchAll();
echo json_encode($messages);
}
И моя форма :
<form action="../src/App/handler.php?task=writeamp;id=13" 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>
но инструкция SQL не работает.
Если я попытаюсь $id_event = 13;
вместо
if(array_key_exists("id", $_GET)){
$id_event = $_GET['id'];
}
инструкция работает, поэтому я думаю, что моя проблема связана с $_GET[‘id’].
Каждый раз, когда кто-то отправляет сообщение с формой, это вызов «../src/App/handler.php?task=writeamp;id= […]» с id = 13, например, поэтому я хочу сделать SELECT * FROM messages WHERE id_messages_evenement = 13 ORDER BY date DESC LIMIT 10
РЕДАКТИРОВАТЬ: это мой chat.js для использования AJAX:
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, 1000);
getMessages();
Комментарии:
1. Каково содержимое
$_GET
?2. что, если
id
НЕ задано в переменных $_GET? Tnen ваш запрос завершится ошибкой, поскольку вы все равно выполняете его, не проверяя, действительно ли указан идентификатор3. Я отредактирую свой пост, чтобы показать URL
4. Если задача =write, то это означает, что вы будете вызывать
postMessage()
вместоgetMessages()
5. Эй, Сэмюэль, попробуй получить идентификатор с помощью $ _POST, потому что в методе postMessage вы отправляете post-запрос с помощью ajax, поэтому идентификатор никогда не будет передан через $_GET.