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