[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Ошибка при генерации HTML формы в цикле DO WHILE
zeuss
Так вот. Можете ругаться и смеяться, тыкать носом в огрехи - я только учусь. Проблема в чём, выводятся в цикле данные по предмету, при соответствии условиям - для пользователя видна кнопка (простой сабмит), если предмет один на страничку - всё нормально, если больше - на обработчик передаются данные по последнему, хотя в исходном коде HTML страницы - формы содержат в себе верные данные. Вот собственно сам код:
\\\\\\\\\\\\\\\Начинается с запроса - тут всё гладко
[more][php]$res_minlot = mysql_query("SELECT * FROM minilot WHERE lot_status='1'AND cat='$cat' ORDER BY lot_id LIMIT $start, $num",$link);
$row_minlot = mysql_fetch_array($res_minlot);

do
{
$lot_id = $row_minlot["lot_id"];
$lot_counter = $row_minlot["lot_counter"];
$lot_desc = $row_minlot["lot_desc"];
$lot_price = $row_minlot["lot_price"];
$lot_pic = $row_minlot["lot_pic"];
$lot_bet = $row_minlot["lot_bet"];
$lot_bonus = $row_minlot["lot_bonus"];
$lot_link = $row_minlot["lot_link"];

$form_id = rand(5, 150);\\\\\\\\\\\\это я уже потом экспериментировал
$submit = rand(1,200);\\\\\\\\\\\\\\пробовал задать уникальные названия для формы

echo "<br><br><b><big> $lot_desc"; echo "</b></big><br>";
echo '<img src="';echo $lot_pic; echo'"width=200 heith=150><br>';
echo "<b>Выиграшная ставка № "; echo "".$lot_price."<br>";
echo "Стоимость ставки: ".$lot_bet."поинтов</b><br><br>";
\\\\\\\\\\\\
данные вывелись нормально у всех предметов



if($log == "1")
\\\\\\\\\\
проверили, залогинен ли юзер, дальше все манипуляции с таблицей счётчиком
{$bet_counter = mysql_query("SELECT * FROM $lot_counter WHERE bet_id=$lot_price",$link);
$bet_row_counter = mysql_fetch_array($bet_counter);
$test_bet_id = $bet_row_counter["bet_id"];
$win_time =$bet_row_counter["bet_date"];


$lot_counter = $row_minlot["lot_counter"];
$res_counter = mysql_query("SELECT * FROM $lot_counter WHERE bet_id=$lot_price",$link);
$row_counter = mysql_fetch_array($res_counter);
$win_time = $row_counter["bet_date"];
$winner_id = $row_counter["user_id"];
$bet_id =$row_counter["bet_id"];

$lot_counter = $row_minlot["lot_counter"];
$usr_win = mysql_query("SELECT * FROM users WHERE id='$winner_id'",$link);
$winner_array = mysql_fetch_array($usr_win);
$winner_login = $winner_array["user_login"];

\\\\\\\\\\\\
вытащили, теперь проверяю не купил ли кто товар

if ($test_bet_id == $lot_price)
{
echo "Этот лот выиграл пользователь:<b> $winner_login </b><br> Попробуйте сделать ставку позже, или выберите другой лот.<br>
Выигрышная ставка сделана:
$win_time <br>";
}

else
{

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\если не купил, то проверяем хватает ли денег на счету?
if ($balans < $lot_bet)
{
echo "У вас недостаточно средств для ставки на этот лот<br><br><hr />";
}
\\\\\\\\\\\\\\\\\\\\и вот тут - злополучная выводится форма
else
{
echo '<form action="makebet.php" method="post" name="'.$form_id.'">
<input type="hidden" name="lot_counter" value="'
.$lot_counter.'" />
<input type="hidden" name="user_id" value="'
.$user_id.'" />
<input type="hidden" name="lot_price" value="'
.$lot_price.'" />
<input type="hidden" name="lot_bet" value="'
.$lot_bet.'" />
<input type="hidden" name="lot_id" value="'
.$lot_id.'" />
<input type="hidden" name="lot_bonus" value="'
.$lot_bonus.'" />
<input type="hidden" name="lot_table" value="minilot" />
<input name="'
.$submit.'" type="submit" value="Сделать ставку"
</form><hr />'
;
}
}
}
}

while ($row_minlot = mysql_fetch_array($res_minlot))
?>
\\\\\\\\\\конец цикла.

На этой странице всё нормально, на обработчик шлются данные по последнему лоту. В исходном коде ХТМЛ - я вижу, что формы заполнены верно. Интуитивно понимаю, что тут какая-то простая истина и если бы я не по диску Попова это осваивал за две недели, а учился бы нормально где-то, то может и знал бы почему это не работает.
На всякий случай обработчик данных из формы:
<?php
if(
$user_id = $_POST['user_id'])
{$lot_bonus = $_POST['lot_bonus'];
$lot_counter = $_POST['lot_counter'];
$lot_price = $_POST['lot_price'];
$lot_bet = $_POST['lot_bet'];
$lot_table = $_POST['lot_table'];
$lot_id = $_POST['lot_id'];

........................ дальше не имеет смысла, так как этим вот берутся переменные из формы.
Пожалуйста, подскажите, что не так? Спасибо.



Спустя 4 минуты, 14 секунд (31.07.2011 - 23:53) Winston написал(а):
Не используйте do while! Нужно просто while
Вместо do напишите
while ($row_minlot = mysql_fetch_assoc($res_minlot))
{
....здесь код
}

Спустя 1 минута, 17 секунд (31.07.2011 - 23:54) zeuss написал(а):
Спасибо, сейчас попробую.

Спустя 6 минут, 25 секунд (1.08.2011 - 00:00) zeuss написал(а):
Разницы никакой(

Спустя 15 минут, 7 секунд (1.08.2011 - 00:15) zeuss написал(а):
Цитата (PHPprogrammer @ 31.07.2011 - 20:53)
Не используйте do while! Нужно просто while
Вместо do напишите
while ($row_minlot = mysql_fetch_assoc($res_minlot))
{
....здесь код
}

Кстати, у меня таким образом, не только продолжает слать переменные из последней формы, но и не выводит данные по первому товару из массива

Спустя 36 минут, 42 секунды (1.08.2011 - 00:52) Winston написал(а):
Зачем вообще форму в цикл пихать? blink.gif
Покажи измененный код.
И вверху файла напиши print_r($_POST); и, что выведет.

Спустя 21 минута, 1 секунда (1.08.2011 - 01:13) zeuss написал(а):
<?php
print_r($_POST);\\\\\\\\\НЕ ВЫВОДИТ НИЧЕГО
include "dlink.php";


$num = 3;
$cat = 1;
$pagecount_minlot = mysql_query("SELECT * FROM minilot WHERE lot_status='1'AND cat='$cat'",$link);
$pagecount = mysql_num_rows($pagecount_minlot);
$posts = $pagecount;

// Извлекаем из URL текущую страницу
$page = $_GET['page'];

// Находим общее число страниц
$total = (($posts - 1) / $num) + 1;
$total = intval($total);
// Определяем начало сообщений для текущей страницы
$page = intval($page);
// Если значение $page меньше единицы или отрицательно
// переходим на первую страницу
// А если слишком большое, то переходим на последнюю

if(empty($page) or $page < 0) $page = 1;
if($page > $total) $page = $total;
// Вычисляем начиная с какого номера
// следует выводить сообщения

$start = $page * $num - $num;






$res_minlot = mysql_query("SELECT * FROM minilot WHERE lot_status='1'AND cat='$cat' ORDER BY lot_id LIMIT $start, $num",$link);
$row_minlot = mysql_fetch_array($res_minlot);

while ($row_minlot = mysql_fetch_assoc($res_minlot))
{
print_r($_POST);\\\\\\\\\ТУТ ВЫВОДИТ Array()
$lot_id = $row_minlot["lot_id"];
$lot_counter = $row_minlot["lot_counter"];
$lot_desc = $row_minlot["lot_desc"];
$lot_price = $row_minlot["lot_price"];
$lot_pic = $row_minlot["lot_pic"];
$lot_bet = $row_minlot["lot_bet"];
$lot_bonus = $row_minlot["lot_bonus"];
$lot_link = $row_minlot["lot_link"];

$form_id = rand(5, 150);
$submit = rand(1,200);
echo "<br><br><b><big> $lot_desc"; echo "</b></big><br>";
echo '<img src="';echo $lot_pic; echo'"width=200 heith=150><br>';
echo "<b>Выиграшная ставка № "; echo "".$lot_price."<br>";
echo "Стоимость ставки: ".$lot_bet."поинтов</b><br><br>";
if($log == "1")
{$bet_counter = mysql_query("SELECT * FROM $lot_counter WHERE bet_id=$lot_price",$link);
$bet_row_counter = mysql_fetch_array($bet_counter);
$test_bet_id = $bet_row_counter["bet_id"];
$win_time =$bet_row_counter["bet_date"];


$lot_counter = $row_minlot["lot_counter"];
$res_counter = mysql_query("SELECT * FROM $lot_counter WHERE bet_id=$lot_price",$link);
$row_counter = mysql_fetch_array($res_counter);
$win_time = $row_counter["bet_date"];
$winner_id = $row_counter["user_id"];
$bet_id =$row_counter["bet_id"];

$lot_counter = $row_minlot["lot_counter"];
$usr_win = mysql_query("SELECT * FROM users WHERE id='$winner_id'",$link);
$winner_array = mysql_fetch_array($usr_win);
$winner_login = $winner_array["user_login"];



if ($test_bet_id == $lot_price)
{
echo "Этот лот выиграл пользователь:<b> $winner_login </b><br> Попробуйте сделать ставку позже, или выберите другой лот.<br>
Выигрышная ставка сделана:
$win_time <br>";
}

else
{


if ($balans < $lot_bet)
{
echo "У вас недостаточно средств для ставки на этот лот<br><br><hr />";
}

else
{
echo '<form action="makebet.php" method="post" name="'.$form_id.'">
<input type="hidden" name="lot_counter" value="'
.$lot_counter.'" />
<input type="hidden" name="user_id" value="'
.$user_id.'" />
<input type="hidden" name="lot_price" value="'
.$lot_price.'" />
<input type="hidden" name="lot_bet" value="'
.$lot_bet.'" />
<input type="hidden" name="lot_id" value="'
.$lot_id.'" />
<input type="hidden" name="lot_bonus" value="'
.$lot_bonus.'" />
<input type="hidden" name="lot_table" value="minilot" />
<input name="'
.$submit.'" type="submit" value="Сделать ставку"
</form><hr />'
;
}
}
}
}

?>
<?

// Проверяем нужны ли стрелки назад
if ($page != 1) $pervpage = '<a href=?cat='.$cat.'&page=1>Первая</a> | <a href=?cat='.$cat.'&page='. ($page - 1) .'>Предыдущая</a> | ';
// Проверяем нужны ли стрелки вперед
if ($page != $total) $nextpage = ' | <a href=?cat='.$cat.'&page='. ($page + 1) .'>Следующая</a> | <a href=?cat='.$cat.'&page=' .$total. '>Последняя</a>';

// Находим две ближайшие станицы с обоих краев, если они есть
if($page - 5 > 0) $page5left = ' <a href=?cat='.$cat.'&page='. ($page - 5) .'>'. ($page - 5) .'</a> | ';
if($page - 4 > 0) $page4left = ' <a href=?cat='.$cat.'&page='. ($page - 4) .'>'. ($page - 4) .'</a> | ';
if($page - 3 > 0) $page3left = ' <a href=?cat='.$cat.'&page='. ($page - 3) .'>'. ($page - 3) .'</a> | ';
if($page - 2 > 0) $page2left = ' <a href=?cat='.$cat.'&page='. ($page - 2) .'>'. ($page - 2) .'</a> | ';
if($page - 1 > 0) $page1left = '<a href=?cat='.$cat.'&page='. ($page - 1) .'>'. ($page - 1) .'</a> | ';

if($page + 5 <= $total) $page5right = ' | <a href=?cat='.$cat.'&page='. ($page + 5) .'>'. ($page + 5) .'</a>';
if($page + 4 <= $total) $page4right = ' | <a href=?cat='.$cat.'&page='. ($page + 4) .'>'. ($page + 4) .'</a>';
if($page + 3 <= $total) $page3right = ' | <a href=?cat='.$cat.'&page='. ($page + 3) .'>'. ($page + 3) .'</a>';
if($page + 2 <= $total) $page2right = ' | <a href=?cat='.$cat.'&page='. ($page + 2) .'>'. ($page + 2) .'</a>';
if($page + 1 <= $total) $page1right = ' | <a href=?cat='.$cat.'&page='. ($page + 1) .'>'. ($page + 1) .'</a>';

// Вывод меню если страниц больше одной

if ($total > 1)
{
Error_Reporting(E_ALL & ~E_NOTICE);
echo "<div class=\"pstrnav\">";
echo $pervpage.$page5left.$page4left.$page3left.$page2left.$page1left.'<b>'.$page.'</b>'.$page1right.$page2right.$page3right.$page4right.$page5right.$nextpage;
echo "</div>";
}
?>

И снова не выводится первый товар, а на обработчик шлются переменные из последнего.
По поводу "на кой форма в цикле": а как по-другому, генерировать ссылку со всеми переменными внутри и передавать через GET?

Спустя 6 минут, 2 секунды (1.08.2011 - 01:19) zeuss написал(а):
В обработчике выводтся
Array ( [lot_counter] => test [user_id] => 1 [lot_price] => 12 [lot_bet] => 0.1 [lot_id] => 3 [lot_bonus] => 0 [lot_table] => minilot [194] => Сделать ставку ) но это переменные по последней записи. Первой нет.

Спустя 2 минуты, 39 секунд (1.08.2011 - 01:22) Winston написал(а):
print_r($_POST); должно, отобразиться хоть, что-то после того как нажмешь кнопку submit.
Цитата (zeuss @ 1.08.2011 - 01:13)
По поводу "на кой форма в цикле": а как по-другому

Хотя бы уже так написать
echo '<form....>'
while(...)
{
...здесь формируешь всякие input
}
echo '
<input type="submit">';
echo "</form>";
Цитата (zeuss @ 1.08.2011 - 01:13)
action="makebet.php"

После нажатия на кнопку тебя перебрасывает на эту страницу. Попробуй в ней прописать print_r
Цитата (zeuss @ 1.08.2011 - 01:13)
Error_Reporting(E_ALL & ~E_NOTICE);

Это пишется в самом начала скрипта, чтобы все ошибки было видно. И лучше делать вывод всех ошибок
Error_Reporting(E_ALL);

Спустя 1 минута, 34 секунды (1.08.2011 - 01:23) Winston написал(а):
Вот так поля попробуй пописать. И должны все записи быть
<input type="hidden" name="lot_counter[]" value="'.$lot_counter.'" />
<input
type="hidden" name="user_id[]" value="'.$user_id.'" />
<input
type="hidden" name="lot_price[]" value="'.$lot_price.'" />
<input
type="hidden" name="lot_bet[]" value="'.$lot_bet.'" />
<input
type="hidden" name="lot_id[]" value="'.$lot_id.'" />
<input
type="hidden" name="lot_bonus[]" value="'.$lot_bonus.'" />
<input
type="hidden" name="lot_table[]" value="minilot" />

Спустя 2 дня, 21 час, 55 минут, 45 секунд (3.08.2011 - 23:19) zeuss написал(а):
Не помогло. Пока отложил до лучших времён. Кстати:
<input type="hidden" name="lot_counter[]" value="'.$lot_counter.'" />
<
input type="hidden" name="user_id[]" value="'.$user_id.'" />
<
input type="hidden" name="lot_price[]" value="'.$lot_price.'" />
<
input type="hidden" name="lot_bet[]" value="'.$lot_bet.'" />
<
input type="hidden" name="lot_id[]" value="'.$lot_id.'" />
<
input type="hidden" name="lot_bonus[]" value="'.$lot_bonus.'" />
<
input type="hidden" name="lot_table[]" value="minilot" />
просто на обработчик шлёт кучу всего.
А первая запись пропадает, при выводе в цикле данных, по запросу. если цикл делать через WHILE без DO... Сейчас засел за теорию, не пойму что не так.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.