2013-06-13 14 views
0

所以如標題所述,我試圖使用從指向此頁面的頁面給出的查詢變量以及來自THIS頁面的表單數據來操縱數據庫。我似乎無法正確理解,並且我不知道我做錯了什麼。代碼片段看起來是這樣的:嘗試使用查詢變量和表單數據來更改數據庫中的表格

<?php 
$ware_number = $_GET['id']; 

Echo "<form action='usernamecheck.php' method='post'>"; 
Echo 'Username:<br>'; 
Echo '<input type="text" name="usernamecheck" size="14"><br>'; 
Echo 'Password:<br>'; 
Echo '<input type="password" name="passwordcheck" size="14"><br>'; 
Echo '<input type="submit" value="Send">'; 
Echo '</form>'; 

if (isset($_POST['usernamecheck'])) { 

$sql2 = "SELECT * FROM `storedata`.`users` WHERE `username` LIKE '$_POST[usernamecheck]'"; 

$found_user_id = mysql_query($sql2, $conn); 
print $found_user_id; 
} 

if (isset($_POST['usernamecheck'])) { 

$sql3 = "INSERT INTO `storedata`.`basket` (user_id, ware_id, number, complete) 
VALUES 
('$found_user_id', '$ware_number', 1, 0)"; 

$derp = mysql_query($sql3, $conn); 
print $derp; 
} 
?> 

文件本身是usernamecheck.php,而我只是打印嘗試和查找錯誤。當我檢查籃子表時什麼都沒有發生,即使沒有顯示錯誤。現在變量$ ware_number導致錯誤。我究竟做錯了什麼?

我還在storedata.basket表中創建了user_id和ware_id外鍵,因爲它們是各自表中的主鍵。這意味着它們只能是特定的值,但我使用這些值進行測試,主要是1和0 ...

+0

你在哪裏$ ware_number設置什麼嗎?如果您發佈該表單,則不會設置$ _GET ['id']。你也有很大的SQL注入漏洞,你直接在SQL查詢中使用用戶提供的數據,而沒有任何企圖逃避它 – Anigel

+0

是的,我知道這是相當脆弱的編碼,但它不適合在線使用,更多用於學習如何使用語言等 – Abeneezer

+0

如果是作爲一種學習練習,我會建議最好學習如何安全和正確地使用它,而不是學習不良習慣,並希望以後忘掉它們。 – Anigel

回答

0

如果未設置$ _GET ['id']會怎麼樣?它會失敗。也請閱讀正確的PHP使用SQL。你的代碼很容易受到SQL注入攻擊和其他攻擊。

編輯: 更新的一條代碼

if(isset$_GET['id'] && is_numeric($_GET['id'])) 
{ 

    $ware_number = $_GET['id']; 

    Echo "<form action='usernamecheck.php?id=" . $_GET['id'] . "' method='post'>"; 
..... 
+0

我知道,我對此很新,而且我不打算在真正的Web上使用它,只是在本地主機上。另外,它運行的頁面有查詢變量?id = 1,所以它不應該工作? – Abeneezer

+0

但它說$ _GET行中的未定義索引,所以我想這就是問題所在。是否可以這樣,當表單按鈕被按下時,查詢變量被刪除,因爲表單標籤中的動作是文檔**本身**和查詢變量。那我怎麼把它帶走呢? – Abeneezer

+0

您可以將ID添加到表單中,以便您可以將其作爲後置參數進行檢索。同樣因爲php錯誤,你現在偶然會添加輸入驗證。所以一個isset($ _ GET ['id'])&& is_numeric($ _ GET ['id'])。 – Stackprotector

相關問題