2011-12-30 148 views
2

第一次問題,長時間讀者:)PHP - 動態POST的動態SQL查詢

我從一個MYSQL數據庫中的列動態地構建表單。這些列 被創建/刪除等..在我的應用程序的其他地方。我的表單針對SQL視圖運行查詢並獲取列名和列數。簡單!使用PHP for循環構建的HTML輸入構建表單 ,併爲新表單字段提供相應的HTML。迄今爲止非常簡單。

現在我想讓用戶更新這些動態添加的字段,並將數據添加到相關列 - 與現有列相同的表 。因此,由於輸入字段的名稱與列的名稱相同,因此將它們發佈到PHP腳本進行處理。

問題是,儘管我已將實際字段名插入到SQL INSERT查詢中,但我無法弄清楚如何從POST中動態提取POST 數據並將其添加到查詢的VALUE部分。

這是我的嘗試.... 該查詢的作品沒有添加變量。

它的工作原理是,第一部分/從先前創建的VIEW中檢索列名 - 因爲它們與表單中的POST名稱相同。然後輸出到數組和變量以插入到Query中。它看起來像implode函數的工作原理,相關的列名在語句中是正確的,但我擔心我將列名插入POST變量的操作不起作用。

$custq = "SELECT * FROM customProperties"; 
     $result = $database->query($custq); 
     $num_rows = mysql_numrows($result); 

     while (list($temp) = mysql_fetch_row($result)) { 
      $columns[] = $temp; 
     } 

     $query = ''; 
     foreach($columns as $key=>$value) 
     { 
     if(!empty($columns[$key])) 
     { 
     $values .= "'".'$_POST'."['".$value."'], "; 
     } 
     } 

     $q = "INSERT INTO nodes 
      (deviceName, 
      deviceInfo, 
      ".implode(", ", $columns).", 
      nodeDateAdded, 
      status 
     ) 
      VALUES 
       ('" . $_POST['deviceName'] . "', 
       '" . $_POST['deviceInfo'] . "', 
       ".$values." 
       CURDATE(), 
       '1' 
       )"; 

$result = $database->query($q) 

任何幫助,非常感謝。我會盡可能地反饋。請注意,相對新的到PHP,所以如果我完全錯了這一點,我會很高興的任何提示/建議

問候

斯蒂芬

+1

非常非常糟糕的做法。鮑比表將毀了你的生活。 http://xkcd.com/327/ – GordonM 2011-12-30 15:11:50

+3

請用'mysql_real_escape_string(str)'從$ _POST轉義數據。否則有人可能會注入危險的SQL代碼! – ComFreek 2011-12-30 15:12:27

+0

謝謝你們。正如我所說,這是一個POC腳本....仍在學習。完成的應用程序將僅供內部使用。任何意見有關的問題? – Stacky 2011-12-31 08:41:45

回答

1

如果你想獲得的每個值不知道輸入的名字,那麼你可以這樣來做 POST輸入:

//get all form inputs 
foreach($_POST as $name => $value) 
{ 
    echo $name . " " . $value . "<br>"; 
} 

如果你想,你知道個名來獲取一定 POST輸入的值Ë輸入字段,那麼你可以這樣來做:

if(isset($_GET["deviceName"])) 
{ 
    $deviceName = $_POST["deviceName"]; 
} 

if(isset($_GET["deviceInfo"])) 
{ 
    $deviceInfo = $_POST["deviceInfo"]; 
} 

要連接到數據庫,然後插入信息,那麼你必須做這樣的事情:

$host = "localhost"; 
$dbuser = "username"; 
$pass = "password"; 
$datab = "databasename"; 

//Create DB connection 
$con=mysqli_connect($host, $dbuser, $pass,$datab); 

if (mysqli_connect_errno($con)) 
{ 
    echo "ERROR: Failed to connect to the database: " . mysqli_connect_error(); 
} 
else 
{ 
    echo "Connected to Database!"; 
} 

//insert into database 
mysqli_query($con, "INSERT INTO nodes (deviceName, deviceInfo) VALUES ('$deviceName', '$deviceInfo')"); 

(不要忘了添加mysql_real_escape_string到$ _POST行後,你得到它的工作。)