2017-02-17 20 views
0

我是編程新手。如何使用相同的查詢插入數據

我想創建一個簡單的客串。 我有一個索引頁面,您可以在其中註冊名字,姓氏和電子郵件。

如果您點擊一個名稱,您將重定向到一個帶有ID的新頁面。

我如何使用ID將文本插入到具有相同代碼塊的此ID中。

我的代碼看起來像這樣。

<?php 
    require('dbconfig.php'); 

try { 
     $conn = new PDO("mysql:host=$servername;dbname=projektone", $username, $password); 
     //Set PDO error mode to exception 
     $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

     // Insert to database 
     $sql = "INSERT INTO user (firstname, lastname, email) 
     VALUE ('".$_POST["first_name"]."','".$_POST["last_name"]."','".$_POST["email"]."')"; 
     $sql = "INSERT INTO user (guestbok) 
     VALUE ('".$_POST["guestbok"]."')"; 

     $conn->query($sql); 
     } 

     catch(PDOException $e) 
     { 
      echo $e->getMessage(); 
     } 

header('Location: /'); 
?> 

在此先感謝

/丹尼爾

+0

只要不使用相同的查詢。你有兩個查詢,所以按順序運行它們。就如此容易。 –

+2

您的代碼[已廣泛開放給SQL注入](http://stackoverflow.com/documentation/php/5828/pdo/2685/preventing-sql-injection-with-parameterized-queries) – Machavity

+0

您有錯誤? ...錯誤的結果? 。你有什麼問題 。?不清楚...請用適當的數據示例更新您的問題 – scaisEdge

回答

-1

你重寫一個新的查詢$ SQL PARAM執行前。在這裏你有2個選項。

插入查詢一個接一個:

$sql = "INSERT INTO user (firstname, lastname, email) VALUES ('".$_POST["first_name"]."','".$_POST["last_name"]."','".$_POST["email"]."')"; 
$conn->query($sql); 

$sql = "INSERT INTO user (guestbok) VALUES ('".$_POST["guestbok"]."')"; 
$conn->query($sql); 

放2個查詢在一個字符串中,然後執行:

$sql = " 
    INSERT INTO user (firstname, lastname, email) VALUES ('".$_POST["first_name"]."','".$_POST["last_name"]."','".$_POST["email"]."'); 
    INSERT INTO user (guestbok) VALUES ('".$_POST["guestbok"]."'); 
"; 
$conn->query($sql); 
+1

你建議注射代碼。 :placeholder:placeholder:placeholder !!! 1!elf! – cottton

0

好吧,也許我設法得到你所需要的。將下面兩行的dbconfig.php:

$conn = new PDO("mysql:host=$servername;dbname=projektone", $username, $password); 
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

,然後需要它,無論你需要一個數據庫連接:

文件之一:

require('dbconfig.php'); 
$sql = "sql 1"; 
$conn->query($sql); 

然後在另一個文件

require('dbconfig.php'); 
$sql = "sql 2"; 
$conn->query($sql); 
1

加入文本的原始位並將它們傳遞到數據庫進行處理並不是一個好的ID EA。它打開您的系統SQL injection。雖然這是不可能的,有人可能會危及當只有INSERT語句以這種方式暴露你的網站,它意味着:

  • 任何人在他們的名字一個單引號將打破
  • 你暴露請求的邏輯由人可以通過提交javascript來您的留言

關於SQL注入問題進行存儲XSS攻擊的方法,有2種方法來保護您的系統 - 一個是把其中的數據的方式,它不能破壞它被添加到的SQL字符串(例如使用mysqli_real_escape_string()),但是r當使用PDO調解您的代碼與DBMS的交互時,推薦的方法是使用變量綁定。在這裏,您可以使用佔位符組合SQL命令並在運行時替換它們。

如果從MySQL的自動插入ID生成的ID,那麼你就可以讀取該值從$ conn->lastinsertid

$stmt=$conn->prepare("INSERT INTO user (firstname, lastname, email) 
    VALUES (:fnm,:lnm,:eml)"); 
$stmt->execute(array(
    ':fnm' => $_POST["first_name"], 
    ':lnm' => $_POST["last_name"], 
    ':eml' => $_POST["email"])); 
$id=$conn->lastinsertid(); 

你的下一個問題是如何安全地傳達給頁面的用戶,其中提交他們的留言評論(在您的示例代碼中,您嘗試在同一頁面中執行兩個操作)。

發送給瀏覽器,作爲cookie或表單變量意味着它可能被篡改。有一些深奧的無狀態解決方案,你可以做到這一點,但是數據是經過加密的或是加密簽名的,但最簡單的解決方案是使用會話 - 在所有頁面的頂部添加session_start(),並且可以存儲跨請求可用的任何數據在$ _SESSION超全球。

(有關於會議以及安全問題)

在收到包含留言簿數據的POST,那麼你應該使用UPDATE user SET guestbook=:gstbk WHERE id=:id_from_session(或者你可以用ID將其插入到一個單獨的表作爲foreign key

最後,當你輸出你的留言留下的人的信息,請確保您保護瀏覽器從任何髒東西在那裏:

print htmlentities($guestbook); 
相關問題