PHP . SU
Программирование на PHP, MySQL и другие веб-технологии
Без описания
Поиск в теме | Версия для печати
Алтенрион
Отправлено: 03 Октября, 2012 - 03:05:23
Частый гость
Покинул форум
Сообщений всего: 180
Дата рег-ции: Сент. 2012
Откуда: Москва, Россия
Помог: 0 раз(а)
Собственно, постараюсь понятно и доходчиво объяснить суть проблемы.
Имеется 15 веб форм. Они методом POST передают обработчику данные. В обработчике требуется проверить на существование информации в этих переменных и в случае обнаружения таковой внести все данные построчно в базу.
Более подробно:
Имеются 15 checkbox -ов, пользователь может из них выбрать любые и в любом кол-ве. При подтверждении заполнения форм, все данные передаются скрипту обработчика.
В нем реализуется такая проверка :
PHP:
скопировать код в буфер обмена
if ( isset ( $_POST [ 'a' ] ) ) { $a = $_POST [ 'a' ] ; if ( $a == '' ) { unset ( $a ) ; } } if ( isset ( $_POST [ 'b' ] ) ) { $a = $_POST [ 'b' ] ; if ( $b == '' ) { unset ( $b ) ; } } if ( isset ( $_POST [ 'c' ] ) ) { $a = $_POST [ 'c' ] ; if ( $c == '' ) { unset ( $c ) ; } } if ( isset ( $_POST [ 'd' ] ) ) { $a = $_POST [ 'd' ] ; if ( $d == '' ) { unset ( $d ) ; } } if ( isset ( $_POST [ 'e' ] ) ) { $a = $_POST [ 'e' ] ; if ( $e == '' ) { unset ( $e ) ; } }
---- || -----
if ( isset ( $_POST [ 'z' ] ) ) { $a = $_POST [ 'z' ] ; if ( $z == '' ) { unset ( $z ) ; } }
Таким образом выполняется проверка существования выделения пользователем соответствующих чек-боксов.
Далее все данные надо занести в 1 переменную с разделением на строки :
Собственно Это очень сырое написание. Убедительная просьба помочь сократить код, или помочь разобраться , возможно ли здесь применение цикла foreach.(Отредактировано автором: 03 Октября, 2012 - 03:05:54)
tato
Отправлено: 03 Октября, 2012 - 03:47:50
Посетитель
Покинул форум
Сообщений всего: 468
Дата рег-ции: Сент. 2011
Откуда: Владивосток
Помог: 8 раз(а)
Обрати внимание на name фактически мы создаем таким образом массив mydata, где
ключом является checkbox_id.
далее
PHP:
скопировать код в буфер обмена
if ( isset ( $_POST [ 'mydata' ] ) ) {
// если массив существует
// перебираем
foreach ( $_POST [ 'mydata' ] as $checkbox_id => $value )
{
echo "$checkbox_id was checked!<br>" ;
}
}
Отмечу, что $value всегда будет true (в данном примере), т.к. если чек бокс не выделен, он и не попадет в массив mydata.(Отредактировано автором: 03 Октября, 2012 - 03:49:42)
AlexAnder
Отправлено: 03 Октября, 2012 - 09:20:26
Частый посетитель
Покинул форум
Сообщений всего: 915
Дата рег-ции: Авг. 2012
Откуда: Россия
Помог: 34 раз(а)
Спойлер (Отобразить ) PHP:
скопировать код в буфер обмена
<form action="" method="post">
<label for="Beer">Drink Beer?</label><input id="Beer" type="checkbox" name="DrinkBeer"><br>
<label for="Meat">Eat Meat?</label><input type="checkbox" id="Meat" name="EatMeat"><br>
<label for="Sex">Do Sex?</label><input type="checkbox" id="Sex" name="DoSex"><br><br>
<input type="submit" name="sbm" value=" GO ">
</form>
<?PHP
if ( isset ( $_POST [ 'sbm' ] ) ) { $beer = ( isset ( $_POST [ 'DrinkBeer' ] ) ) ?
'alkash' : 'uspeshniy' ; $meat = ( isset ( $_POST [ 'EatMeat' ] ) ) ?
'myasoed' : 'vegetarianec' ; $sex = ( isset ( $_POST [ 'DoSex' ] ) ) ?
'samec^^' : 'mastubator' ; echo '
<table border="1" width="100%"><tbody>
<tr><td>Id</td><td>Name</td><td>Beer</td><td>Meat</td><td>Sex</td></tr>
<tr><td>$_SESSION["id"]</td><td>$_SESSION["login"]</td><td>' . $beer . '</td><td>' . $meat . '</td><td>' . $sex . '</td></tr>
</tbody></table>' ; // вместо этого заносим данные в базу, а не выводим их в браузер
}
?>
(Отредактировано автором: 03 Октября, 2012 - 09:20:52)
-----Оказывается, недостаточно читать справочники, чтобы правильно писать коды. sadex ©
Форумы стали местом обучения программированию, а не решения трудных вопросов. KingStar ©
Алтенрион
Отправлено: 03 Октября, 2012 - 14:30:35
Частый гость
Покинул форум
Сообщений всего: 180
Дата рег-ции: Сент. 2012
Откуда: Москва, Россия
Помог: 0 раз(а)
Okula пишет: Алтенрион пишет:
--- name у каждого чек бокса свой. так вместо checkbox_id надо будет 15 раз написать разный идентификатор id?
Ну ты же писал для каждого чекбокса свой name, вот и подправь его. В чём проблема?
Я не говорю что это проблема, я уточняю как именно подправить...
PHP:
скопировать код в буфер обмена
< p id= "not_rec" >< input type= "checkbox" name= "a" value= "r" /> ***********************************************</ p>
< p id= "rec" >< input type= "checkbox" name= "b" value= "r" /> ***********************************************</ p>
< p id= "rec" >< input type= "checkbox" name= "c" value= "r" /> ***********************************************</ p>
< p id= "not_rec" >< input type= "checkbox" name= "d" value= "r" /> ***********************************************</ p>
< p id= "not_rec" >< input type= "checkbox" name= "e" value= "r" /> *********************************************** </ p>
< p id= "not_rec" >< input type= "checkbox" name= "f" value= "r" /> ***********************************************</ p>
< p id= "rec" >< input type= "checkbox" name= "g" value= "r" /> ***********************************************</ p>
< p id= "not_rec" >< input type= "checkbox" name= "k" value= "r" /> *********************************************** </ p>
< p id= "not_rec" >< input type= "checkbox" name= "r" value= "r" /> *********************************************** </ p>
Заменить на :
PHP:
скопировать код в буфер обмена
< p id= "not_rec" >< input type= "checkbox" name= "mydata[a]" value= "r" /> ***********************************************</ p>
< p id= "rec" >< input type= "checkbox" name= "mydata[b]" value= "r" /> ***********************************************</ p>
< p id= "rec" >< input type= "checkbox" name= "mydata[c]" value= "r" /> ***********************************************</ p>
< p id= "not_rec" >< input type= "checkbox" name= "mydata[d]" value= "r" /> ***********************************************</ p>
< p id= "not_rec" >< input type= "checkbox" name= "mydata[e]" value= "r" /> *********************************************** </ p>
< p id= "not_rec" >< input type= "checkbox" name= "mydata[f]" value= "r" /> ***********************************************</ p>
< p id= "rec" >< input type= "checkbox" name= "mydata[g]" value= "r" /> ***********************************************</ p>
< p id= "not_rec" >< input type= "checkbox" name= "mydata[k]" value= "r" /> *********************************************** </ p>
< p id= "not_rec" >< input type= "checkbox" name= "mydata[r]" value= "r" /> *********************************************** </ p>
И что именно выполнит значение Value в строке
/
AlexAnder
Отправлено: 03 Октября, 2012 - 14:39:46
Частый посетитель
Покинул форум
Сообщений всего: 915
Дата рег-ции: Авг. 2012
Откуда: Россия
Помог: 34 раз(а)
http://www.php[dot]su/learnphp/cs/?cycles#foreach
Спойлер (Отобразить ) CODE (
html ):
скопировать код в буфер обмена
<p id = "not_rec" ><input type = "checkbox" name = "mydata[a]" value = "r" / > ***********************************************</ p >
<p id = "rec" ><input type = "checkbox" name = "mydata[b]" value = "r" / > ***********************************************</ p >
<p id = "rec" ><input type = "checkbox" name = "mydata[c]" value = "r" / > ***********************************************</ p >
<p id = "not_rec" ><input type = "checkbox" name = "mydata[d]" value = "r" / > ***********************************************</ p >
<p id = "not_rec" ><input type = "checkbox" name = "mydata[e]" value = "r" / > *********************************************** </ p >
<p id = "not_rec" ><input type = "checkbox" name = "mydata[f]" value = "r" / > ***********************************************</ p >
<p id = "rec" ><input type = "checkbox" name = "mydata[g]" value = "r" / > ***********************************************</ p >
<p id = "not_rec" ><input type = "checkbox" name = "mydata[k]" value = "r" / > *********************************************** </ p >
<p id = "not_rec" ><input type = "checkbox" name = "mydata[r]" value = "r" / > *********************************************** </ p >
повторение id - not good(Отредактировано автором: 03 Октября, 2012 - 14:50:13)
-----Оказывается, недостаточно читать справочники, чтобы правильно писать коды. sadex ©
Форумы стали местом обучения программированию, а не решения трудных вопросов. KingStar ©
Мелкий
Отправлено: 03 Октября, 2012 - 21:21:19
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009
Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
Алтенрион пишет: Так где же повторение?...
Речь о HTML. <p id=
id не должен повторяться на странице. На то он и id
sKaa
Отправлено: 03 Октября, 2012 - 21:24:44
Частый посетитель
Покинул форум
Сообщений всего: 979
Дата рег-ции: Окт. 2011
Откуда: Россия г. Нижний Новгород
Помог: 25 раз(а)
[+]
CODE (
html ):
скопировать код в буфер обмена
<input type = "text" name = "text[]" / >
<input type = "text" name = "text[]" / >
<input type = "text" name = "text[]" / >
<input type = "text" name = "text[]" / >
Нет?(Отредактировано автором: 03 Октября, 2012 - 21:50:21)
Алтенрион
Отправлено: 04 Октября, 2012 - 00:03:34
Частый гость
Покинул форум
Сообщений всего: 180
Дата рег-ции: Сент. 2012
Откуда: Москва, Россия
Помог: 0 раз(а)
Мелкий пишет:
Речь о HTML. <p id=
id не должен повторяться на странице. На то он и id
Насчет этого ,да, согласен. Вспомнил разницу между id и class и исправил. Просто писал первичный код будучи ну очень сонным, а потом и внимания не обращал.
Далее.
sKaa пишет:
CODE (
html ):
скопировать код в буфер обмена
скопировать код в буфер обмена
<input type = "text" name = "text[]" / >
<input type = "text" name = "text[]" / >
<input type = "text" name = "text[]" / >
<input type = "text" name = "text[]" / >
Нет?
Честно говоря совсем не понял (((((... <input type="text" -- это текстовое поле а не чек бокс. Но это не принципиально если речь о имени... а использование var_dump($_POST); мне не известно.
На данный момент фукционально реализован такой код:
Сами формы:
CODE (
html ):
скопировать код в буфер обмена
<p class = "not_rec" ><input type = "checkbox" name = "a" value = "АААААААААААА" / > ААААААААААААААА </ p >
<p class = "rec" ><input type = "checkbox" name = "b" value = "ббббббббббббббб»" / > ббббббббббб <font color = "#C10000" > (рекомендуется) </ font ></ p >
<p class = "rec" ><input type = "checkbox" name = "c" value = "ввввввввввввввв" / > ввввввввввввввввввввв <font color = "#C10000" > (рекомендуется) </ font ></ p >
<p class = "not_rec" ><input type = "checkbox" name = "d" value = "гггггггггггггггггггггггггг" / > ггггггггггггггггггггггггггггггггггггггг </ p >
<p class = "not_rec" ><input type = "checkbox" name = "e" value = "ддддддддддддддддд." / > ддддддддддддддддддддддддд</ p >
<p class = "not_rec" ><input type = "checkbox" name = "f" value = "ееееееееееееееееееееее" / > ееееееееееееееееееееееееее</ p >
Вот код обработчика для них :
PHP:
скопировать код в буфер обмена
if ( isset ( $_POST [ 'a' ] ) ) { $b = $_POST [ 'a' ] ; if ( $a == '' ) { unset ( $a ) ; } } if ( isset ( $_POST [ 'b' ] ) ) { $b = $_POST [ 'b' ] ; if ( $b == '' ) { unset ( $b ) ; } } if ( isset ( $_POST [ 'c' ] ) ) { $c = $_POST [ 'c' ] ; if ( $c == '' ) { unset ( $c ) ; } } if ( isset ( $_POST [ 'd' ] ) ) { $d = $_POST [ 'd' ] ; if ( $d == '' ) { unset ( $d ) ; } } if ( isset ( $_POST [ 'e' ] ) ) { $e = $_POST [ 'e' ] ; if ( $e == '' ) { unset ( $e ) ; } } if ( isset ( $_POST [ 'f' ] ) ) { $f = $_POST [ 'f' ] ; if ( $f == '' ) { unset ( $f ) ; } }
$gt = $a . '<br>' . $b . '<br>' . $c . '<br>' . $d . '<br>' . $e . '<br>' . $f ;
Далее через запрос данные заносятся в нужную базу:
PHP:
скопировать код в буфер обмена
$result2 = mysql_query ( "INSERT INTO название таблицы (***,****,*****,***,***,***,****,***,***,gt) VALUES('$***','$***','$****','$***','$***','$***','$***','$***','$****','$gt ')" ) ;
В чем суть оставшихся проблем:
1)Не нравится нагромождение кода.
2)Требуется что бы переменные $a $b $c $d $e $f сохранялись в базе построчно, и в случае отсутствия какого либо из элементов, чтобы его там не было, чтобы он не заносился в переменную $gt. Ну или хотя бы что бы в место него не было пустых строк.
Помогите с этими вопросами, буду признателен.
.(Отредактировано автором: 04 Октября, 2012 - 00:07:45)
tato
Отправлено: 04 Октября, 2012 - 06:30:07
Посетитель
Покинул форум
Сообщений всего: 468
Дата рег-ции: Сент. 2011
Откуда: Владивосток
Помог: 8 раз(а)
Накидал тебе пример.
Спойлер (Отобразить )
PHP:
скопировать код в буфер обмена
<h1>MegaChecks!!!!</h1><br><br>
<?PHP
'foo' ,
'bar' ,
'some' ,
) ;
if ( isset ( $_POST [ 'checks' ] ) ) {
// Если жамкнули на кнопу
// достаем имена жамкнутых чек боксов
// перебираем массив с исходными данными
foreach ( $data as $item => $value )
{
// если значение присутствует в массиве
// который мы получили от формы
// заносим его в результат
{
$result [ ] = $value ;
}
}
// "конвертируем" массив результатов в строку
$result = implode ( ', ' , $result ) ;
// теперь переменная $rusult содержит выбранные
// чекбоксы. Выведем ее на эран.
echo $result ;
}
else
{
// берем данные из массива
$checks = '' ;
foreach ( $data as $item )
{
// генерируем чек боксы
$checks .= "<input type=\" checkbox\" name=\" checks[$item ]\" >$item <br>" ;
}
// отображаем форму
?>
<span>Let's do it!</span>
<form method="post" multipart/form-data>
<?PHP echo $checks ; ?>
<input type="submit" value="doit">
</form>
<?PHP
}
?>
AlexAnder
Отправлено: 04 Октября, 2012 - 10:56:15
Частый посетитель
Покинул форум
Сообщений всего: 915
Дата рег-ции: Авг. 2012
Откуда: Россия
Помог: 34 раз(а)
uchenikpopovadetected пишет: Спойлер (Отобразить ) PHP:
скопировать код в буфер обмена
if ( isset ( $_POST [ 'a' ] ) ) { $b = $_POST [ 'a' ] ; if ( $a == '' ) { unset ( $a ) ; } } if ( isset ( $_POST [ 'b' ] ) ) { $b = $_POST [ 'b' ] ; if ( $b == '' ) { unset ( $b ) ; } } if ( isset ( $_POST [ 'c' ] ) ) { $c = $_POST [ 'c' ] ; if ( $c == '' ) { unset ( $c ) ; } } if ( isset ( $_POST [ 'd' ] ) ) { $d = $_POST [ 'd' ] ; if ( $d == '' ) { unset ( $d ) ; } } if ( isset ( $_POST [ 'e' ] ) ) { $e = $_POST [ 'e' ] ; if ( $e == '' ) { unset ( $e ) ; } } if ( isset ( $_POST [ 'f' ] ) ) { $f = $_POST [ 'f' ] ; if ( $f == '' ) { unset ( $f ) ; } }
бррр
(Добавление)
Алтенрион пишет:
В чем суть оставшихся проблем:
1)Не нравится нагромождение кода.
2)Требуется что бы переменные $a $b $c $d $e $f сохранялись в базе построчно, и в случае отсутствия какого либо из элементов, чтобы его там не было, чтобы он не заносился в переменную $gt. Ну или хотя бы что бы в место него не было пустых строк.
.
посмотри этот пост
Спойлер (Отобразить ) PHP:
скопировать код в буфер обмена
<form action="" method="post">
<label for="Beer">Drink Beer?</label><input id="Beer" type="checkbox" name="DrinkBeer"><br>
<label for="Meat">Eat Meat?</label><input type="checkbox" id="Meat" name="EatMeat"><br>
<label for="Sex">Do Sex?</label><input type="checkbox" id="Sex" name="DoSex"><br><br>
<input type="submit" name="sbm" value=" GO ">
</form>
<?PHP
if ( isset ( $_POST [ 'sbm' ] ) ) { $beer = ( isset ( $_POST [ 'DrinkBeer' ] ) ) ?
'alkash' : 'uspeshniy' ; $meat = ( isset ( $_POST [ 'EatMeat' ] ) ) ?
'myasoed' : 'vegetarianec' ; $sex = ( isset ( $_POST [ 'DoSex' ] ) ) ?
'samec^^' : 'mastubator' ; echo '
<table border="1" width="100%"><tbody>
<tr><td>Id</td><td>Name</td><td>Beer</td><td>Meat</td><td>Sex</td></tr>
<tr><td>$_SESSION["id"]</td><td>$_SESSION["login"]</td><td>' . $beer . '</td><td>' . $meat . '</td><td>' . $sex . '</td></tr>
</tbody></table>' ; // вместо этого заносим данные в базу, а не выводим их в браузер
//Это не обязательно:
if ( $beer == 'alkash' ) echo '<script>document.getElementById("Beer").checked=true</script>' ;
if ( $meat == 'myasoed' ) echo '<script>document.getElementById("Meat").checked=true</script>' ;
if ( $sex == 'samec^^' ) echo '<script>document.getElementById("Sex").checked=true</script>' ;
}
?>
(Отредактировано автором: 04 Октября, 2012 - 11:08:45)
-----Оказывается, недостаточно читать справочники, чтобы правильно писать коды. sadex ©
Форумы стали местом обучения программированию, а не решения трудных вопросов. KingStar ©
Поиск в теме | Версия для печати
Страниц (3): [1] 2 3 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
Powered by ExBB FM 1.0 RC1. InvisionExBB