2015-05-26 2 views
0

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

What the current page looks like

И это то, что база данных выглядит следующим образом:

Database

Теперь у меня было это все работают с текстовыми полями. (Когда вы нажимаете кнопку «Сохранить», текстовые поля вставляются в поле bogie_nr.
Теперь я не хочу иметь текстовые поля, но флажки.
Итак, если я выберем первые 2 флажки и нажмите save. базы данных, чтобы вставить номер 1 в axle_nr 1 и 2.
Теперь я хочу, первые 2 коробки должны быть отключены (Таким образом, вы не можете проверить их снова).

Теперь при выборе 3-й и 4-й ящик , и нажмите «Сохранить». Я хочу, чтобы база данных ввела номер 2 на 3-й и 4-й axle_nr.

Когда все будет заполнено, я хочу кнопку, которая перенаправляет меня на новую страницу. Как это сделать?

код (только для галочки):

<tr> 
    <?php 
     $show_axle = $database->bogies($_GET['train_id']); 
     foreach($show_axle as $bogiebox){ ?> 
      <input type='hidden' name='bogie_id[<?php echo $bogiebox['bogie_id']?>]' value='<?php echo $bogiebox['bogie_id']?>'> 
      <td> 
       <input type='checkbox' id="bogie_axle_fields" name='bogie_nr[<?php echo $bogiebox['bogie_id']?>]' placeholder = "enter bogie number"> 
      </td> 
    <?php 
     } 
    ?> 
</tr> 

Функция:

function bogies($id){ 
     $sql = "SELECT * FROM bogie WHERE train_id = :id2"; 
     $sth = $this->pdo->prepare($sql); 
     $sth->bindParam(":id2", $id, PDO::PARAM_STR); 
     $sth->execute(); 
     return $sth->fetchAll(); 
    } 

EDIT:

За моей кнопкой сохранить прямо сейчас страницы: end_result.php. Именно там у меня есть функция:

function update_bogie($id) { 
     $sql = "UPDATE bogie SET bogie_nr = :bogie_nr WHERE bogie_id = :bogie_id"; 
     $sth = $this->pdo->prepare($sql); 
     $sth->bindParam(':bogie_id', $id, PDO::PARAM_INT); 
     $sth->bindParam(":bogie_nr", $_POST['bogie_nr'][$id], PDO::PARAM_STR); 
     $sth->execute(); 
    } 

Это обновляет таблицу Каретки (работает, когда я меняю флажки TextFields)

Что я хочу прямо сейчас: флажков. Когда я проверю первые 2 поля и нажмите «Сохранить». Я хочу, чтобы номер 1 был вставлен 2 раза для оси 1 и 2 в базе данных.
После этого я хочу, чтобы первые 2 блока были отключены. Поэтому вы не можете выбрать их еще раз.

EDIT:

Что Идентификаторы выглядеть следующим образом: enter image description here

почти РАБОТАЮЩУЮ EDIT:

Ладно, так флажками Теперь вставьте в базу данных. Также они отключены, когда они вставлены в базу данных. Только несколько проблем сейчас:

  1. Когда я вставляю их в первый раз. Значение = 1. Но на вторая вставка также равна 1. в то время как она должна быть 2.
  2. Мне нужно обновить страницу, чтобы увидеть, что у вас есть поля. отключен. Я хочу, чтобы это произошло немедленно.
  3. Когда я вставляю новые значения. старый (отключенный) возвращается к NULL. Но он должен сохранять старую ценность.

Code я есть сейчас:

<form method='POST'> 
<input type="hidden" value="true" id="y" name="y"> 
    <div id="axle_bogie_border"> 
     <div id="train_adjusted"> 
      <h2> 
       Train 
      </h2> 
     </div> 
     <table id="distance_margin"> 
      <div id="bogiebox"> 
       <tr> 
        <?php  
         $x = 1; 
         foreach($show_axle as $bogiebox){ ?> 
         <input type='hidden' name='bogie_id[<?php echo $bogiebox['bogie_id']?>]' value='<?php echo $bogiebox['bogie_id']?>'> 
         <td> 
          <?php 
           if($bogiebox['bogie_nr'] == ''){ 
          ?> 
           <input type='checkbox' id="bogie_axle_fields" value="<?= $x ?>" name='bogie_nr[<?php echo $bogiebox['bogie_id']?>]' placeholder = "enter bogie number"></td> 
          <?php 
           } 
           else{ 
          ?> 
           <input type='checkbox' id="bogie_axle_fields" checked disabled value="<?= $x ?>" name='bogie_nr[<?php echo $bogiebox['bogie_id']?>]' placeholder = "enter bogie number"></td><?php } } 
        ?> 
       </tr> 
      </div> 
     </table> 
     <input type='submit' id="add_train_button1" value='Save'> 

     <?php 
      if(isset($_POST['y'])){ 
      $validbogies = false; 
        //validate 
        if(($_POST['bogie_id']) >0){ 
          if($_POST['bogie_id'] >0){ 
            $validbogies = true; 
          }elseif($_POST['bogie_id'] <= 0){ 
           echo "Error!"; 
          } 
          else{ 
            echo "Error!." . "<br>"; 
          } 
        }else{ 
          echo "Error!" . "<br>"; 
        } 

        //If valid, then insert. 
        if($validbogies){ 
         foreach($_POST['bogie_id'] as $id) { 
          $update_axle = $database->update_bogie($id); 
         } 
          $x++; 
          unset($_POST['y']); 
          echo "Yea! Things have been moved to the database :)"; 

        } 
      } 
     ?> 
    </div> 
</form> 

А функция по-прежнему такой же, как и старый.

EDIT:
Вот примера:

example

+0

У этих флажков всегда есть bogie_id 455-458 или он отличается? –

+0

Они различаются. Когда я добавляю новый поезд с 8 осями. они будут 459-466 – Mitch

+0

Вы знаете, какой поезд в настоящее время рассматривается? вы сохранили где-нибудь в php или javascript, который вы сейчас просматриваете поезда 117? –

ответ

0
<?php 
     $show_axle = $database->bogies($_GET['train_id']); 

     // First question : When everything is filled in, 
     // i want a button that redirects me to a new page. 

     if(count($show_axle) == 4) 
      echo "<button type=\"button\" onClick=location.href=''>Click Me!</button>"; 

      // Second question : 
     // WE display the missing checkboxes 
     // We will display until we found the first value axle_nr 
     // (i.e. the checkbox the user click last time) 
     // when we found we need to move to the next value of axle_nr 
     else 
     { 
      $j = 0; 
      for($i = 0; $i < 4; ++$i) 
      { 
       if($show_axle[$j]['axle_nr'] != ($i + 1)) 
       { 
        echo "<input type='hidden' name='bogie_id[" . 
          $bogiebox['bogie_id']. "]' value='" . 
          $bogiebox['bogie_id'] . "'><td>"; 

        echo "<input type='checkbox' id='bogie_axle_fields' 
          name='bogie_nr[" . $bogiebox['bogie_id'] . 
          "]' placeholder='enter bogie number'></td>"; 

       } 
       else 
        ++$j; 
      } 
?> 

Это должно сделать это (мб некоторые ошибки на эхо, но алгоритм хорошо).

+0

это не помогает в сохранении значений в базе данных, но это только для отображения кнопки, но проблема здесь в том, что она также не сделает флажки незаметными –

0

В коде позади ваш сохранить кнопку, попробуйте следующее: (я предполагаю, что идентификатор для ваших флажков, как это: bogie_nr [455]

function update_bogie($id) { 
      $sql = "UPDATE bogie SET bogie_nr = :bogie_nr WHERE bogie_id = :bogie_id"; 
      $sth = $this->pdo->prepare($sql); 
      $sth->bindParam(':bogie_id', $id, PDO::PARAM_INT); 
      if(isset($_POST['bogie_nr' . '[' . $id .']' ]){ 
       $sth->bindParam(":bogie_nr", $_POST['bogie_nr' . '[' . $id .']' ], PDO::PARAM_STR); 
      } 
      else { 
       $sth->bindParam(":bogie_nr", 'NULL', PDO::PARAM_STR); 
      } 
      $sth->execute(); 
    } 

EDIT ДЛЯ ПРАВИЛЬНОГО ЧИСЛА: Митча, чтобы получить номер попробовать делаешь запрос, как это:

SELECT COUNT(*) 
FROM bogie 
WHERE train_id = @youridhere; 

Это вернет вам сумму тележек у вас уже есть для этого поезда, вобще +1 или +2 в зависимости от того, сколько элементов вы добавляете (использовать счетчик в вашем для цикл), и у вас есть правильный номер для вставки

+0

Это должно хотя бы дать вам какие-то данные в вашем Я думаю, –

+0

Неустранимая ошибка: не удается передать параметр 2 по ссылке. На этой строке: $ sth-> bindParam (": bogie_nr", NULL, PDO :: PARAM_STR); – Mitch

+0

, чтобы начать, мы действительно не хотим входить в этот оператор else, это означает, что он не нашел ваш флажок, как выглядит имя вашего флажка? –

Смежные вопросы