Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: как выполнить sql запрос из цикла while
Форумы портала PHP.SU » » Вопросы новичков » как выполнить sql запрос из цикла while

Страниц (1): [1]
 

1. myvin - 22 Июля, 2018 - 13:58:10 - перейти к сообщению
Имеем код
PHP:
скопировать код в буфер обмена
  1. while ($myrow = mysql_fetch_array ($sql)) {
  2. $numid = $myrow['num_id'];
  3. $vremya = $myrow['data_vremya'];
  4. $mas = $myrow['masters'];
  5. $marka = $myrow['marka'];
  6. $model = $myrow['model'];
  7. $number = $myrow['number_k'];
  8. $fio = $myrow['fio'];
  9. $imei = $myrow['imei'];
  10. $sernum = $myrow['ser_num'];
  11. $compl = $myrow['complect'];
  12. $tsena = $myrow['tsena'];
  13. $nepoladka = $myrow['polomka'];
  14. $zametki = $myrow['zametki'];
  15. echo '<tr>';
  16. echo '<td class="tg-4z1q">' . $numid . '</td>';
  17. echo '<td class="tg-gby1">' . $vremya . '</td>';
  18. echo '<td class="tg-gby1">' . $marka . '&nbsp;' . $model . '</td>';
  19. echo '<td class="tg-gby1">' . $nepoladka . '</td>';
  20. echo '<td class="tg-gby1">' . $fio . '</td>';
  21. echo '<td class="tg-gby1">' . $number . '</td>';
  22. echo '<td class="tg-gby1">' . $compl . '</td>';
  23. echo '<td class="tg-gby1">' . $tsena . '</td>';
  24. echo '<td class="tg-gby1">' . $mas . '</td>';
  25. echo '<td class="tg-gby1">' . $imei . '&nbsp;' . $sernum . '</td>';
  26. echo '<td class="tg-gby1">' . $zametki . '</td>';
  27. echo '</tr>';
  28. }
  29. echo '</table>';

, данный код нам выдает все нужные строки в таблицу. Не пойму как сделать после конца каждой строчки кнопку, при нажатии на которую будет выполнен SQl запрос к базе данных MySQl, и будет действовать только на определенный ID строки. Например у нас в базе три строки, выводим все три строки из базы циклом while, и нам нужно чтоб при нажатии каждой кнопки, запрос в базу выполнялся именно с идентификатором конкретной строчки. То есть я нажму на кнопку возле третьей строки, именно третья строка пошлет запрос в базу данных
2. miketomlin - 22 Июля, 2018 - 14:54:00 - перейти к сообщению
Идентификатор конкретной записи указывайте в ссылке, в имени кнопки и т.п. Потом обрабатывайте запрос.

Вот, например, почитайте мою статью Как сделать вывод списка статей? и обязательно комменты к ней, т.к. в самой стать предполагается использование движка, который сам выбирает отдельные записи.
(Добавление)
P.S. Вот это переливание из пустого в порожнее: $numid = $myrow['num_id']; и т.п.

Используйте какое-нибудь современное расширение для работы с БД, например mysqli.

В шаблоне лучше использовать альт. синтаксис (см. шаблоны в статье).

Соединение с базой лучше закрывать до выполнения шаблонов или вообще этого не делать, полагаясь на «сборку мусора».
3. myvin - 22 Июля, 2018 - 15:53:28 - перейти к сообщению
miketomlin пишет:
Идентификатор конкретной записи указывайте в ссылке, в имени кнопки и т.п. Потом обрабатывайте запрос.

Вот, например, почитайте мою статью Как сделать вывод списка статей? и обязательно комменты к ней, т.к. в самой стать предполагается использование движка, который сам выбирает отдельные записи.
(Добавление)
P.S. Вот это переливание из пустого в порожнее: $numid = $myrow['num_id']; и т.п.

Используйте какое-нибудь современное расширение для работы с БД, например mysqli.

В шаблоне лучше использовать альт. синтаксис (см. шаблоны в статье).

Соединение с базой лучше закрывать до выполнения шаблонов или вообще этого не делать, полагаясь на «сборку мусора».

