Как я могу опубликовать эти переменные через AJAX и PHP?

#php #ajax

#php #ajax

Вопрос:

У меня есть страница, на которой я использую AJAX для сохранения некоторых данных в БД. Как показано ниже, когда я нажимаю на кнопку, она отправляет данные в add-to-db.php

Моя проблема в том, что я использовал числа вместо значений для своих тестов и работал. Теперь, когда я должен использовать переменные, этого не происходит.
Я предполагаю, что я должен опубликовать значения $dealid и $myid , но как я могу это сделать?

Спасибо.

в моем product.php У меня есть это

 <script>
$(function(){
    $("#JqPostForm").submit(function(e){
       e.preventDefault();   

        $.post("add-to-db.php",
        function(data){

            $("#message_post").html("Thank you");


        });
    });

});
</script>

$dealid = (int)$_GET["id"];
$myid = $_SESSION['SESS_MEMBER_ID'];
  

и в add-to-db.php У меня есть этот запрос, но он не сохраняется в DB

 $query = "INSERT INTO reverse_relations (user_id, product_id, ip) VALUES ('$_SESSION['SESS_MEMBER_ID']', '$dealid', '$_SERVER[REMOTE_ADDR]')";
  

однако, когда я добавил VALUES ('1', '2', '$_SERVER[REMOTE_ADDR]')"; , это сработало

Комментарии:

1. Тест add-to-db.php вручную с некоторыми переменными $ _GET, чтобы увидеть, что происходит с запросом. Переход от чисел к буквенно-цифровым может не сработать, поскольку значения не заключены в кавычки. Кроме того, будьте осторожны с внедрением SQL.

Ответ №1:

Во-первых, переменные в форме на product.php необходимо отправить в add-to-db.php . Прямо сейчас никакие переменные не отправляются, потому что ни одна из них не указана в вашем вызове $.post () . Для этого вы можете:

 $.post("add-to-db.php", $("#myform").serialize(), function (data){
   $("#message_post").html("Thank you");
});
  

Как только вы отправите переменные в add-to-db.php вы можете прочитать их, обратившись к массиву $ _POST, предполагая, что у вас отключен register_globals в php.ini, и ваше поле вызывается dealid

 $query = "INSERT INTO reverse_relations (user_id, product_id, ip) VALUES ('$_SESSION['SESS_MEMBER_ID']', '".$_POST['dealid']."', '$_SERVER[REMOTE_ADDR]')";
  

Однако — не используйте этот код. Вы должны очистить все публикации и переменные СЕАНСА и СЕРВЕРА в своих запросах, иначе вы рискуете безопасностью своего веб-сайта.

 $dealid = mysql_real_escape_string($_POST['dealid']);
$sessid = mysql_real_escape_string($_SESSION['SESS_MEMBER_ID']);
  

Затем используйте эти переменные вместо этого в своем SQL-запросе:

 $query = "INSERT INTO reverse_relations (user_id, product_id, ip) VALUES ('{$sessid}', '{$dealid}', '$_SERVER[REMOTE_ADDR]')";
  

Комментарии:

1. Спасибо вам за это, но идентификатор сделки получен из URL. Не в форме

2. Это работает, однако я хочу получить product.php?id = 1 вместо того, чтобы размещать его в текстовом поле

3. Чтобы передать id параметр get из product в add-to-db.php вы можете легко отобразить это в скрытой переменной формы: <input type='hidden' name='id' value='<?php echo $_GET['id'] ?>' /> . Это включит это в СООБЩЕНИЕ для add-to-db.php

4. Да, именно так у меня это сейчас и есть. Но есть ли какой-либо способ использовать идентификатор URL напрямую вместо того, чтобы использовать его через текстовое поле?

5. да, вы всегда можете добавить это к своей цели публикации… это грязно, но: $.post("add-to-db.php?id=<?php echo $_GET['id'] ?>", $("#myform").serialize(), function (data){ ... });