Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Проблема со взятием value с текстовых полей. (https://javascript.ru/forum/jquery/56545-problema-so-vzyatiem-value-s-tekstovykh-polejj.html)

danial_pastushenko 21.06.2015 15:27

Проблема со взятием value с текстовых полей.
 
Здравствуйте!
Ситуация такая: Вывожу текстовые поля с атрибутами, взятыми из БД.
<?php
$sql = mysql_query("SELECT * FROM closetest WHERE name='Механика'");
while ($res = mysql_fetch_array($sql)) {
		$id = $res['id'];
		$title = $res['title'];
		echo "<h1>" .$id. ". " .$title. "</h1><br><input type=\"text\" name=\"" .$id. "\" class=\"tt\" value=\"\"><br>";
}
echo "<input type=\"button\" value=\"Узнать результат\" id=\"finalbutton\">";
?>


Далее на нажатие button я написал get запрос:
$('.tt').change(function(){
var textname = this.name;
var textvalue = this.value;
$('[id="finalbutton"]').click(function(){
$.get("openresults.php",{name:textname,value:textvalue},function(result){ $("#final").html(result);});
});
});


Если значение, введенное в input совпадает со значение в БД, то выводим слово "ок".
<?php
$val = $_GET['value'];
$name = $_GET['name'];
$sql = mysql_query("SELECT answer FROM closetest");
while($res = mysql_fetch_array($sql)) {
$answer = $res['answer'];
if ($val == $answer) {
$y = "ok";
}
echo $y. "<br>";
}
?>

А проблема в том, что выводится только 1 слово ок, для того поля, которое заполнял последним. Нужно, чтобы каждое "ок" было в новой строке, ну или через запятую. Мне кажется ошибка в последнем php коде.
Есть мысли, как решить проблему?
Заранее спасибо.

рони 21.06.2015 15:58

danial_pastushenko,
вы в курсе что ваш код назначает $('[id="finalbutton"]') бесконечное число кликов -- все эти запросы уходят на ваш сервер -- все приходят -- все друг дружку затирают, так как выводятся в одно место -- и вы видите только последний результат.
Цитата:

Сообщение от danial_pastushenko
, чтобы каждое "ок" было в новой строке, ну или через запятую.

$("#final").html($("#final").html() + $("<br>")+result)

danial_pastushenko 21.06.2015 16:03

Спасибо! А как поступить правильно с $('[id="finalbutton"]') ?

рони 21.06.2015 16:11

danial_pastushenko,
смотря чего вы хотите ?
может вам это нужно http://api.jquery.com/serialize/

danial_pastushenko 21.06.2015 16:39

Вообще нужно сделать счетчик (если value совпадает с полем БД, то i++).

рони 21.06.2015 16:41

danial_pastushenko,
послали все поля с помощью serialize на сервере обработали вернули результат сколько совпало

danial_pastushenko 21.06.2015 16:43

Ок, спасибо большое!

Sigizmund2012 21.06.2015 16:59

Уже не первый раз встречаю в php коде присваивание переменной в качестве условия цикла, типа while($res = mysql_fetch_array($sql)). Я так понимаю, что в условии всегда будет true и его как-то по-другому надо останавливать, но в теле цикла нет break или каких-то других останавливающих его условий. Если тут есть знатоки php, объясните, как этот код работает. Это вообще нормальная практика, или так только быдлокодеры делают?

laimas 21.06.2015 18:48

Цитата:

Сообщение от Sigizmund2012
объясните, как этот код работает

while($res = mysql_fetch_array($sql)) - хотя в данном случае mysql_fetch_array и близко не нужно, так как возвращает два идентичных набора данных, один из которых имеет строковые ключи, а второй числовые. Это бездумное использование mysql_fetch_array() следствие изучение РНР по мультикам. В контексте использования тогда уж mysql_fetch_assoc(), но в любом случае эти две функции возвращают true (вернее результат будет true) только тогда, когда возвращается ряд данных из полученного sql-ресурса, в противном случае false, то есть не "в условии всегда будет true и его как-то по-другому надо останавливать". Выполнении этих функций не только возвращает ряд данных, но и сдвигает указатель в ресурсе на следующую строку, то есть после выборки всех рядов следующая за этим итерация получит false.


Часовой пояс GMT +3, время: 02:54.