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

Форум PHP

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

 

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

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

тема: Редактирование набора полей
 
 автор: vale1487   (07.02.2010 в 21:14)   письмо автору
 
 

Имеем несколько повторяющихся полей в форме на странице

1поле
2поле

и

1поле
2поле

то есть заносим инфу в одну таблицу , для удобстав пользователя предлагаем сразу много форм для заполнения одного и того же поля в таблице.

Как правильно все это дело потом в базу записать.

Ведь все поля должны иметь разные имена. Это нужно запрос на запись в базу делать для каждого блока дополнительных полей ?
А если их будет много, как правильно решается эта проблема?

1поле
2поле

и

1поле
2поле

и

1поле
2поле

  Ответить  
 
 автор: sim5   (08.02.2010 в 05:01)   письмо автору
 
   для: vale1487   (07.02.2010 в 21:14)
 

Еще раз - что значит много форм для одного и того же поля?

  Ответить  
 
 автор: vale1487   (08.02.2010 в 10:22)   письмо автору
 
   для: sim5   (08.02.2010 в 05:01)
 

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

таблица имеет такие поля

hotel и prise

Что бы не вводить по одному отелю я хочу например сделать несколько полей в которые сразу кучей можно написать отели и цены и все это добавить в базу.

поле 1 отель
поле 1 цена

поле 2 отель
поле 2 цена
итд

Как правильно обрабатывать много полей которые потом будут записываться в hotel и prise

  Ответить  
 
 автор: sim5   (08.02.2010 в 10:47)   письмо автору
 
   для: 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'] - расценки.
Вы сперва изучите отправку формы как массив полей, поймите как это работает, а уж потом занимайтесь базой.

  Ответить  
 
 автор: vale1487   (09.02.2010 в 13:00)   письмо автору
 
   для: sim5   (08.02.2010 в 10:47)
 

ок спасибо, а потом обрабатывать через foreach ?

  Ответить  
 
 автор: sim5   (09.02.2010 в 13:14)   письмо автору
 
   для: vale1487   (09.02.2010 в 13:00)
 

Да, в цикле, а foreach или for, это уже как удобнее будет. Все ведь зависит от того, какие данные принимаем, а их не только принять надо, их еще и проверять надо и т.д., и т.п.. В некоторых случаях можно обойтись и без цикла.
Поля формы могут быть представлены и как многомерный массив, если это будет удобнее для предсталения данных в форме и последующего их приема.

  Ответить  
 
 автор: vale1487   (09.02.2010 в 16:05)   письмо автору
 
   для: sim5   (09.02.2010 в 13:14)
 

еще вопрос
например я попробую так

foreach ($_POST['hotel'] as $hotel)

{
результат
}

цикл фореач мне нужно вызывать для каждого массив отдельно
а именно
hotel и prise ?

  Ответить  
 
 автор: sim5   (09.02.2010 в 16:21)   письмо автору
 
   для: 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)
изучите и уясните все "прелести" формы, дабы понимать, и правильно выбирать именование ее элементов для задач своих.

  Ответить  
 
 автор: vale1487   (09.02.2010 в 17:48)   письмо автору
 
   для: sim5   (09.02.2010 в 16:21)
 

мне бы простой пример, все данные из формы я понимаю как приходят и как уходят мне бы понять как их обработать правильно

  Ответить  
 
 автор: sim5   (09.02.2010 в 19:31)   письмо автору
 
   для: 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>';
}

Замечаете разницу в массивах в первом и втором случаях?

Форма, это не просто поля ввода абы как наляпанные в нее - это набор данных в порядке вами представленном, со структорой которую вы определили им. А этот порядок и сруктура зависят от целесообразности, которая диктуется удобством их обработки в каждом конкретном случае.

Прежде чем выводить форму, вы должны ясно представлять структуру своих данных, взаимосвязь их между собой. И рассматривать этот вопрос нужно с особой тщательностью, так, "чтобы оглянувшись назад, не было мучительно больно за бесцельно потраченное время".

