2011-09-03 56 views
3

我仍在學習PHP和MYSQL,並嘗試創建一個程序來列出數據庫中的所有表和數據(完成後),編輯選中的內容行(已完成),現在在選定的表上添加新記錄。現在問題是可變數量的字段。表可以有3個字段,可以是4個等等。在我的代碼$ getValue是一個數組。我打印出來只用於測試。它可能看起來像「陣列([名稱] =>托馬斯[lastName] => Timas)」或「陣列([stufName] =>電話[stufPrice] => 58 [評論] =>我的新手機)」 $ getTable返回要插入的表的名稱。 這必須是一個新的記錄,所以stufID或nameID或什麼是ID將是NULL 如果我不知道如何使用「INSERT INTO表VALUES(value1,value2,value3,...)」值的數量?

<?php 

include "conf.ini"; //connection to the db 

$getValue=$_REQUEST['value']; 
$getTable=$_REQUEST['table']; 

// test******************** 
print_r($getValue); 
print '<br>'; 
print $getTable; 
// test******************** 

if (!$_POST['submit']) { 
    print 'Please input data'; 
} else { 

    mysql_query ("INSERT INTO $getTable VALUES (?????)"); 
} 

?> 
+0

您不能將4個條目插入到具有3列的表中 - 如果這樣做,MySQL會給您一個錯誤。你說過,你已經列出了所有表格,我想你正在閱讀'information_schema'數據庫中的一致信息。如果你這樣做,你也知道每個表的列數!? – feeela

回答

1

我希望你知道這是非常危險,所以如果你確定沒有potentional攻擊者只有做到這一點!

$all_keys = array_keys($getValue); 
$getValue = array_map('mysql_real_Escape_string', $getValues); 
mysql_query ("INSERT INTO $getTable (`".implode('`,`', $all_keys)."`) VALUES ('".(implode(",", $getValue))."')"); 
+0

這只是我的練習計劃。這將永遠不會生活。我會試試這個。謝謝 – Marius

+1

mysql_Real_escape_string應該在每個值上單獨完成,而不是在所有的值上一起完成。你寫這種方式是行不通的。 – shesek

+0

@shesek:是的,這是真的。現在更改它 – genesis

1
$values = array_map('mysql_real_escape_string', array_values($getValue)); 
$keys = array_keys($getValue);   
mysql_query("INSERT INTO $getTable (".implode(',', $keys).") VALUES ('".implode('\',\'', $values)."')"); 
+0

請注意,這假定'array_keys()'和'array_values()'將以相同的順序返回相應的元素。 – cdhowie

+0

@cdhowie,array_keys()和array_values()總是以相同的順序返回元素。 – shesek

+0

PHP文檔不表示函數以任何特定方式排列其結果。 – cdhowie

0

也許你應該創建一個包含文件爲$的getTables執行該值,然後將其包括在要$的getTables值有所回升。

相關問題