#php #ajax #input
Вопрос:
я новичок в этой области , даже не младший , я учусь дома и работаю над системой сообщений…это почти готово , последнее, что я должен сделать, когда кто-то нажимает на новые сообщения, чтобы изменить статус с 1[новый] на 0[старый] это мои сценарии… это работает, но этот запрос изменяет все мои сообщения со статусом от 1 до 0, и мне нужно изменить только имя отправителя.
Это мои файлы : Вот его ввод с идентификатором скрипта
echo "
<img style='display:inline-block;height:100px;width:100px;' src='images/newmessage.png'>
<a href='conversatie.php?catre=" . $row['nume'] . "'>
<input style='display:inline-block;font-size:15px;height:40px; ' class='button' id='messagechangestatus' onclick='messagechangestatus()' type='submit' value='".$row['nume']."'></a> ;
это его сценарий на той же странице :
<script type="text/javascript">
var x = document.getElementById("messagechangestatus").value;
function messagechangestatus () {
$.ajax({
url:"includes/changestatus.php",
type: "POST",
data: x,
success:function(result){
alert(result);
}
});
}
</script>
И вот это мое changestatus.php стр. :
<?php
session_start();
require "conectare.php";
$author = $_SESSION['prenume'];
$sql = "SELECT * FROM messages WHERE catre='$author' AND status='1'" ;
$result = mysqli_query($conectare, $sql);
if(mysqli_num_rows($result) > 1){
$author = $_SESSION['prenume'];
$sql2 = "UPDATE messages
SET status='0' WHERE catre='$author'";
mysqli_query($conectare, $sql2);
header("Location: mesaje.php");
exit();
}
echo "Nu functioneaza";
?>
я хочу сделать свой sql-запрос примерно таким :
$sql2 = "UPDATE messages
SET status='0' WHERE catre='$author' AND name =' ****And here to be the value of my input**** '";
Что я могу сделать дальше, чтобы получить это значение ввода в моем sql?
Ответ №1:
Во-первых, вам нужно исправить свой код ajax, потому что вы ничего не отправляете, я думаю
<script type='text/javascript' src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
var x = ("#messagechangestatus").val();
$.ajax({
url:"includes/changestatus.php",
type: "POST",
data: { x : x },
success:function(result){
alert(result);
}
});
});
</script>
Затем в состоянии изменений.php вам нужно принять значение того var x, которое вы отправили через ajax в data: { x : x}, добавив оператор if, чтобы выглядеть следующим образом :
if(!isset($_POST['x'])){
echo "your error here which shows that you're not getting the value of that x variable";}
тогда здесь вы можете сделать свое обновление, чтобы оно выглядело так :
$messagechangestatus = $_POST['x'];
$sql2 = "UPDATE messages SET status='0' WHERE catre='$author' AND name='".$messagechangestatus."' ";
Комментарии:
1. Я изменил, как вы мне сказали, и поставил $ после var x=, и я переместил свой статус изменений. php из папки includes в основную, потому что это дает мне что-то вроде «404 не найдено в includes/mesaje.php» и mesaje.php был в моей основной папке… так что теперь он показывает мне всю мою html-страницу…. я не могу скопировать все ошибки здесь… это слишком долго
2. Убедитесь, что вы не включаете базу данных дважды, потому что, когда вы делаете вызов ajax, это означает, что вы загружаете содержимое другой страницы, не обновляя всю страницу, поэтому попробуйте прокомментировать включение вашей базы данных и посмотреть, что происходит тогда и для var x = («#messagechangestatus»).val(); и var x = document.getElementById(«messagechangestatus»).значение; это почти то же самое, только первый-это синтаксический текст jquery, а второй-скрипт java. Дайте мне знать, если ваша ошибка исправлена.
3. Я отредактировал его и использовал : var x = document.getElementById(«messagechangestatus»).значение; вместо старого var x, и это дает мне тот же результат (в указанном предупреждении даже без нажатия на входное предупреждение на странице весь мой html-код ! ДОК к телу … у меня есть один раз db здесь, в mesaje.php(где это ajax, но не в ajax) ; $con=mysqli_connect(«локальный хост»,»имя»,»пропуск»,»бд»); и в messagechangestatus.php ( я отредактировал его из changestatus. php, потому что у меня сейчас 2) у меня есть это : требуется «includes/conectare.php»; . Извините за мой английский и за то, что я такой глупый, но я немного знаю php.
Ответ №2:
Thx testovic , вот его ответ :
в mesaje.php :
<a href='conversatie.php?catre=" . $row['nume'] . "'>
<input style='display:inline-block;font-size:15px;height:40px; ' class='button' id='messagechangestatus' name='messagechangestatus' type='submit' value='".$row['nume']."'></a>
это сценарий в mesaje.php :
<script type='text/javascript' src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script type="text/javascript">
$('#messagechangestatus').on('click',function(){
var x = document.getElementById("messagechangestatus").value;
$.ajax({
url:"messagechangestatus.php",
type: "POST",
data: { x : x },
success:function(result){
}
});
});
</script>
И это в messagechangestatus.php :
<?php
session_start();
require "includes/conectare.php";
$author = $_SESSION['prenume'];
$nume = $_POST['x'];
$sql = "SELECT * FROM messages WHERE catre='$author' AND status='1'";
$result = mysqli_query($conectare, $sql);
if(mysqli_num_rows($result) >= 1){
if(!isset($_POST['x'])){
echo "Nici o valoare nu a fost trecuta in input";}
else {
$author = $_SESSION['prenume'];
$nume = $_POST['x'];
$sql2 = "UPDATE messages SET status='0' WHERE catre='$author' AND nume='".$nume."' ";
mysqli_query($conectare, $sql2);
}
exit();
}
echo "Nu functioneaza";
?>
Еще раз большое вам спасибо !