|
|
|
| Имеем несколько повторяющихся полей в форме на странице
1поле
2поле
и
1поле
2поле
то есть заносим инфу в одну таблицу , для удобстав пользователя предлагаем сразу много форм для заполнения одного и того же поля в таблице.
Как правильно все это дело потом в базу записать.
Ведь все поля должны иметь разные имена. Это нужно запрос на запись в базу делать для каждого блока дополнительных полей ?
А если их будет много, как правильно решается эта проблема?
1поле
2поле
и
1поле
2поле
и
1поле
2поле | |
|
|
|
|
|
|
|
для: vale1487
(07.02.2010 в 21:14)
| | Еще раз - что значит много форм для одного и того же поля? | |
|
|
|
|
|
|
|
для: sim5
(08.02.2010 в 05:01)
| | я хочу понять как решить такую вопрос.
Когда имеем несколько одинаковых полей, которые надо записать в одну и ту же таблицу.
Пример
таблица имеет такие поля
hotel и prise
Что бы не вводить по одному отелю я хочу например сделать несколько полей в которые сразу кучей можно написать отели и цены и все это добавить в базу.
поле 1 отель
поле 1 цена
поле 2 отель
поле 2 цена
итд
Как правильно обрабатывать много полей которые потом будут записываться в hotel и prise | |
|
|
|
|
|
|
|
для: vale1487
(08.02.2010 в 10:22)
| | Вы вопрос с "обратной стороны" задали.
Поля формы (ОДНОЙ, кучи форм совсем не требуется) должны быть представлены массивом, который и будете помещать в таблицу, например:
<input type="text" name="name[]">
<input type="text" name="prise[]">
......
<input type="text" name="name[]">
<input type="text" name="prise[]">
|
и вы получите на сервере два массива $_POST['name'] - название отеля, например, и $_POST['prise'] - расценки.
Вы сперва изучите отправку формы как массив полей, поймите как это работает, а уж потом занимайтесь базой. | |
|
|
|
|
|
|
|
для: sim5
(08.02.2010 в 10:47)
| | ок спасибо, а потом обрабатывать через foreach ? | |
|
|
|
|
|
|
|
для: vale1487
(09.02.2010 в 13:00)
| | Да, в цикле, а foreach или for, это уже как удобнее будет. Все ведь зависит от того, какие данные принимаем, а их не только принять надо, их еще и проверять надо и т.д., и т.п.. В некоторых случаях можно обойтись и без цикла.
Поля формы могут быть представлены и как многомерный массив, если это будет удобнее для предсталения данных в форме и последующего их приема. | |
|
|
|
|
|
|
|
для: sim5
(09.02.2010 в 13:14)
| | еще вопрос
например я попробую так
foreach ($_POST['hotel'] as $hotel)
{
результат
}
цикл фореач мне нужно вызывать для каждого массив отдельно
а именно
hotel и prise ? | |
|
|
|
|
|
|
|
для: vale1487
(09.02.2010 в 16:05)
| | Надо полагать, что поля hotel и prise как-то связаны между собой. Если, к примеру, эта форма для того чтобы администратор вводил название отелей и цену услуг в них, то естественно, что получая название отеля из формы, вполне обоснованно задать вопрос о цене, и сразу же, а не после того, как будут перебраны названия отелей. Не так разве?
Я же вам сказал - вы разберитесь сперва с тем, что вы получаете от формы. А все элементы формы в любом случае представляют из себя массив ее элементов, и у первого элемента этой формы индекс массива будет равен 0, а у последнего N. Если поместить в форме последовательно поля с именами:
hotel[]
prise[]
....
hotel[]
prise[]
то первые два ее элемента hotel и prise будут иметь индекс равный 0, каждый в своем массиве. А это что означает? К тому же я упоминал, что элементы формы могут представлять собой многомерный массив, например:
data => array(hotel,prise), array(hotel,prise) и т.д..
Еще раз - создайте форму как было предложено ранее, отправляйте ее, и печатая полученное в браузер:
print_r($_POST)
изучите и уясните все "прелести" формы, дабы понимать, и правильно выбирать именование ее элементов для задач своих. | |
|
|
|
|
|
|
|
для: sim5
(09.02.2010 в 16:21)
| | мне бы простой пример, все данные из формы я понимаю как приходят и как уходят мне бы понять как их обработать правильно | |
|
|
|
|
|
|
|
для: vale1487
(09.02.2010 в 17:48)
| | Что значит правильно? Если бы вы действительно понимали что вам отдает форма, то вопросов о цикле и как в нем.... у вас бы уже не возникало.
Например, есть такая форма:
<form action="" method="post">
<input type="text" name="name[]" value="as1"> <input type="text" name="number[]" value="1"><br>
<input type="text" name="name[]" value="as2"> <input type="text" name="number[]" value="2"><br>
<input type="text" name="name[]" value="as3"> <input type="text" name="number[]" value="3"><br>
<input type="submit" value="Send">
</form>
|
Посмотрим что она нам передает на сервер:
<?
echo '<pre>';
print_t($_POST);
|
получим:
Array
(
[name] => Array
(
[0] => as1
[1] => as2
[2] => as3
)
[number] => Array
(
[0] => 1
[1] => 2
[2] => 3
)
)
|
А теперь в цикле выведем:
<?
for($i=0; $i<count($_POST['name']); $i++) {
echo $_POST['name'][$i] . ' - ' . $_POST['number'][$i] . '<br>';
}
|
А если представить форму так:
<form action="" method="post">
<input type="text" name="data[0][name]" value="as1"> <input type="text" name="data[0][number]" value="1"><br>
<input type="text" name="data[1][name]" value="as2"> <input type="text" name="data[1][number]" value="2"><br>
<input type="text" name="data[2][name]" value="as3"> <input type="text" name="data[2][number]" value="3"><br>
<input type="submit" value="Send">
</form>
|
то print_r($_POST) выдаст нам уже вот такой массив:
Array
(
[data] => Array
(
[0] => Array
(
[name] => as1
[number] => 1
)
[1] => Array
(
[name] => as2
[number] => 2
)
[2] => Array
(
[name] => as3
[number] => 3
)
)
)
|
и можно получить его так:
<?
foreach($_POST['data'] as $val) {
echo $val['name'] . ' - ' . $val['number'] . '<br>';
}
|
Замечаете разницу в массивах в первом и втором случаях?
Форма, это не просто поля ввода абы как наляпанные в нее - это набор данных в порядке вами представленном, со структорой которую вы определили им. А этот порядок и сруктура зависят от целесообразности, которая диктуется удобством их обработки в каждом конкретном случае.
Прежде чем выводить форму, вы должны ясно представлять структуру своих данных, взаимосвязь их между собой. И рассматривать этот вопрос нужно с особой тщательностью, так, "чтобы оглянувшись назад, не было мучительно больно за бесцельно потраченное время".
Вопрос "как их обработать правильно" бессмысленен по сути, ибо правильно будет так, как вы определили условиями: проверка на допустимое содержание, например, на размер, тип данных и т.п.. Если же ваш вопрос касается безопасности, то это уже несколько иное - обработка данных перед занесением их в базу зависит от типа принимаемых данных.
Вот при проходе цикла вы и должны проверять (обработать) эти данные согласно вашим условиям. При этом можно методично в каждой итерации цикла вносить принятые данные в базу, но более разумно будет сформировать в цикле строку запроса, и по окончании цикла сделать всего один запрос, поместив все эти данные в базу.
Все таки надо изучать с малого, стараться понять те или иные механизмы, чтобы выбрать правильные иструменты для решения задачи. Начните с формы, с приемов всех типов ее элементов. Изучите отдельно вопросы связанные с работой с базой данных, включая и "безопасность" работы с ней, тем более что тем об этом на форуме предостаточно.
Это объемный материал, и изучать его кусками на каких-то примерах, не понимая при этом их механизма (а они простые зачастую, в общем то говоря), это не метод, вам он ничего не даст. | |
|
|
|
|
|
|
|
для: sim5
(09.02.2010 в 19:31)
| | спасибо, очень интересно читать ваши подходы к вопросу и объяснения. Интересно так же было бы увидеть как на примере вашем выше, этот массив из формы вы заносите в базу. Все на примере лучше постигается | |
|
|
|
|
|
|
|
для: vale1487
(10.02.2010 в 09:51)
| | О том как вставляются данные в таблицу, нужно в первую очередь не в примерах смотреть, а почитать о соответсвуюшем операторе MySQL (думаю вас эта база данных интересует) - INSERT, о его синтаксисе. Там же (в учебнике, руководстве) говорится, что существует и многострочный оператор INSERT, которым как раз, в вашем случае, удобно воспользоваться.
И так, начинаем изучать - как вставляются данные в таблицу базы (синтаксис оператора INSERT)? | |
|
|
|
|
|
|
|
для: sim5
(10.02.2010 в 10:11)
| | спасибо, попробую разобраться | |
|
|
|
|
|
|
|
для: sim5
(10.02.2010 в 10:11)
| | хотелось бы все такие увидеть работу многострочного оператора Insert на базе уже описаных примеров, спасибо | |
|
|
|
|
|
|
|
для: vale1487
(10.02.2010 в 15:59)
| | Выполнение скрипта, запрос к базе, это не мультик, работа эта ничего не показывает, окромя сообщений о ваших возможных ошибках.
А результат работы - помещение данных в базу, вот в нее вы можете заглянуть. Вы видимо код имели ввиду. Можно конечно и написать, но а самому написать? Вы изучили оператор INSERT?
Учиться надо, а это значит надо пробовать, а не слепо копировать себе то, что вам покажут. Поэтому пишите, а уж на ошибки ваши вам укажут на форуме. Вот это для вас будет куда полезнее для понимания.
Давайте, пробуйте, и результат проб сюда, если что не так будет ;-) | |
|
|
|
|
|
|
|
для: sim5
(10.02.2010 в 16:49)
| | Копировать я ничего и не пробовал, я застрял до того как написал тему в месте отсылки формы как массива для вставки в базу а именно ее обоботка.
И так и не могу разбраться с методом обработки, мозгов не хватает.
небольшая выдержка
обрабатываем массив от формы
foreach ($_POST['hotel'] as $hotel)
{
echo "<b>$hotel</b><br>";
}
mysql_query("INSERT INTO таблица VALUES ('$hotel')
Не могу я до сих пор понять как массив присланный от формы заставить в таблицу уйти весь. У меня то только одно поле корректно вставится а другое пустое то наоборот. | |
|
|
|
|
|
|
|
для: vale1487
(11.02.2010 в 17:20)
| | омг..
foreach ($_POST['hotel'] as $hotel)
{
echo "<b>$hotel</b><br>";
mysql_query("INSERT INTO таблица VALUES ('$hotel');
}
И это не вопрос "знаю/не знаю" и опыта. Это логика, обычная логика.. | |
|
|
|
|
|
|
|
для: vale1487
(11.02.2010 в 17:20)
| | Зачем вы в цикле выводите значение в браузер, а вне цикла пытаетесь его внести в базу? Вне цикла переменной $hotel уже не существует! У вас таким макаром вообще ничего в базу вноситься не будет. К тому же, хотя бы так дополняйте запрос:
mysql_query("INSERT INTO таблица VALUES ('$hotel')") or die (mysql_error());
и обязательно получите сообщение о существующих ошибках при запросе.
Еще раз прочтите об операторе INSERT.
Впрочем, судя по вашему коду, вам нужно не с этого начинать, мне так кажется. | |
|
|
|
|
|
|
|
для: sim5
(11.02.2010 в 17:51)
| | Разве вне цикла $hotel не будет существовать? По-меому, в $hotel будет последнее значение из массива.
Но ситуацию это, конечно, не меняет. | |
|
|
|
|
|
|
|
для: neadekvat
(11.02.2010 в 18:01)
| | Да, верно, хотел сказать о "пропавших" элементах массива, а получилось.... ) | |
|
|
|
|
|
|
|
для: sim5
(11.02.2010 в 17:51)
| | это один из вариантов
я вставлял mysql_query("INSERT INTO таблица...
и в теле цикла, у меня вставялись почему то очень много значений вместо в базу , вместо 2.
Я ж много не прошу , мне б элементарный пример на основе выше описанных примеров. Там буду разбираться. | |
|
|
|
|
|
|
|
для: vale1487
(11.02.2010 в 18:06)
| | Примеров от элементарных до сложных в разделе http://softtime.ru/forum/index.php?id_forum=3 форума хоть отбавляй. Вы простых вещей не понимаете. К тому же, вы хотя бы напишите что представляет ваш массив полученный из формы.
Создайте просто массив без всякой формы, пройдите его циклом и вносите его значения в базу. Зная синтаксис запроса, и как получать значения массива, это будет совсем не сложно записать как код. Вот вам уж очень простейший пример будет. НО напишите этот код сами, и покажите его ВЕСЬ здесь, если будут проблемы.
У вас же даже строка запроса к базе имеет ошибки (по крайней мере в том, что вы выставили здесь), попробуйте найти их сами. | |
|
|
|
|
|
|
|
для: sim5
(11.02.2010 в 18:13)
| | Вот что у меня получается
<form action="" method="post">
<input type="text" name="hotel[]" value="Отель1"> </br>
<input type="text" name="hotel[]" value="отель2"></br>
<input type="submit" value="Send">
</form>
foreach ($_POST['hotel'] as $hotel) // проход по массиву и запись в переменную
{
$result= mysql_query("INSERT INTO interes (hotel) VALUES ('$hotel')"); //заносим в таблицу поля и результат запроса присваиваем переменой $result
if ($result==true)
{
echo "дабавлено\n";
}
else
{
echo "ошибка добавления";
}
}
В базу приходит все как надо, но если добавить еще поля
<input type="text" name="prise[]" value="цена2"></br>
<input type="text" name="prise[]" value="цена2"></br>
то тут задтруднение | |
|
|
|
|
|
|
|
для: vale1487
(11.02.2010 в 21:33)
| | Затруднения в чем - как получить значения массива в цикле или как вставить их в таблицу?
Если затруднения по получению значений, то выше я вам уже говорил как можно к примеру представлять элементы формы и получать их значения в последствии.
Если по второму, то если вы читали внимательно, то значения VALUES в запросе прописываются через запятую, и при указании полей в запросе, указав и соответствующее поле таблицы, также через запятую.
Здесь форум, а не кафедра. Здесь вам будут помогать исправлять ваши конкретные ошибки, а не вести курс лекций. Учиться вам придется самому, по учебникам.
Вы уже такой дока, что даже на этапе изучения/отладки не хотите получать сообщения о возможных ошибках запроса?
Проверить булевое значение достаточно как if($result)....
\n для браузера (в качестве указания переходя на новую строку) пустой звук, он понимает только <br>.
И вообще выбросить эту проверку из цикла, проку от нее ни какого в данном случае. | |
|
|
|
|
|
|
|
для: vale1487
(07.02.2010 в 21:14)
| | таблицы БД с полями форм никак не связаны. В чем "эта" проблема? | |
|
|
|