Метод JQuery $.post не всегда работает

Dimaz

Новичок
Всем привет. Написал небольшой скрипт, отправляющий выбранный вариант на сервер и сохраняющий его в базу данных. Для этой цели использую метод $.post библиотеки JQuery. На сервере проходит проверка, если пользователь с данным идентификатором уже отвечал, выдается сообщение: "Вы уже проголосовали!", а если не отвечал(то есть таблица в базе пустая), выдается: "Результаты успешно сохранены!".
Однако срабатывает через раз. То есть даже если таблица пустая все равно выводится сообщение: "Вы уже проголосовали!", но в базу сохраняется только id пользователя, а в строке вариант ответа сохраняется ноль, хотя возможные значения, в зависимости от выбранного варианта ответа имеют id 1, 2 или 3. В очень редких случаях все сохраняется как положено, хотя я ничего не меняю в коде.
Я пишу так:
$.post('save_data.php');
Но все меняется после того как я укажу второй параметр в методе $.post. Т.е. пишу так:
$.post('save_data.php', {variant});
После этого все работает хорошо, всегда все сохраняется и не возникает никаких проблем. Почему так происходит, кто сможет объяснить? Были мысли, что не всегда передается выбранный вариант ответа, но я проверил это прописав в скрипте PHP вывод переданного значения. Выводится сообщение: "Вы уже проголосовали! Выбранный вариант: 3". Т.е. вариант то все таки передается на сервер, вот только почему в БД он не сохраняется(сохраняется как ноль). Хотелось бы понять в чем баг. Почему после того как я указваю в методе второй параметр(данные) все работает нормально, а если не указываю, то не работает(иногда только).
 

Dimaz

Новичок
PHP:
<?php
include("user_auth.php");
$user_id = (int)$_COOKIE['viewer_id'];
$answer_id = (int)$_POST['variant'];

mysql_connect($db_host, $db_user, $db_pass);
mysql_select_db($db_name);

$m_query = mysql_query("SELECT * FROM `answers` WHERE `user_id` = '". $user_id ."'");
if(!mysql_fetch_array($m_query)) {
	$m_query = mysql_query("INSERT INTO `answers` (`user_id`, `answer_id`) VALUES (". $user_id .", ". $answer_id .");");
	if($m_query) {
		echo("Результаты успешно сохранены!");
	}
	else {
		echo("Произошла какая-то ошибка при сохранении данных!");
	}
}
else {
	echo("Вы уже проголосовали!");
}
echo $answer_id, $user_id;
?>
 

Dimaz

Новичок
Выводит в браузер в зависимости от выбранного ответа так:
2184918649Вы уже проголосовали!
Где 2 это id выбранного ответа, а 184918649 id пользователя.
 

Dimaz

Новичок
Теперь я написал так:
PHP:
$.post('save_data.php', {drink: 2});
Вот код формы:
PHP:
<form action="save_data.php" method="post">
<p>
<b>Что вы предпочитаете выпить:</b><Br>
   <input type="radio" name="drink" value="1"> пиво<Br>
   <input type="radio" name="drink" value="2"> чай<Br>
   <input type="radio" name="drink" value="3"> кофе<Br>
   <input type="image" src="images/imgbutton.png">
</p>
  </form>
Выбираю третий вариант, т.е. кофе(value="3"), отправляю данные на сервер, приходит сообщение: "Вы уже проголосовали! Вариант 3". Но в базе данных в поле вариант сохраняется значение 2, которое я указал во втором параметре метода $.post. Как такое вообще возможно? В переменную сохраняется выбранное значение "3", а в базу сохраняется "2". Я же эту же переменную, содержащую значение "3" передаю в SQL-запросе в БД. Как же тогда в базу сохраняется "2". С помощью оператора "echo" языка PHP вывожу значение этой переменной в браузер. И она содержит 3!))) А в базе сохраняет 2. Я логики вообще не понимаю. Объясните мне как такое вообще возможно.)))
 

Semen

Семён
PHP:
var drink = $('input[name=drink]:checked').val(); // определяет значение, которое было выбрано
$.post('save_data.php', {drink: drink});
P.S. Прежде чем задать следующий вопрос, почитай документацию и посмотри примеры
 

Dimaz

Новичок
Спасибо:) Я конечно рад, что теперь все работает, но все таки очень интересно каким образом он умудряется запихать в БД значение параметра метода $.post. Ведь в переменную PHP он сохраняет выбранное мною значение формы:
PHP:
$answer_id = (int)$_POST['drink'];
. Потом эту переменную я отправляю SQL-запросом в базу. Т.е. по идее он должен сохранить выбранное мною значение, а не то что прописано в параметре метода $.post. Тем более я проверил, прописав
PHP:
echo $answer_id, $user_id;
и действительно переменная содержит значение которое выбрал именно Я, а не то что указано в параметре метода. Хочу узнать, просто ради спортивного интереса.)
 

Dimaz

Новичок
Так ведь ошибок то никаких не возникает. Все работает. Вопрос в том, почему так работает, а не так как должно по логике.
 
Сверху