что делать дальше с $_POSTом?
Что с ним делать дальше? Как считать?
$val = $_POST['val'];
и дальше уже обращайтесь по индексу или еще как.
$count=count($_POST);
echo $count;
?>
А вообще
[ATTACH]4384[/ATTACH]
Кстати, по первой ссылке ( http://php.su/functions/?cat=array ) очень много полезного про массивы, перечислены все функции (вроде все). Даже в избранное добавил.
+ Вы сами написали - массив, так и работайте с ним, как с массивом. [COLOR="Silver"]Например, можете тупо просто удалить его и не париться.[/COLOR]
+ Вы сами написали - массив, так и работайте с ним, как с массивом.
***********************
написала такое:
{
foreach ($podmassiv as $key => $value) //перебирает ключ-значение
{
list($a, $b, $c, $d, $e, $f, $j, $h, $l, $k, $m, $n) = $value;
print $c."<br>";
}
}
он ругается 12 раз на что-то:
Notice: Undefined offset: ......
что не так?
var numb;
numb = 1;
function add_new_row() {
var currrow;
currow = document.all.tbl.rows.length; // вычислить количество строк в таблице
numb++;
document.all.tbl.insertRow(currow); // добавляем строку в таблицу
document.all.tbl.rows[currow].insertCell(0); // добавляем ячейки
document.all.tbl.rows[currow].insertCell(1);
document.all.tbl.rows[currow].insertCell(2);
document.all.tbl.rows[currow].insertCell(2);
document.all.tbl.rows[currow].cells[0].innerHTML = '<input type=\"text\" name=\"name_'+ numb +'\">'; // вставляем в форму поля
document.all.tbl.rows[currow].cells[1].innerHTML = '<input type=\"text\" name=\"url_'+ numb+'\">';
document.all.tbl.rows[currow].cells[2].innerHTML = '<input type=\"text\" name=\"category_'+ numb+'\">';
document.all.tbl.rows[currow].cells[3].innerHTML = '<input type=button name=\"btnNext\" value=\"+\" onClick=\"add_new_row()\">'; // кнопка для вызова функции для добавления следующей строки
}
</SCRIPT>
<FORM name=links method=post>
<DIV align=left>
<TABLE id=tbl cellSpacing=0 cellPadding=0 border=1>
<TBODY>
<TR bgColor=#ff9933>
<TD>Наименование</TD>
<TD>Адрес</TD>
<TD colSpan=2>Категория</TD>
</TR>
<TR>
<TD><INPUT name=name_1 WIDTH="30">
</TD>
<TD><INPUT name=URL_1 WIDTH="60">
</TD>
<TD><INPUT name=category_1 WIDTH="30">
</TD>
<TD><INPUT onclick=add_new_row() type=button value=+ name=btnNext>
</TD>
</TR>
</TBODY>
</TABLE>
<INPUT type=submit value=Submit name=submit>
<INPUT type=reset value=Сброс name=reset>
</DIV>
</FORM>
который позволяет несколько раз заполнить форму и отправить все разом на сервер.
Что хочу сделать - записать значения в базу.
прекращайте заниматься копипастом разного кривого уродливого кода. Скажите четко какая именно задача у вас стоит.
в базу придется вбивать много значений. Чтобы не мучиться каждый раз с одной формой, хотелось сделать все разом.
Но если форма одна, примеров в гугле множество, как записать значения в базу, а когда форма такая, то я немного растерялась, что делать с Постом
Я так понимаю, вы хотите вот это:
if($_POST) {
$countrows=array_count($_POST["name"]);
for($i=0; $i>$countrows; $i++) {
$name=$_POST["name"][$i];
$url=$_POST["url"][$i];
$category=$_POST["category"][$i];
mysql_query("insert into TABLENAME (name,url,category) values ('$name','$url','$category')");
}
}
?>
Обратите внимание!!!
[HTML]
document.all.tbl.rows[currow].cells[0].innerHTML = '<input type=\"text\" name=\"name[]\">'; // вставляем в форму поля
document.all.tbl.rows[currow].cells[1].innerHTML = '<input type=\"text\" name=\"url[]\">';
document.all.tbl.rows[currow].cells[2].innerHTML = '<input type=\"text\" name=\"category[]\">';
document.all.tbl.rows[currow].cells[3].innerHTML = '<input type=button name=\"btnNext\" value=\"+\" onClick=\"add_new_row()\">'; // кнопка для вызова функции для добавления следующей строки
[/HTML]
НЕ НУЖНО ДОБАВЛЯТЬ К ИМЕНИ ПОЛЯ ДОПОЛНИТЕЛЬНОЕ ЗНАЧЕНИЕ СЧЁТЧИКА...
Имя поля должно выглядеть как name[]
Переменные с одинаковыми именами и квадратными скобками передаются как массив...
Ждем разъяснений...
п.с.: с такими знаниями писать ЦМС? Ню-ню... Может просто джумлу освоить?
Но если форма одна, примеров в гугле множество, как записать значения в базу, а когда форма такая, то я немного растерялась, что делать с Постом
Вы или неправильно излагаетесь, или алогично мыслите...
Я так понимаю, вы хотите вот это:
if($_POST) {
$countrows=array_count($_POST["name"]);
for($i=0; $i>$countrows; $i++) {
$name=$_POST["name"][$i];
$url=$_POST["url"][$i];
$category=$_POST["category"][$i];
mysql_query("insert into TABLENAME (name,url,category) values ('$name','$url','$category')");
}
}
?>
******************
пример у меня не работает(
*******************
Обратите внимание!!!
[HTML]
document.all.tbl.rows[currow].cells[0].innerHTML = '<input type=\"text\" name=\"name[]\">'; // вставляем в форму поля
document.all.tbl.rows[currow].cells[1].innerHTML = '<input type=\"text\" name=\"url[]\">';
document.all.tbl.rows[currow].cells[2].innerHTML = '<input type=\"text\" name=\"category[]\">';
document.all.tbl.rows[currow].cells[3].innerHTML = '<input type=button name=\"btnNext\" value=\"+\" onClick=\"add_new_row()\">'; // кнопка для вызова функции для добавления следующей строки
[/HTML]
НЕ НУЖНО ДОБАВЛЯТЬ К ИМЕНИ ПОЛЯ ДОПОЛНИТЕЛЬНОЕ ЗНАЧЕНИЕ СЧЁТЧИКА...
Имя поля должно выглядеть как name[]
Переменные с одинаковыми именами и квадратными скобками передаются как массив...[/QUOTE]
**********************
Исправила, спасибо!
Ну а все-таки? Если не нервничать по поводу моих незнаний, кто-нибудь подскажите, пожалуйста, как мне массив в базу записать?
1) все поля будут иметь строковый тип данных и как следствие будет медленно работать
2) Достаточно будет одного значения для которого нет поля в таблице чтобы обрушить систему
Если вы хотите записать массив в базу - хорошо бы все таки проверить каждое значение на наличие SQL-инъекций, а сам массив после этого упаковать в какой-нибудь формат наподобие JSON
Вообще с такими знаниями как у вас вам рано писать какие-либо админки. То есть писать-то можно, но будут это кривые поделки, которые плохо работают и легко взламываются.
http://ru.wikipedia.org/wiki/SQL-инъекция
JSON
http://ru.wikipedia.org/wiki/JSON
http://www.php.net/manual/en/function.json-encode.php
http://www.php.net/manual/en/function.json-decode.php
PS и заканчивайте использовать примеры Kesano - пока ничего толкового он вам не показал - только запутал.
Что не работает?? Какие сообщения об ошибках, вообще что там пишется?? Почитайте, что написано.
Вам дали конкретный пример (в целом рабочий). Причин неработоспособности скрипта я вижу:
1) Скопипастили криво
2) Не создали таблицу в базе данных, в кот. будете хранить
3) Вообще не установили СУБД
Удосужтесь почитать учебники, ведь за вас делать никто не будет.
Kesano
if($_POST) - этого в целом вообще не надо, а уж если и надо, то лучше писать isset, ибо логичнее.
Franky
Не надо ссылки на ЛОР))) Я как туда зайду - часов 5 не вылезу =)
Upd.
RussianSpy - да ладно) Пусть хотя бы осилит добавление данных, а уж потом про безопасность, с таким уровнем познания нельзя требовать такое сразу, но надо, чтоб все равно в голове это было, не забывалось
Что не работает?? Какие сообщения об ошибках, вообще что там пишется?? Почитайте, что написано.
Вам дали конкретный пример (в целом рабочий). Причин неработоспособности скрипта я вижу:
1) Скопипастили криво
2) Не создали таблицу в базе данных, в кот. будете хранить
3) Вообще не установили СУБД
Удосужтесь почитать учебники, ведь за вас делать никто не будет.
выдает ошибку, что функция array_count науке неизвестна.
По поиску в гугле находит array_count_value, но просто ничего не пишет в базу.
Уважаемые господа эксперты, вы все тоже когда-то начинали. Я читаю книги, я учусь и стараюсь, но если что-то не получается, считаю, что спросить об этом будет нелишним.
Так что используйте функцию count - она то, что надо.
Вот исправленное:
if(isset($_POST["name"])) {
$countrows=count($_POST["name"]);
for($i=0; $i>$countrows; $i++) {
$name=$_POST["name"][$i];
$url=$_POST["url"][$i];
$category=$_POST["category"][$i];
mysql_query("insert into TABLENAME (name,url,category) values ('$name','$url','$category')");
}
}
?>
может, я неправильно вопрос ставлю - мне непонятен тут один момент.
Как данные проверять, записывать в базу, я понимаю.
Непонятно вот что - приходит большой массив $_POST
теперь его значения надо присвоить нескольким переменным, для проверки и тд,
а потом циклом записать в бд, то есть сделать в бд несколько записей.
Вот исправленное:
if(isset($_POST["name"])) {
$countrows=count($_POST["name"]);
for($i=0; $i>$countrows; $i++) {
$name=$_POST["name"][$i];
$url=$_POST["url"][$i];
$category=$_POST["category"][$i];
mysql_query("insert into TABLENAME (name,url,category) values ('$name','$url','$category')");
}
}
?>
наверное,
но все равно ругается
Notice: Undefined index:
Franky
Не надо ссылки на ЛОР))) Я как туда зайду - часов 5 не вылезу =)
хехе, заразился сам - зарази другого =)
2. А вы подключение к базе сделали?
3. А ошибки какие-то выдает у вас?
4. А вы ПРАВИЛЬНОЕ имя таблицы написали?
5. А вы ПРАВИЛЬНО оформили ХТМЛ? Имена переменных в форме?
6. .......
9999. А у вас есть парень?
Notice: Undefined index:
Потому у вас всё неправильно...
Может проще научиться готовить???
2. А вы подключение к базе сделали?
3. А ошибки какие-то выдает у вас?
4. А вы ПРАВИЛЬНОЕ имя таблицы написали?
5. А вы ПРАВИЛЬНО оформили ХТМЛ? Имена переменных в форме?
6. .......
9999. А у вас есть парень?
Потому у вас всё неправильно...
Может проще научиться готовить???
подключение есть, имена все правильные, на примерах попроще, не с циклом, все проверено и работает. На Ваш конкретно пример ругается так -
Undefined index: name
Undefined index: url
Undefined index: category
Я так понимаю, что если он на индекс ругается, то имена таблиц и имена переменных в форме тут ни при чем?
ставим пред фор-ом var_dump($_POST);die(); смотрим что приходит и кореткируем код
Вот вам пример.
Пусть форма с тремя полями:
1) Никнейм (до 40 символов в длину)
2) Возраст (>= 1, <= 100)
3) Наличие машины (да/нет) (правда ввод флага малость усложняет пример, ну что поделать)
Дабы не париться с кучей полей для ввода (сами делайте), за раз на форме можно будет добавить только трех человек.
Если введенные данные некорректны, то данный человек просто игнорируется (не добавляется). В конце просто покажем никнеймы тех, кого добавили.
Создаем таблицу в БД:
`id` INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
`nickname` VARCHAR(40) NOT NULL,
`age` TINYINT UNSIGNED NOT NULL,
`has_car` BOOL NOT NULL
) TYPE = MyISAM DEFAULT CHARSET = utf8;
Ваяем следующую форму:
<table>
<tr>
<th>Никнейм</th>
<th>Возраст</th>
<th>Наличие машины</td>
</tr>
<tr>
<td><input type="text" name="nickname[0]" /></td>
<td><input type="text" name="age[0]" /></td>
<td><input type="checkbox" name="has_car[0]" /></td>
</tr>
<tr>
<td><input type="text" name="nickname[1]" /></td>
<td><input type="text" name="age[1]" /></td>
<td><input type="checkbox" name="has_car[1]" /></td>
</tr>
<tr>
<td><input type="text" name="nickname[2]" /></td>
<td><input type="text" name="age[2]" /></td>
<td><input type="checkbox" name="has_car[2]" /></td>
</tr>
<tr>
<td colspan="3"><input type="submit" value="Добавить" /></td>
</tr>
</form>
Так как мои слова выше о var_dump ТС были проигнорены, то надо будет здесь тыкнуть носом.
Для начала создадим form.php с кодом:
var_dump нам покажет примерно следующее:
["nickname"]=>
array(3) {
[0]=>
string(3) "UAS"
[1]=>
string(6) "Kesano"
[2]=>
string(6) "Ктулху"
}
["age"]=>
array(3) {
[0]=>
string(2) "21"
[1]=>
string(2) "19"
[2]=>
string(6) "100500"
}
["has_car"]=>
array(2) {
[1]=>
string(2) "on"
[2]=>
string(2) "on"
}
}
Теперь надо добавить эту красоту в БД (а заодно сначала проверить, ибо хороших людей мало).
// проверка того, что в $_POST есть требуемые ключи.
// has_car проверять не надо, т.к. если не поставлена ни одна галочка,
// то не установится данный ключ в массиве (что мне, как бэ, не нравится, но что поделать)
if( !isset($_POST["nickname"]) || !isset($_POST["age"]) ) {
die("POST data incorrect");
}
// Никнеймы тех, кого добавили
$added_users_nicknames = array();
// Подключаемся к БД (не забываем подстанавливать реальные данные подключения)
mysql_connect("*db_host*", "*db_name*", "*db_password*");
mysql_select_db("*db_database*");
mysql_query("SET NAMES 'utf8'"); // нормальные люди работают с UTF-8.
/*
по идее ниже мне важнее будет переменная $id, а не $nickname,
т.к. я привык работать напрямую с данными в массиве, а не вытаскивать
все в переменные, ибо считаю это идиотизмом + растрачиванием памяти
(не плодите сущности).
for я здесь не использую, т.к. я его считаю не нужным для данной задачи.
Почему - могу объяснить, если кому надо будет.
*/
foreach( $_POST["nickname"] as $id => $nickname ) {
// проверка длины никнейма (обрезаного от крайних пробельных символов)
if( strlen(trim($_POST["nickname"][$id])) > 40 ) continue;
// проверка возраста
if( !isset($_POST["age"][$id]) || !is_numeric($_POST["age"][$id]) ||
(int)$_POST["age"][$id] < 1 || (int)$_POST["age"][$id] > 100
) continue;
// данные указаны верно, а потому добавляем данные
// и не забываем про SQL-injections
/*
Добавлять пользователей можно через INSERT команду SQL, каждый раз при этом
вызывая mysql_query. Как люди умные - надо сделать добавление одним SQL-запросом.
Но для простоты примера (для ТС) я буду каждый раз вызывать mysql_query.
В реальной жизни (ТС помни!) это надо сделать одним SQL-запросом.
*/
mysql_query(sprintf(
"INSERT INTO `users`(`nickname`, `age`, `has_car`)
VALUES('%s', %d, %d)",
mysql_real_escape_string( trim($_POST["nickname"][$id]) ),
(int)$_POST["age"][$id],
isset( $_POST["has_car"][$id] )
));
// добавляем никнейм того, кого добавили
$added_users_nicknames[] = &$_POST["nickname"][$id];
}
// Выводим того, кого добавили:
printf(
"%d users were added: %s",
count($added_users_nicknames),
implode("<br/>", $added_users_nicknames)
);
// имхо, удалять ненужные переменные, не дожидаясь "сборщика мусора" - полезная привычка
unset($id, $nickname, $added_users_nicknames);
?>
PROFIT.
P.S.: за мой стиль форматирования кода - не пинать, зато сразу все видно)
[COLOR="Silver"]P.S.2: кому понравилось - ставьте на весах +, инициатива, так сказать))[/COLOR]
[HTML]
<input type="text" name="name[]">
<input type="text" name="url[]">
<input type="text" name="category[]">
[/HTML]
...
Извините, но учитывая 3 стрницы полезных советов (которые почему-то вам не помогли), у вас есть 2 выхода:
1. Заплатить (каким угодно способом) за то, чтобы вам написали код к этой курсовой\диплому
2. Забить и скачать книгу "О вкусной и здоровой пище". проку будет больше... Не каждой (далеко) девушке дано быть программистом... против природы переть смысла нету...
На злобу дня:
Малоопытный программист подходит к Гуру, протягивает исходники программы:
- Посмотри пожалуйста, где у меня ошибка?
Спец смотрит на него, на код, снова на него, снова на код:
- В ДНК!
т.к. я привык работать напрямую с данными в массиве, а не вытаскивать
все в переменные, ибо считаю это идиотизмом + растрачиванием памяти
(не плодите сущности).
for я здесь не использую, т.к. я его считаю не нужным для данной задачи.
Почему - могу объяснить, если кому надо будет.
Но в данном случае $nickname уже создана и память под нее выделена. Мне объясните чем тут форич лучше фора если "предпочтительнее работать напрямую с данными в массиве".
Также, если глянуть её предыдущие посты, то кол-во полей на html-форме не фиксированное, т.е. она может/хочет добавлять, удалять строки, т.е. в обработчик могут прийти: nickname[0], nickname[4], nickname[5], ...
Можно, конечно, все засунуть в for и добавить if( !isset($_POST["nickname"][$i]) ) continue;, но для меня, с логической точки зрения лучше добавить foreach, т.к. for - это все таки последовательный перебор, т.е. с первого взгляда на код я буду считать, что $_POST["nickname"] упорядоченный массив без пропусков, в то время как foreach - это обход всех данных, имеющихся в массиве. Т.е. здесь foreach лучше for, т.к. он более логически сюда подходит.
То, что $nickname создана - то увы ничего не поделать, так уж приходиться поступать при использовании foreach. А работать в одном месте с $nickname, а чуть ниже с $_POST["age"], хотя логически эти данные все в одном $_POST, мне тоже не нравится)
Ну и я уж так не сделал в примере, но можно создать не переменную $nickname (т.е. скопировать значение из $_POST["nickname"][xx]), а лишь создать ссылку на неё, т.е. в foreach будет $id => &$nickname - в этом случае код останется также логически понятным и структурированным ("все по полочкам"), а потеря какой-то части памяти на создание ссылки - не такая уж и большая потеря в сравнении с качеством кода)
И в плане наглядности естественнее смотрится.