2015-06-26 7 views
0

** UPDATE **Вставка флажков в базу данных

Я обновил мой код, но до сих пор нет радости в получении присоединиться к таблице, чтобы обновить

У меня есть три таблицы:

docs 
    doc_id 
    doc_name 
    doc_content 
cat 
    cat_id 
    cat_name 
    cat_color 
    cat_icon 
cat_doc_join 
    id 
    cat_id 
    doc_id 

Я в настоящее время имеют возможность создавать и вставлять данные в мою таблицу docs, она вставляет doc_name и doc_content в таблицу просто отлично. Я ввел категории в форму new_doc.php, которая показывает массив доступных категорий, которые можно выбрать с помощью флажка. В его нынешнем виде я не уверен, как изменить свой запрос на вставку, чтобы взять идентификатор создаваемого документа и идентификатор выбранных флажков, которые я выбрал, а затем перейти к не только вставке в таблицу документов, но и вставить строку (ы) в таблицу doc_cat_join, если один или несколько категорий были выбраны:

Вот скрипт, который обрабатывает вставки:

<?php 
require ('../../db_con.php'); 

    error_reporting(E_ALL); 
    ini_set('display_errors', '1'); 

// FORM VALIDATION & SUBMISSION 
if ($_SERVER['REQUEST_METHOD'] == 'POST') { 

    $errors = array(); // BEGIN AN ERRORS ARRAY 

    // CHECK FIRST NAME 
    if (empty($_POST['doc_name'])) { 
     $errors[] = 'You forgot to enter a document name.'; 
    } else { 
     $dn = mysqli_real_escape_string($dbc, trim($_POST['doc_name'])); 
    } 

    // CHECK LAST NAME 
    if (empty($_POST['doc_content'])) { 
     $errors[] = 'You forgot to enter any document content.'; 
    } else { 
     $dc = mysqli_real_escape_string($dbc, trim($_POST['doc_content'])); 
    } 

    if (empty($errors)) { 

     // MAKING THE QUERY 

     $q = "INSERT INTO docs (doc_name, doc_content, created_date) VALUES ('$dn', '$dc', NOW())";   

     $r = mysqli_query($dbc, $q); 

     if ($r) { 

     $cat_ids=isset($_POST['cats'])&&is_array($_POST['cats'])?array_keys($_POST['cats']):array(); 

     $query='INSERT INTO cat_doc_join (cat_id,doc_id) VALUES'; 

     $length=count($cat_ids); 

     for($i=0;$i<$length;$i++){ 
      $query.='('.$cat_ids[$i].','.$doc_id.')'; 

     if($i<$length-1) 
      $query.=','; 

     } 

     mysqli_query($dbc, $query); 

      // REDIRECT BACK TO DOCUMENT LIST 
      echo("<script>location.href = 'list_doc.php';</script>"); 

     } else { 

      // ERROR CHECKING! 
      echo '<h1>System Error!</h1> <p>you could not be registered because of a system error!<br></p>';    

      // DEBUGGIN MESSAGE 
      echo '<p>' . mysqli_error($dbc) . '<br><br>query: ' . $q . '</p>'; 
    } 

     mysqli_close($dbc); 
     exit(); 

    } else { 

     // REPORT THE ERRORS 
     echo '<h1>Error!</h1><p class="error">The Following error(s) have occured:<br>'; 
     foreach ($errors as $msg) { 
      echo " - $msg<br>\n"; 
     } 
     echo '</p><p>Please try again!.</p><p><br></p>'; 

    } 

} 
?> 

А вот раздел формы, который представляет собой массив из Категории:

<?php 

$q = "SELECT * FROM cats"; 

$r = mysqli_query ($dbc, $q); // Run the query. 

echo '<div class="view_body">'; 

// FETCH AND PRINT ALL THE RECORDS 
while ($row = mysqli_fetch_array($r)) { 
echo '<br><input type="checkbox" name="cats['.$row['cat_id'].']"> '.$row["cat_name"]. '</label>'; 
} 
echo '</div>'; 

?> 

Я думаю, что я ищу ng advice о том, как из флажков я могу включить значение, которое является cat_id, а также в запросе INSERT для добавления в таблицу соединений для вставки.

+0

как насчет вставки во время цикла? –

+0

@ user3113490 Можете ли вы показать мне пример того, как вы сожалеете? – PhpDude

+0

Я вернулся, $ doc_id не определен в вашем коде ... – n00dl3

ответ

1

эхо флажков, как это:

while ($row = mysqli_fetch_array($r)) { 
    echo '<br><input type="checkbox" name="cats['.$row['cat_id'].']"> '.$row["cat_name"]. '</label>'; 
} 

и использовать его, как это (я полагаю, $doc_id известно, doc_id и cat_id являются Интс и id поле вашего cat_doc_join таблицы autoincremented):

$cat_ids=isset($_POST['cats'])&&is_array($_POST['cats'])?array_keys($_POST['cats']):array(); 
//please check everything is fine here, they are ints, no sql injection,etc... 
$query='INSERT INTO cat_doc_join (cat_id,doc_id) VALUES'; 
$length=count($cat_ids); 
for($i=0;$i<$length;$i++){ 
    $query.='('.$cat_ids[$i].','.$doc_id.')'; 
    if($i<$length-1) 
     $query.=','; 
} 
//run your query 

ВНИМАНИЕ: Вам нужно будет дезинфицировать ваши данные, чтобы избежать инъекций SQL и продуктов

+0

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

+0

отредактировал, я не тестировал, и это может быть более элегантно, но я думаю, что это должно сработать ... – n00dl3

+0

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

1
<form method = "post"> 
    <input type="checkbox" name="checkboxes[]" value="<?=$row["cat_name"];?>"/> 
    <input type="checkbox" name="checkboxes[]" value="<?=$row["cat_name"];?>"/> 
    <input type="checkbox" name="checkboxes[]" value="<?=$row["cat_name"];?>"/> 
    <input type="submit" name ="cmd_submit"/> 
</form> 


<?php 
    if(isset($_POST['cmd_submit'])){ 
     $arr_checkboxes = $_POST['checkboxes']; 
     foreach($arr_checkboxes as $row){ 
      //do your insert code here. 
     } 
    } 

?> 

Я не пробовал. так как я не был на моем ноутбуке .. но я думаю, что это даст вам представление. и предположим, что флажок уже завершен внутри вашего цикла.

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