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 :: Версия для печати :: Помогите с кнопкой Submit
Форумы портала PHP.SU » » Вопросы новичков » Помогите с кнопкой Submit

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

1. KCA99 - 08 Февраля, 2013 - 14:57:55 - перейти к сообщению
При обновлении страницы САМА нажимается кнопка Submit(вычисление и обновление БД). Подскажите новечку, как сделать так, что бы на странице index.php отображалось кол-во Вишни из БД, а по нажатию на кнопку прибавлялось постоянное число 5, обновлялась БД и, после загрузки страницы, отображалось уже новое значение Вишни?

Спасибо всем!
2. imya - 08 Февраля, 2013 - 15:09:38 - перейти к сообщению
А в каком формате у вас хранятся данные в бд?
Если строка - не получиться так прибавлять, а если int - тогда получится.
(Добавление)
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. require_once('bd.php');
  3. $row = $db->query("SELECT * FROM bazawhrere log='user'") or die $db->error();
  4. $result = $db->fetch_assoc($row);
  5.  
  6. if($_POST[sub])
  7. {
  8. $result['arbuz']+=5;
  9. //update table
  10. }
  11. ?>

CODE (html):
скопировать код в буфер обмена
  1. <form id="sum" method="POST"  action="">
  2. <input type="submit" value="+5" name="sub" />
  3. </form>


Поправьте, пожалуйста, если где-то неверно Закатив глазки
3. DelphinPRO - 08 Февраля, 2013 - 15:17:17 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. if ($_SERVER['REQUEST_METHOD'] == 'POST') {
  2.   обновляем данные в таблице
  3. }

PHP:
скопировать код в буфер обмена
  1. if (isset($_POST['knopka']) {
  2.   обновляем данные в таблице
  3. }

(Добавление)
imya пишет:
Поправьте, пожалуйста, если где-то неверно
imya пишет:
if($_POST[sub])

сразу две ошибки Улыбка
обращение к несуществующему индексу
и обращение к неопределенной константе

а в целом направление верное Улыбка
4. imya - 08 Февраля, 2013 - 15:21:57 - перейти к сообщению
По поводу несуществующего индекса - Нотис будет ведь ?
А неопределённая константа где ?) sub без кавычек?)

А в целом ваш вариант, DelphinPRO , гораздо экономнее моего Закатив глазки
5. DelphinPRO - 08 Февраля, 2013 - 16:42:41 - перейти к сообщению
да
да

то же самое
6. KCA99 - 08 Февраля, 2013 - 18:52:25 - перейти к сообщению
Спасибо за ответы!

if ($_SERVER['REQUEST_METHOD'] == 'POST')

if (isset($_POST['knopka'])

Попробовал оба варианта - не помогло... Вроде все правильно делал
7. DelphinPRO - 08 Февраля, 2013 - 19:01:20 - перейти к сообщению
так вы помощи долго ждать будете. Лучше бы показали код, как пробовали. Потому что не работать это не может.
8. KCA99 - 09 Февраля, 2013 - 10:50:50 - перейти к сообщению
Всем добрый день! Извиняюсь, что долго не отвечал.

1)
PHP:
скопировать код в буфер обмена
  1. <body class="a">
  2.  
  3. <?PHP
  4.         //Подключение к БД
  5.         $db = mysql_connect("localhost","user","12345");
  6.         mysql_select_db("site",$db);
  7.  
  8.         $result = mysql_query("SELECT * FROM baza WHERE log='user'",$db);
  9.         $myrow = mysql_fetch_array($result);
  10.  
  11.         echo $myrow['arbuz'];
  12.         echo "<br><br<br><br>";
  13.  
  14.         if ($_SERVER['REQUEST_METHOD'] == 'POST')
  15.                 {
  16.                 $result['arbuz']+=5;
  17.                  mysql_query("UPDATE baza SET arbuz=$result WHERE log='user'");
  18.                 }
  19. ?>
  20.  
  21. <form id="sum" method="POST"  action="">
  22. <input type="submit" value="Прибавить 5" name="knopka"/>
  23. </form>
  24.  
  25. </body>


если написать код вот так, то в 23 строке($result['arbuz']+=5;) браузер выдает предупреждение и не обновляется результат в БД.


2) Если написать так, то кнопка работает как надо. Только вот по нажатию на F5 прибавляется 5 арбузов и БД тоже обновляется..
P.S. если нажать F5, то страница дольше грузится.

PHP:
скопировать код в буфер обмена
  1. <body class="a">
  2.  
  3. <?PHP
  4.         //Подключение к БД
  5.         $db = mysql_connect("localhost","user","12345");
  6.         mysql_select_db("site",$db);
  7.  
  8.         $result = mysql_query("SELECT * FROM baza WHERE log='user'",$db);
  9.         $myrow = mysql_fetch_array($result);
  10.  
  11.         echo $myrow['arbuz'];
  12.         echo "<br><br<br><br>";
  13.  
  14.         if ($_SERVER['REQUEST_METHOD'] == 'POST')
  15.                 {
  16.                 $summa = ($myrow['arbuz'] + 5);
  17.                  mysql_query("UPDATE baza SET arbuz=$summa WHERE log='user'");
  18.                 }
  19. ?>
  20.  
  21. <form id="sum" method="POST"  action="">
  22. <input type="submit" value="Прибавить 5" name="knopka"/>
  23. </form>
  24.  
  25. </body>

(Добавление)
imya пишет:
<?PHP
require_once('bd.php');
$row = $db->query("SELECT * FROM bazawhrere log='user'") or die $db->error();
$result = $db->fetch_assoc($row);


А в этом случае браузер вообще выдал фатальную ошибку
9. DelphinPRO - 09 Февраля, 2013 - 10:59:16 - перейти к сообщению
KCA99 пишет:
2) Если написать так, то кнопка работает как надо. Только вот по нажатию на F5 прибавляется 5 арбузов и БД тоже обновляется..

FireFox в таком случае выдаст предупреждение о повторной отправке данных. Когда вы обновляете страницу после нажатия кнопки, браузер снова отправляет post-запрос.
Чтобы этого избежать, можно сделать редирект страницы на саму себя.

PHP:
скопировать код в буфер обмена
  1. if ($_SERVER['REQUEST_METHOD'] == 'POST')
  2. {
  3.   $summa = ($myrow['arbuz'] + 5);
  4.   mysql_query("UPDATE baza SET arbuz=$summa WHERE log='user'");
  5.   header('Location: ' . $_SERVER['REQUEST_URI']);
  6.   die();
  7. }


PS. Оформите свой пост bb-тегами, проявите чуточку уважения к читающим.
10. KCA99 - 09 Февраля, 2013 - 11:15:20 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. if ($_SERVER['REQUEST_METHOD'] == 'POST')
  2.                 {
  3.                 $summa = ($myrow['arbuz'] + 5);
  4.                 mysql_query("UPDATE baza SET arbuz=$summa WHERE log='user'");
  5.                 header('Location: ' . $_SERVER['REQUEST_URI']);
  6.                 die();
  7.                 }


попробовал сделать так. страница стала работать только 1 раз при обновлении через адресную строку.
при нажатии ф5 или на кнопку браузер пишет ошибку (Warning: Cannot modify header information - headers already sent by (output started at S:\home\localhost\www\forum.loc\index.php:10) in S:\home\localhost\www\forum.loc\index.php on line 25)
(Добавление)
Ув. DelphinPRO если есть еще варианты, то подскажите, пожалуйста.
11. DelphinPRO - 09 Февраля, 2013 - 13:58:55 - перейти к сообщению
вы сделали все правильно. Просто нужно учесть один момент. Вызывать функцию header можно только до любого вывода на страницу.

т.е. полный код будет примерно таким

CODE (htmlphp):
скопировать код в буфер обмена
  1. <?PHP // <<- этот тег должен стоять в самом начале страницы.
  2. //   Перед ним не должно быть пробелов и пустых строк
  3. // До вызова header() не болжно быть ни одного echo в этом и подключаемых файлах.
  4.  
  5.  
  6. /* СНАЧАЛА обрабатываем данные */
  7.    //Подключение к БД
  8.    $db = mysql_connect("localhost","user","12345");
  9.    mysql_select_db("site",$db);
  10.    $result = mysql_query("SELECT * FROM baza WHERE log='user'",$db);
  11.    $myrow = mysql_fetch_array($result);
  12.    if ($_SERVER['REQUEST_METHOD'] == 'POST')
  13.    {
  14.        $summa = ($myrow['arbuz'] + 5);
  15.        mysql_query("UPDATE baza SET arbuz=$summa WHERE log='user'");
  16.        header('Location: ' . $_SERVER['REQUEST_URI']);
  17.        die();
  18.    }
  19.  
  20. /* ПОТОМ выводим html */
  21. ?>
  22. <body class="a">
  23.  
  24.     <?= $myrow['arbuz'] ?>
  25.     <br><br<br><br>
  26.  
  27.     <form id="sum" method="POST"  action="">
  28.         <input type="submit" value="Прибавить 5" name="knopka"/>
  29.     </form>
  30.  
  31. </body>
12. imya - 09 Февраля, 2013 - 14:21:24 - перейти к сообщению
KCA99 пишет:



А в этом случае браузер вообще выдал фатальную ошибку

А он и будет выдавать фатальную ошибку, учитывая, что вы используется mysql, а не mysqli.
13. KCA99 - 09 Февраля, 2013 - 16:42:19 - перейти к сообщению
Спасибо, помогло!! )

 

Powered by ExBB FM 1.0 RC1