2014-10-02 44 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