Чуть переделал код, но все равно не то, что требуется.
PHP:
скопировать код в буфер обмена
  1. while ($myrow = mysql_fetch_array ($sql)) {
  2. $ident = $myrow['num_id'];
  3. echo '<tr>';
  4. echo '<td class="tg-4z1q">' . $myrow['num_id'] . '</td>';
  5. echo '<td class="tg-gby1">' . $myrow['data_vremya'] . '</td>';
  6. echo '<td class="tg-gby1">' . $myrow['marka'] . '&nbsp;' . $myrow['model'] . '</td>';
  7. echo '<td class="tg-gby1">' . $myrow['polomka'] . '</td>';
  8. echo '<td class="tg-gby1">' . $myrow['fio'] . '</td>';
  9. echo '<td class="tg-gby1">' . $myrow['number_k'] . '</td>';
  10. echo '<td class="tg-gby1">' . $myrow['complect'] . '</td>';
  11. echo '<td class="tg-gby1">' . $myrow['tsena'] . '</td>';
  12. echo '<td class="tg-gby1">' . $myrow['masters'] . '</td>';
  13. echo '<td class="tg-gby1">' . $myrow['imei'] . '&nbsp;' . $myrow['ser_num'] . '</td>';
  14. echo '<td class="tg-gby1">' . $myrow['zametki'] . '</td>';
  15. echo '</tr>';
  16. echo '<form action="" method="post">';
  17. echo '<input type="submit" name="action">';
  18. echo '</form>';
  19. if(isset($_POST['action']))
  20. {
  21. mysql_query("UPDATE priemka SET status2=1 WHERE num_id = '$ident'",$db) or die(mysql_error());
  22. }  
  23. }
  24. echo '</table>';

и действие применяется не к одной строке status2, а ко всем строкам сразу, имеющимся в таблице, а нужно только строго к той строке, напротив которой я нажму на кнопку (имеется скажем html таблица с 10 строк, при нажатии на кнопку submit, значение столбца status2 меняется сразу во всех строках, а не только к той, возле которой кнопка
4. miketomlin - 22 Июля, 2018 - 18:30:28 - перейти к сообщению
О каком конкретно действии идет речь? Если о просмотре, редактировании (именно редактировании, а не сохранении отредактированного), то достаточно простых ссылок и метода GET.

Для изменения и т.п. можно использовать чекбоксы, индивидуальные формы, кнопки с собственными обработчиками и т.п.
(Добавление)
Значение $ident должно как-то передаваться в обработчик.
5. myvin - 23 Июля, 2018 - 11:46:43 - перейти к сообщению
miketomlin пишет:
О каком конкретно действии идет речь? Если о просмотре, редактировании (именно редактировании, а не сохранении отредактированного), то достаточно простых ссылок и метода GET.

Для изменения и т.п. можно использовать чекбоксы, индивидуальные формы, кнопки с собственными обработчиками и т.п.
(Добавление)
Значение $ident должно как-то передаваться в обработчик.

Напишу так - имеется 5 столбцов в базе данных MySQL. Строк у этих столбцов может быть немерено, от 1 до там сотен тысяч (конечно когда их будет уже столько много, буду оптимизировать, не о этом речь), и каждая строка выводится на сайт циклом, то есть если строк в базе 500, то выводится 500 строк на сайт. Каждая отдельная строка имеет свой ID, который идет от 1 до.. до сколько строк в базе будет, столько и будет. В итоге мы имеем таблицу на сайте с каким то там числом строк. Мне нужно возле каждой строки кнопку, при нажатии на которую в определенный столбец базы данных будет вписана информация, но вписана она должна быть только строго для той строки, возле которой была нажата кнопка. То есть вывод информации у нас циклом while, и когда я вывожу кнопку sumbit для строки (они так же выводятся циклом while возле каждой), при нажатии информация нужная попадает в базу для всех строк разом, а не для конкретно той возле которой была нажата кнопка
6. Мелкий - 23 Июля, 2018 - 11:52:58 - перейти к сообщению
myvin пишет:
при нажатии информация нужная попадает в базу для всех строк разом

Потому что именно это поведение и написано у вас в скрипте.
Для каждой строки проверяется, пользователь нажал кнопку? (любую кнопку!) Если да, то обновим строку. Каждую строку.

Что делать:
miketomlin пишет:
Идентификатор конкретной записи указывайте в ссылке, в имени кнопки и т.п. Потом обрабатывайте запрос.

miketomlin пишет:
Значение $ident должно как-то передаваться в обработчик.

И обновлять только переданную с формы строку.
7. myvin - 23 Июля, 2018 - 12:01:11 - перейти к сообщению
Мелкий пишет:
myvin пишет:
при нажатии информация нужная попадает в базу для всех строк разом

Потому что именно это поведение и написано у вас в скрипте.
Для каждой строки проверяется, пользователь нажал кнопку? (любую кнопку!) Если да, то обновим строку. Каждую строку.

Что делать:
miketomlin пишет:
Идентификатор конкретной записи указывайте в ссылке, в имени кнопки и т.п. Потом обрабатывайте запрос.

miketomlin пишет:
Значение $ident должно как-то передаваться в обработчик.

И обновлять только переданную с формы строку.

В том то всё и дело, что не получается почем то. Обновляется либо с самой нижней строки, независимо от того, на какую кнопку нажал, либо сразу для всех, если пытаешся что-либо изменить в коде
(Добавление)
Мелкий пишет:
myvin пишет:
при нажатии информация нужная попадает в базу для всех строк разом

Потому что именно это поведение и написано у вас в скрипте.
Для каждой строки проверяется, пользователь нажал кнопку? (любую кнопку!) Если да, то обновим строку. Каждую строку.

Что делать:
miketomlin пишет:
Идентификатор конкретной записи указывайте в ссылке, в имени кнопки и т.п. Потом обрабатывайте запрос.

miketomlin пишет:
Значение $ident должно как-то передаваться в обработчик.

И обновлять только переданную с формы строку.

PHP:
скопировать код в буфер обмена
  1. echo '<form action="" method="post">';
  2. echo '<input type="submit" name="action">';
  3. echo '</form>';
  4. if(isset($_POST['action']))
  5. {
  6. mysql_query("UPDATE priemka SET status2=1 WHERE num_id = '$ident'",$db) or die(mysql_error());
  7. }  
  8. }
  9. echo '</table>';

