2015-08-17 55 views
0

我想要聰明,可能太聰明在創建一組表格,將動態地插入他們的數據到數據庫根據他們的輸入名稱。PHP動態查詢創建形式

我有它,所以它正確地建立查詢,但是當我試圖插入它失敗,說它是一個格式不正確的查詢,有沒有更好的方式做我想要實現的,但同樣呢?

<form method="post"> 
    <input type="text" name="form_array['text']" /> 
    <button name="insert">Go</button> 
</form> 

這裏是我的查詢生成,對提交形式:

$setup['table'] = "table1"; 

if(isset($_POST['insert'])){ 
    $inserts = ""; 
    $values = ""; 

    foreach($_POST['form_array'] as $form_id => $form_data){ 
     if(!empty($form_data)){ 
      if(!isset($first_run)){ 
       $first_run = 1; 
       $inserts .= $form_id; 
       $values .= "'".$form_data."'"; 
      } else { 
       $inserts .= ", ".$form_id; 
       $values .= ", '".$form_data."'"; 
      } 
     } else { 
      die('error'); 
     } 
    } 

    die("INSERT INTO '".$setup['table']."' ($inserts) VALUES ($values)"); 
} 

感謝。

+0

這是一個非常不安全的腳本建立。你應該研究SQL注入來找出原因。爲了更直接地解決你的問題,儘管...你有一個語法問題。每組值都需要用圓括號括起來,就像下面問題的答案一樣:http://stackoverflow.com/questions/452859/inserting-multiple-rows-in-a-single-sql-query – craigts

+0

這些都不是故意消毒,這是一個測試腳本,並完全編輯。我插入一行,所以所有的值在逗號分隔的一組括號內。 – Danny

+0

好吧,那麼很可能你是單引號表名。刪除這些,你應該很好。除非你可能編輯了太多內容,並且改變了從實際發送到db的內容。 – craigts

回答

0

除了向您評論的所有修復之外,這可以簡化,試試吧;

<form method="post"> 
    <input type="text" name="form_array[column1]" /> 
    <input type="text" name="form_array[column2]" /> 
    <button name="insert">Go</button> 
</form> 

<?php 
if(isset($_POST['insert'])){ 
    $table = 'table'; 
    $handler = 'form_array'; 
    $keys = array_keys($_POST[$handler]); 
    $sql = "INSERT INTO `{$table}` (`".implode('`, `', $keys)."`) VALUES ('".implode("', '", $_POST[$handler])."')"; 
    echo $sql; 
} 

輸出:

INSERT INTO`table`(`column1`,`column2`)VALUES( 'VALUE1', '值2')

+0

查詢似乎仍然格式不正確,從此不幸! – Danny

+0

'array_values'似乎有點多餘。 –

+0

鍵似乎被單引號(')以及('),所以失敗。 – Danny