Вопрос "как их обработать правильно" бессмысленен по сути, ибо правильно будет так, как вы определили условиями: проверка на допустимое содержание, например, на размер, тип данных и т.п.. Если же ваш вопрос касается безопасности, то это уже несколько иное - обработка данных перед занесением их в базу зависит от типа принимаемых данных.

Вот при проходе цикла вы и должны проверять (обработать) эти данные согласно вашим условиям. При этом можно методично в каждой итерации цикла вносить принятые данные в базу, но более разумно будет сформировать в цикле строку запроса, и по окончании цикла сделать всего один запрос, поместив все эти данные в базу.

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

Это объемный материал, и изучать его кусками на каких-то примерах, не понимая при этом их механизма (а они простые зачастую, в общем то говоря), это не метод, вам он ничего не даст.

  Ответить  
 
 автор: vale1487   (10.02.2010 в 09:51)   письмо автору
 
   для: sim5   (09.02.2010 в 19:31)
 

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

  Ответить  
 
 автор: sim5   (10.02.2010 в 10:11)   письмо автору
 
   для: vale1487   (10.02.2010 в 09:51)
 

О том как вставляются данные в таблицу, нужно в первую очередь не в примерах смотреть, а почитать о соответсвуюшем операторе MySQL (думаю вас эта база данных интересует) - INSERT, о его синтаксисе. Там же (в учебнике, руководстве) говорится, что существует и многострочный оператор INSERT, которым как раз, в вашем случае, удобно воспользоваться.

И так, начинаем изучать - как вставляются данные в таблицу базы (синтаксис оператора INSERT)?

  Ответить  
 
 автор: vale1487   (10.02.2010 в 10:47)   письмо автору
 
   для: sim5   (10.02.2010 в 10:11)
 

спасибо, попробую разобраться

  Ответить  
 
 автор: vale1487   (10.02.2010 в 15:59)   письмо автору
 
   для: sim5   (10.02.2010 в 10:11)
 

хотелось бы все такие увидеть работу многострочного оператора Insert на базе уже описаных примеров, спасибо

  Ответить  
 
 автор: sim5   (10.02.2010 в 16:49)   письмо автору
 
   для: vale1487   (10.02.2010 в 15:59)
 

Выполнение скрипта, запрос к базе, это не мультик, работа эта ничего не показывает, окромя сообщений о ваших возможных ошибках.
А результат работы - помещение данных в базу, вот в нее вы можете заглянуть. Вы видимо код имели ввиду. Можно конечно и написать, но а самому написать? Вы изучили оператор INSERT?
Учиться надо, а это значит надо пробовать, а не слепо копировать себе то, что вам покажут. Поэтому пишите, а уж на ошибки ваши вам укажут на форуме. Вот это для вас будет куда полезнее для понимания.
Давайте, пробуйте, и результат проб сюда, если что не так будет ;-)

  Ответить  
 
 автор: vale1487   (11.02.2010 в 17:20)   письмо автору
 
   для: sim5   (10.02.2010 в 16:49)
 

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

И так и не могу разбраться с методом обработки, мозгов не хватает.

небольшая выдержка
обрабатываем массив от формы

foreach ($_POST['hotel'] as $hotel)
{
echo "<b>$hotel</b><br>";

}

mysql_query("INSERT INTO таблица VALUES ('$hotel')

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

  Ответить  
 
 автор: neadekvat   (11.02.2010 в 17:33)   письмо автору
 
   для: vale1487   (11.02.2010 в 17:20)
 

омг..
foreach ($_POST['hotel'] as $hotel)
{
echo "<b>$hotel</b><br>";
mysql_query("INSERT INTO таблица VALUES ('$hotel');
}

И это не вопрос "знаю/не знаю" и опыта. Это логика, обычная логика..

  Ответить  
 
 автор: sim5   (11.02.2010 в 17:51)   письмо автору
 
   для: vale1487   (11.02.2010 в 17:20)
 

Зачем вы в цикле выводите значение в браузер, а вне цикла пытаетесь его внести в базу? Вне цикла переменной $hotel уже не существует! У вас таким макаром вообще ничего в базу вноситься не будет. К тому же, хотя бы так дополняйте запрос:
mysql_query("INSERT INTO таблица VALUES ('$hotel')") or die (mysql_error());
и обязательно получите сообщение о существующих ошибках при запросе.
Еще раз прочтите об операторе INSERT.
Впрочем, судя по вашему коду, вам нужно не с этого начинать, мне так кажется.

  Ответить  
 
 автор: neadekvat   (11.02.2010 в 18:01)   письмо автору
 
   для: sim5   (11.02.2010 в 17:51)
 

Разве вне цикла $hotel не будет существовать? По-меому, в $hotel будет последнее значение из массива.
Но ситуацию это, конечно, не меняет.

  Ответить  
 
 автор: sim5   (11.02.2010 в 18:06)   письмо автору
 
   для: neadekvat   (11.02.2010 в 18:01)
 

Да, верно, хотел сказать о "пропавших" элементах массива, а получилось.... )

  Ответить  
 
 автор: vale1487   (11.02.2010 в 18:06)   письмо автору
 
   для: sim5   (11.02.2010 в 17:51)
 

это один из вариантов

я вставлял mysql_query("INSERT INTO таблица...

и в теле цикла, у меня вставялись почему то очень много значений вместо в базу , вместо 2.

Я ж много не прошу , мне б элементарный пример на основе выше описанных примеров. Там буду разбираться.

  Ответить  
 
 автор: sim5   (11.02.2010 в 18:13)   письмо автору
 
   для: vale1487   (11.02.2010 в 18:06)
 

Примеров от элементарных до сложных в разделе http://softtime.ru/forum/index.php?id_forum=3 форума хоть отбавляй. Вы простых вещей не понимаете. К тому же, вы хотя бы напишите что представляет ваш массив полученный из формы.
Создайте просто массив без всякой формы, пройдите его циклом и вносите его значения в базу. Зная синтаксис запроса, и как получать значения массива, это будет совсем не сложно записать как код. Вот вам уж очень простейший пример будет. НО напишите этот код сами, и покажите его ВЕСЬ здесь, если будут проблемы.
У вас же даже строка запроса к базе имеет ошибки (по крайней мере в том, что вы выставили здесь), попробуйте найти их сами.

  Ответить  
 
 автор: vale1487   (11.02.2010 в 21:33)   письмо автору
 
   для: 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>

то тут задтруднение

  Ответить  
 
 автор: sim5   (12.02.2010 в 03:55)   письмо автору
 
   для: vale1487   (11.02.2010 в 21:33)
 

Затруднения в чем - как получить значения массива в цикле или как вставить их в таблицу?
Если затруднения по получению значений, то выше я вам уже говорил как можно к примеру представлять элементы формы и получать их значения в последствии.
Если по второму, то если вы читали внимательно, то значения VALUES в запросе прописываются через запятую, и при указании полей в запросе, указав и соответствующее поле таблицы, также через запятую.
Здесь форум, а не кафедра. Здесь вам будут помогать исправлять ваши конкретные ошибки, а не вести курс лекций. Учиться вам придется самому, по учебникам.

Вы уже такой дока, что даже на этапе изучения/отладки не хотите получать сообщения о возможных ошибках запроса?
Проверить булевое значение достаточно как if($result)....
\n для браузера (в качестве указания переходя на новую строку) пустой звук, он понимает только <br>.
И вообще выбросить эту проверку из цикла, проку от нее ни какого в данном случае.

  Ответить  
 
 автор: Trianon   (08.02.2010 в 08:27)   письмо автору
 
   для: vale1487   (07.02.2010 в 21:14)
 

таблицы БД с полями форм никак не связаны. В чем "эта" проблема?

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

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