и обновляется для всех строк разом, весь столбец в mysql
8. Мелкий - 23 Июля, 2018 - 12:19:55 - перейти к сообщению
Непосредственно внутри table не может быть form, кстати говоря. Внутри td - может быть.
Ваш браузер может ошибочную разметку переписывать странных образом.

И, опять же, где вы передаёте желаемый num_id с формы?
Возможно, у вас опыт разработки десктоп-приложений и вы просто не понимаете, когда именно работает php и соответствующую модель запрос-ответ, а не интерактивного приложения?
9. myvin - 23 Июля, 2018 - 12:36:04 - перейти к сообщению
Мелкий пишет:
Непосредственно внутри table не может быть form, кстати говоря. Внутри td - может быть.
Ваш браузер может ошибочную разметку переписывать странных образом.

И, опять же, где вы передаёте желаемый num_id с формы?
Возможно, у вас опыт разработки десктоп-приложений и вы просто не понимаете, когда именно работает php и соответствующую модель запрос-ответ, а не интерактивного приложения?

Нет, опыта у меня совсем нет, тут я полный нуб пока что, как говорится не побоюсь этого слова - дно )). Поэтому, увы.. и никто не может конкретным примером показать вот как в моем случае
10. miketomlin - 23 Июля, 2018 - 13:55:21 - перейти к сообщению
Я вам варианты приводил:
Цитата:

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

Значение $ident должно как-то передаваться в обработчик.


Но если нет знаний и опыта, то тут конечно остается надеяться только на примеры, хотя и это не совсем правильно, потому что пример != готовое решение. Лучше заплатите кому-нибудь, если нужно срочно и нет желания учиться в экстремально ускоренном режиме.
11. myvin - 30 Июля, 2018 - 19:24:02 - перейти к сообщению
все решилось проше, сделал скрытую форму, в которой присваивается конкретное значение переменной, добавил кнопку и обработчик в другом скрипте. На данный момент это для меня лучшее решение.

 

Powered by ExBB FM 1.0 RC1