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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Опрос, создание цикла...

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
Staind
Отправлено: 01 Ноября, 2007 - 09:06:14
Post Id



Гость


Покинул форум
Сообщений всего: 116
Дата рег-ции: Нояб. 2007  
Откуда: Планета сокровищ


Помог: 0 раз(а)

[+]


Здравствуйте. Если кто может помогите плиз Улыбка
Есть опрос с 5 вариантами ответа.
Также есть скрипт, обрабатывающий эти данные. Изначально скрипт был без цикла, т.е.
PHP:
скопировать код в буфер обмена
  1. $otvet1 = @$_POST['otvet1'];
  2. $otvet2 = @$_POST['otvet2'];
  3. $otvet3 = @$_POST['otvet3'];
  4. $otvet4 = @$_POST['otvet4'];
  5. $otvet5 = @$_POST['otvet5'];

И далее я этими данными монипулирую, убираю лишние пробелы, апострофы и заношу в базу данных (перед этим делаю условие на длину строки).

А теперь хочу сделать цикл. Я думаю это будет правельнее (если нет, то, если не трудно, напишите почему).
Я пишу так:
PHP:
скопировать код в буфер обмена
  1.    for ( $i=1 ; $i<6 ; $i++ ) {
  2.    $otvet = @$_POST['otvet$i'];
  3.    $voter = @$_POST['voter$i'];
  4.    echo ("$otvet");
  5.    allstrings (&$otvet);
  6.    allstrings (&$voter);
  7.       if (strlen ($otvet>=1)) {
  8.       mysql_query ("UPDATE opros SET name='$otvet',voter='$voter' WHERE id='$i'");
  9.       }
  10.    }

И короче не работает Улыбка
Т.е. вместо того, чтобы писать
PHP:
скопировать код в буфер обмена
  1. ['otvet1']...['otvet2']...['otvetN'],

я присваиваю к

некую i, которая меняется от 1 до 5. Но не работает почему-то, можете объяснитЬ?)
 
 Top
Волк
Отправлено: 01 Ноября, 2007 - 09:36:51
Post Id



Частый гость


Покинул форум
Сообщений всего: 149
Дата рег-ции: Окт. 2007  


Помог: 0 раз(а)




Я думаю что надо писать как то так
PHP:
скопировать код в буфер обмена
  1. $otvet{$i} = @$_POST["otvet{$i}"];

кавычки обязательно такие ", а не такие '. Плюс когда что то не работает, я чтобы разобраться, пишу это без @.


-----
Таран - оружие героев!
 
 Top
EuGen Администратор
Отправлено: 01 Ноября, 2007 - 09:39:31
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Вот конкретно в Вашем цикле проблема в том, что Вы используете:

когда строка указывается в одиночных кавычках, она воспринимается "как есть", то есть php пытается обратиться к элементу $_POST с индексом otvet$i - не подставляет значение $i, а именно ищет индекс, у которого такое имя.
Правильно будет:

Касательно организации цикла - думаю, универсальнее будет:
PHP:
скопировать код в буфер обмена
  1.  
  2. $i=1;
  3. while(isset($_POST["otvet$i"]))
  4. {
  5.    //тут делать что-то с данными
  6.    $i++;
  7. };
  8.  

Ну и плюс к тому рекомендую не предварять символом "@" переменные суперглобальных массивов - так Вы увидите, если используете какой-либо неинициализированный индекс, например (это при включенном уровне ошибок 2047, он же E_ALL).


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
evgenijj
Отправлено: 01 Ноября, 2007 - 09:43:42
Post Id



Участник


Покинул форум
Сообщений всего: 1212
Дата рег-ции: Авг. 2006  
Откуда: Москва


Помог: 10 раз(а)




