2014-10-02 53 views
0

代碼正確的查詢我根據這樣的數據庫字段做一個項目,其中,登記表由:用於生成登記表格

function generateForm() { 

    $db = new mysqli('localhost', 'root', 'toor', 'hybrid_offline_reg'); 
    $query = $db->query('DESCRIBE `' . $_SESSION['tableName'] .'`'); 
    $fields = array(); 

    while($row = $query->fetch_assoc()) { 
     $fields[] = $row['Field']; 
     $types[] = $row['Type']; 
    } 

    echo "<form method='post' action='successpage.php' align='center'> 
    <table align='center'>"; 

    foreach($fields as $key => $field) { 
     $type = $types[$key]; 

     echo "<tr>"; 

     switch ($field) { 
      case "FNAME": 
       echo "<td>First Name</td><td>:</td> 
       <td><input type='text' name='FNAME' size=30></td>"; 
       break; 

      case "MNAME": 
       echo "<td>Middle Name</td><td>:</td> 
       <td><input type='text' name='MNAME' size=30></td>"; 
       break; 

      case "LNAME": 
       echo "<td>Last Name</td><td>:</td> 
       <td><input type='text' name='LNAME' size=30></td>"; 
       break; 

      echo "</tr>"; 
} 

echo "</table><br> 
    <input type='submit' name='submitForm' value=' Submit '> 
    <input type='reset' name='resetForm' value=' Clear '> 
    </form>"; 

而且在successpage.php,這是個什麼樣子像迄今爲止:

session_start(); 
    $db = new mysqli('localhost', 'root', 'toor', 'hybrid_offline_reg'); 
    $query = $db->query('DESCRIBE `' . $_SESSION['tableName'] .'`'); 
    //$fields = array(); 

    $insert_sql = "INSERT INTO `" . $_SESSION['tableName'] . "`("; 

    while($row = $query->fetch_assoc()) { 
    $f = $row['Field']; 

     switch ($f) { 

      case "USER_ID": 
      case "DATE_CREATED": break; 

      default: 
       $insert_sql .= "`$f`,"; 
       break; 
     } 
    } 

    $insert_sql = substr_replace($insert_sql, "", -1); 
    $insert_sql .= ") VALUES ("; 


    $query = $db->query('DESCRIBE `' . $_SESSION['tableName'] .'`'); 
    while($row = $query->fetch_assoc()) { 
    $i = $row['Field']; 

     switch ($i) { 

      case "USER_ID": 
      case "DATE_CREATED": break; 

      default: 
       $insert_sql .= '`$_POST["' . $i . '"]`,' ; 
       break; 
     } 
    } 

    $insert_sql = substr_replace($insert_sql, "", -1); 
    $insert_sql .= ")"; 

    $res = mysql_query($insert_sql); 
    echo "Successfully registered!"; 

但顯然,$insert_sql .= '$_POST["' . $i . '"],';是不正確的,因爲$_POST不應該是一個字符串,因爲我試圖獲得它的價值。但我也試圖取決於$i$_POST的名稱。

幫助,任何人? D:提前謝謝!

回答

1

更改此:

$insert_sql .= '`$_POST["' . $i . '"]`,' ; 

要這樣:

$insert_sql .= '`'. mysqli_real_escape_string($db, $_POST[$i]) .'`,'; 

你已經知道如何連接在PHP中的字符串,因爲你在這一行做。你只需要將$_POST部分從字符串本身中取出。

另外,閱讀SQL注入。您不應該從用戶輸入中獲取原始數據,並且在沒有首先對其進行消毒處理的情況下將其用於查詢。因此,我添加了mysqli_real_escape_string()

還有一件事......在結尾處,看起來您正在呼叫mysql_query()。認爲你的意思是mysqli_query()那裏,不是嗎?或者也許$db->query()

+0

我使用了'$ insert_sql。=「'」。 mysqli_real_escape_string($ db,$ _POST [$ i])。「',」;'既然「'」不被接受,它需要兩個參數。哦,查詢部分也是固定的。非常感謝您的幫助,是的,我會閱讀SQL注入。 :) – Suika 2014-10-02 06:03:12