Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Вывод цикла с вложенной проверкой для чекбоксов.
 
 автор: lElectroHardl   (29.07.2010 в 18:00)   письмо автору
 
 

Есть цикл с проверкой. Эта проверка проверяет, существует ли чекбокс. Если он существует, то дать ему значение CHECKED.
Вопросы:
1. Разумен ли такой цикл с такой проверкой. Нет - посоветуйте другой.
2. Почему-то у меня не проходит первую проверку (проверка существования чекбоксов) и всем чекбоксам дается значение CHECHED.
$data1 = mysql_query("SELECT * FROM ings LIMIT 0,8",$db);
$data = mysql_fetch_array($data1);

echo <<<I
<form method="post" name="gen_search_form" action="http://offcook.com/generator.php?p=generator&gen_search=ok">
I;

do
{

if ( $i.$data['id'] )
{
echo <<<I
<p class="gen_section"><label><input type="checkbox" checked='checked' name="i$data[id]" value=",$data[id]" /> $data[name]</label></p>
I;
}
else
{
echo <<<I
<p class="gen_section"><label><input type="checkbox" name="i$data[id]" value=",$data[id]" /> $data[name]</label></p>
I;
}

}
while ( $data = mysql_fetch_array($data1) );

echo <<<I
<p><input type="submit" name="gen_search_submit" value=",Подобрать рецепт" /></p>
</form>
I;


$i[1-8] имя чекбокса, которое передается дальше.

  Ответить  
 
 автор: neadekvat   (29.07.2010 в 18:22)   письмо автору
 
   для: lElectroHardl   (29.07.2010 в 18:00)
 

1. Перед кодом надо ставить <?php, чтобы включалась подсветка
2. Выкиньте нахер этот код, я даже не знаю, как вам рассказать все то, что тут надо рассказать, это же ппц... Имена файлов с каким то i, значения - с запятыми.. как такой код в принципе можно поддерживать?
$i.$data['id']
Вот что за $i?

  Ответить  
 
 автор: lElectroHardl   (29.07.2010 в 18:32)   письмо автору
 
   для: neadekvat   (29.07.2010 в 18:22)
 

Я ж писал, под кодом, что $i1, $i2, $i3 ... - это имена чекбоксов. Значение с запятыми нужны для выборки через IN (2,4,8,9,19) - вот поэтому и нужны запятые.

А вы знаете, как сделать то, что я задумал?

  Ответить  
 
 автор: neadekvat   (29.07.2010 в 18:41)   письмо автору
 
   для: lElectroHardl   (29.07.2010 в 18:32)
 

value=",Подобрать рецепт"
Это вы тоже подставляете в запрос?

Пишу примерно, со своими именами переменных.

1. Избавляемся от do..while, т.к. этот цикл не подходит для обычного вывода из бд
2. Вместо mysql_fetch_array используем mysql_fetch_assoc, т.к. первое возвращает лишний массив
3. Я так и не понял, что за if ( $i.$data['id'] ) и потому переписал то, что это фактически значит (то есть то, что делали вы, только сокращенно), однако под вопросом правильность в данном конкретном случаи. И вот это
name="i{$data['id']}" value="{$data['id']}"
Тоже странный участок.
Боюсь, исправление этого маленького кусочка не спасет весь скрипт.

<form method="post" name="gen_search_form" action="http://offcook.com/generator.php?p=generator&gen_search=ok">

<?php
$query 
mysql_query("SELECT * FROM ings LIMIT 0, 8");

while(
$date mysql_fetch_assoc($query))
{
    
$checked = !empty($i.$data['id']) ? ' checked="checked"' null;
    echo 
"<p class=\"gen_section\">
          <label>
          <input type=\"checkbox\" name=\"i
{$data['id']}\" value=\"{$data['id']}\"$checked />
              
{$data['name']}
          </label>
          </p>"
;
}
?>

<p><input type="submit" name="gen_search_submit" value="Подобрать рецепт" /></p>

  Ответить  
 
 автор: lElectroHardl   (29.07.2010 в 18:52)   письмо автору
 
   для: neadekvat   (29.07.2010 в 18:41)
 

На этом $checked = !empty($i.$data['id']) ? ' checked="checked"' : null; участке выдает синтаксическую ошибку.
И можно пояснить, что означает "?" и ":" в этой проверке? "Если, то, иначе"?

  Ответить  
 
 автор: neadekvat   (29.07.2010 в 18:58)   письмо автору
 
   для: lElectroHardl   (29.07.2010 в 18:52)
 

> "Если, то, иначе"?
Да

Так $i существует?

  Ответить  
 
 автор: lElectroHardl   (29.07.2010 в 19:07)   письмо автору
 
   для: neadekvat   (29.07.2010 в 18:58)
 

Поначалу нет, т.к. чекбокс не выбран. Когда его выберут, то, по идее, он будет выбран.
Но на деле, они почему-то сразу становится выбранным. Как можно избежать этого преждевременного выбирания чекбоксов?

  Ответить  
 
 автор: sms-send   (29.07.2010 в 19:05)   письмо автору
 
   для: neadekvat   (29.07.2010 в 18:41)
 

> !empty($i.$data['id'])

Так нельзя, empty - не функция, передать можно только переменную, но не выражение.

  Ответить  
 
 автор: neadekvat   (29.07.2010 в 19:08)   письмо автору
 
   для: sms-send   (29.07.2010 в 19:05)
 

Tnx ;)

  Ответить  
 
 автор: lElectroHardl   (29.07.2010 в 19:14)   письмо автору
 
   для: neadekvat   (29.07.2010 в 19:08)
 

$i.$data['id'] - есть ряд переменных ,которые соответствуют чекбоксам. Переменных этих много ($i1, $i2, $i3...). В <input name=""> должна быть имя этого чекбокса (т.е. переменная ($i1, $i2, $i3...)). В базе храниться часть этого имени (циферки).
Т.е. я для каждого чекбокса должен брать из базы свою циферку (по значению поля id). Из этого и вытекает $data['id']

Соответственно, что бы в базе хранить только циферки от этих имен чекбоксов, я должен вывести эту самую циферку и имя чекбокса, в его будущею переменную $i

  Ответить  
 
 автор: neadekvat   (29.07.2010 в 19:18)   письмо автору
 
   для: lElectroHardl   (29.07.2010 в 19:14)
 

Ок, и откуда же беруться переменные, которых много ($i1, $i2,..) ?
Присылаются из формы пользователем?

  Ответить  
 
 автор: lElectroHardl   (29.07.2010 в 19:08)   письмо автору
 
   для: sms-send   (29.07.2010 в 19:05)
 

А как можно это выражение
!empty($i.$data['id']) ? ' checked="checked"' : null;

занести в переменную? Или как выполнить эту проверку?

  Ответить  
 
 автор: neadekvat   (29.07.2010 в 19:11)   письмо автору
 
   для: lElectroHardl   (29.07.2010 в 19:08)
 

Не отвлекайтесь. Надо изменить логику приложения и тогда информация о выбранном чекбоске окажется в другой перменной. Собственно, и проверка будет проходить иначе.

  Ответить  
 
 автор: lElectroHardl   (29.07.2010 в 19:17)   письмо автору
 
   для: neadekvat   (29.07.2010 в 19:11)
 

А как собственно, сделать проверку по другому? Подскажите. Примером.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования