2014-02-24 61 views
0

我有一個數據庫,建立這樣的:插入數據

MySQL database

我有一個PHP的網站與使用該聲明提交數據的表單:

$sql="INSERT INTO tasks (main_task, subtask, start, end) 
VALUES 
('$_POST[main_task]','$_POST[subtask]','$_POST[start]','$_POST[end]')"; 

if (!mysqli_query($con,$sql)) 
    { 
    die('Error: ' . mysqli_error($con)); 
    } 
header("Location: xxx"); 

mysqli_close($con); 

我如何設置它以便它根據id_user提交數據?

我想我必須使用WHERE語句,或者最好在這種情況下使用外鍵而不是主鍵?

非常感謝。

+0

如果用戶已登錄,則可以在會話中添加id_user並使用它來驗證webrequest是否已通過身份驗證。有了這個,你可以重新使用PK字段的會話值... – KarelG

+3

你應該閱讀SQL注入和準備語句。 – jeroen

+0

將'mysql_'神奇地改爲'mysqli_'並不能解決SQL注入的巨大安全漏洞。 – h2ooooooo

回答

0

首先:你應該逃脫你的價值觀一樣,

$maintask = mysqli_real_escape_string($_POST['main_task']); 
    and so on with other variables. 

使用此查詢並插入到USER_ID其列。

$sql="INSERT INTO tasks (main_task, subtask, start, `end`, user_id) 
     VALUES 
    ('$maintask',.....other escaped variables ... ,$userid_variable 
     "; 
+0

不好意思,但是'mysqli_real_escape_string'需要2個參數(我推薦以任何方式準備語句),而'end'不是保留字... – jeroen

+0

我的痛苦:)。 upadted :) –

0

您還需要插入用戶標識。如果沒有用戶標識,則無法確定哪個用戶是哪個任務。可以使用session。 嘗試這樣的:
當你的登錄頁面設置用戶ID的用戶登錄到會話變量是這樣的:

session_start(); 
$_SESSION['user_id'] = "current_login_user_id"; 

與此頁:

session_start(); 

$strMainTask = mysqli_real_escape_string($_POST['main_task']); 
$strSubTask = mysqli_real_escape_string($_POST['subtask']); 
$strStart = mysqli_real_escape_string($_POST['start']); 
$strEnd = mysqli_real_escape_string($_POST['end']); 
$intUser = mysqli_real_escape_string($_SESSION['user_id']); //get current user id from session variable 

$sql="INSERT INTO `tasks` (`main_task`, `subtask`, `start`, `end`,`user_id`) 
VALUES 
('$strMainTask','$strSubTask','$strStart','$strEnd',$intUser)"; 

if (!mysqli_query($con,$sql)) 
    { 
    die('Error: ' . mysqli_error($con)); 
    } 
header("Location: xxx"); 

mysqli_close($con); 

它應該是有道理的:)