PHP:
скопировать код в буфер обмена
  1.  
  2. <form action="otvet.php" method="POST">
  3. <input type="text" name="otvet[]" value="" />
  4. <input type="text" name="otvet[]" value="" />
  5. <input type="text" name="otvet[]" value="" />
  6. <input type="submit" name="submit" value="Go!" />
  7. </form>
  8. <?PHP
  9. if ( isset( $_POST['submit'] ) )
  10. {
  11.   foreach( $_POST['otvet'] as $value )
  12.   {
  13.     echo $value.'<br/>';
  14.   }
  15. }
  16. ?>
  17.  
 
 Top
Волк
Отправлено: 01 Ноября, 2007 - 09:54:38
Post Id



Частый гость


Покинул форум
Сообщений всего: 149
Дата рег-ции: Окт. 2007  


Помог: 0 раз(а)




EuGen, а разве не нужно, если я например пишу переменную вместе с словом отделять её точкой или фигурными скобками?
например
PHP:
скопировать код в буфер обмена
  1.  
  2. <?
  3. $a = "hell";
  4. echo "$a.o world";
  5. ?>
  6.  

или
PHP:
скопировать код в буфер обмена
  1.  
  2. <?
  3. $a = "hell";
  4. echo "{$a}o world";
  5. ?>
  6.  


-----
Таран - оружие героев!
 
 Top
Staind
Отправлено: 01 Ноября, 2007 - 10:04:17
Post Id



Гость


Покинул форум
Сообщений всего: 116
Дата рег-ции: Нояб. 2007  
Откуда: Планета сокровищ


Помог: 0 раз(а)

[+]


Ух ты, супер, спасиба уважаемые форумчане Волк, EuGen и evgenijj. Получилось Улыбка
По поводу знака @. Я пробую тестировать все на ДенВере. А там ошибки разные были, если писать всякие функции _POST,_GET... без @. Тогда убираю его из всех скриптов, тоже спс за совет.
P.s. Все заношу форум aka сайт в фавориты Улыбка
 
 Top
evgenijj
Отправлено: 01 Ноября, 2007 - 10:04:20
Post Id



Участник


Покинул форум
Сообщений всего: 1212
Дата рег-ции: Авг. 2006  
Откуда: Москва


Помог: 10 раз(а)




Волк пишет:
EuGen, а разве не нужно, если я например пишу переменную вместе с словом отделять её точкой или фигурными скобками?
например
PHP:
скопировать код в буфер обмена
  1.  
  2. <?
  3. $a = "hell";
  4. echo "$a.o world";
  5. ?>
  6.  

или
PHP:
скопировать код в буфер обмена
  1.  
  2. <?
  3. $a = "hell";
  4. echo "{$a}o world";
  5. ?>
  6.  


Ты не отделяешь переменную точкой, а "склеиваешь" строку с переменной
PHP:
скопировать код в буфер обмена
  1.  
  2. $a = "Hell";
  3. echo $a."o world";
  4. echo "{$a}o world";
  5. echo "${a}o world";
  6.  

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

Да и вообще, использование в строке переменных -- анахронизм, от которого давно пора отказаться. Во-первых, строки в двойных кавычках обрабатываются медленнее, чем в одинарных (PHP нужно время на анализ спецсиволов). Во-вторых, это просто нечитабельно.
 
 Top
Волк
Отправлено: 01 Ноября, 2007 - 15:05:11
Post Id



Частый гость


Покинул форум
Сообщений всего: 149
Дата рег-ции: Окт. 2007  


Помог: 0 раз(а)




Цитата:
Да и вообще, использование в строке переменных -- анахронизм, от которого давно пора отказаться.

А если например
PHP:
скопировать код в буфер обмена
  1. echo "вы выбрали $a.й вариант";


-----
Таран - оружие героев!
 
 Top
evgenijj
Отправлено: 01 Ноября, 2007 - 15:11:05
Post Id



Участник


Покинул форум
Сообщений всего: 1212
Дата рег-ции: Авг. 2006  
Откуда: Москва


Помог: 10 раз(а)




PHP:
скопировать код в буфер обмена
  1. echo 'вы выбрали '.$a.'-й вариант';
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB