Как вставить значения в базу данных, если входные имена похожи на name="fieldname[]?

У меня есть следующая форма, я должен вставить значения формы в базу данных. Но я не знаю, как вставить эти значения, когда имена полей такие - name="fieldname[]". Для лучшего понимания проверьте следующее.

Я использую Codeigniter. У меня есть представления, контроллер и модель, я пробовал обычный способ вставки значения, но он не работает.

Один из моих друзей предложил мне использовать что-то вроде mysql_real_escape_string($value), но я не знаю, как это использовать. Не могли бы вы помочь мне?

Заранее спасибо :)

   <table> 
     <form >

   <tr>

      <td> Student ID: <input type="text" name="studentid[]" value="" /> </td>
      <td> Grade <input type="text" name="grade[]" value="" /></td>
      <td>Obtained Mark  <input type="text" name="obtainedmark[]" value="" /></td>
    </tr>

    <tr>

     <td> Student ID: <input type="text" name="studentid[]" value="" /> </td>
     <td> Grade <input type="text" name="grade[]" value="" /></td>
     <td>Obtained Mark  <input type="text" name="obtainedmark[]" value="" /></td>

    </tr>


  <tr>
     <td> <input type="submit" value="Submit" name="Submit" /></td>
 </tr>

 </form>
 </table>

Редактировать

    foreach($_POST['studentid'] as $studentid) {
      // do something

    $data = array(              
    'subjectname' =>"",
    'subjectname' => $studentid             

    );                  
    $results=$this->db->insert('subject', $data);                      

person black_belt    schedule 03.11.2011    source источник


Ответы (3)


Это работает следующим образом: вы получаете массив значений для каждого поля с таким именем. Вы говорите, что их два

   <td> Student ID: <input type="text" name="studentid[]" value="" /> </td>

и когда вы делаете

 foreach($_POST['studentid'] as $studentid) {

  $data = array(              
  'subjectid' =>"",
  'subjectname' => $studentid             

   );                  
 $results=$this->db->insert('subject', $data);

вы вводите два студенческих билета. Вам нужно сделать это снова ваши другие входы. Но ждать? Как вы создадите свой SQL-запрос без имен учеников? Я бы, наверное, сделал что-то вроде

$studentids = addslashes(htmlentities($_POST['studentid']));
$subjectnames = addslashes(htmlentities($_POST['subjectnames']));
$obtainedmarks = addslashes(htmlentities($_POST['obtainedmarks']));

for($i = 0; $i < count($studentids); $i++){
 $data = array(              
  'subjectid' =>$studentids[$i],
  'subjectname' => $subjectnames[$i],             
'obtainedmarks' => $obtainedmarks[$i] 
   );                  
 $results=$this->db->insert('subject', $data);
}

Дайте мне знать, если это имеет смысл.

person jakx    schedule 04.11.2011
comment
Большое спасибо Jakx. Ваш скрипт работает отлично, хотя мне пришлось удалить addlashes и htmlentities, чтобы заставить его работать. С addlashes и htmlentities я получал это сообщение об ошибке: серьезность: предупреждающее сообщение: htmlentities() ожидает, что параметр 1 будет строкой, задан массив. Я заменил его на ($_POST['studentid']), и он работает именно так, как я хотел. Большое спасибо еще раз. Вы мне очень помогли. :) - person black_belt; 04.11.2011

Это массивы, вы можете получить к ним доступ с помощью следующего кода (пример):

foreach($_POST['studentid'] as $studentid) {
  // do something
}

для вашего редактирования. это просто пример, не знаю, работает это или нет. Просто попробуйте с ним.

foreach($_POST as $key=>$data) {
    foreach($data as $field) {
        $arr[$key][] = $field;
    }
}
person sascha    schedule 03.11.2011
comment
спасибо за ваш ответ, я проверил ваш скрипт, и он работает нормально, но что мне делать с двумя другими переменными. .. оценка и полученная оценка. Пожалуйста, проверьте отредактированную часть моего сообщения выше, чтобы увидеть, что я разработал до сих пор. - person black_belt; 04.11.2011

Сериализировать. http://us2.php.net/manual/en/function.serialize.php

person djdy    schedule 04.11.2011