2012-01-19 74 views
0

我真的不知道這是怎麼回事,我一直在我的腦子裏花了兩個小時。我所要做的就是從表單中的兩個字段獲取信息並將其插入到數據庫中。我知道我的腳本非常基本,非常不安全,但我只是在學習......它不會在生產網站上使用。它讓我提交數據,並輸出「謝謝你,你已經註冊了...」,但它永遠不會將它插入到數據庫中。我已經加倍檢查了所有的連接設置等等。我很無能。在這個PHP腳本沒有錯誤,但沒有填寫SQL數據庫

我的代碼如下:

<?php 
mysql_connect("localhost", "USERNAME", "PASSWORD") or die(mysql_error()); 
mysql_select_db("DATABASE_NAME") or die(mysql_error()); 
if (isset($_POST['submit'])) { 
mysql_query("INSERT INTO members (username, password) VALUES ('".$_POST['myusername']."', '".$_POST['mypassword']."')") or die(mysql_error()); 
} 
?> 

<html> 
<body> 
<h1>Registered</h1> 
<p>Thank you, you have registered - you may now login</a>.</p> 
</body> 
</html> 

編輯:

這裏是表單代碼:

<table id="mytable" cellspacing="0"> 
<FORM name="form1" ACTION="register.php" METHOD=get> 
<tr> 
<th scope="col" class="ttopl">User Name:</th> 
<th scope="col" class="ttopl"><input name="myusername" type="text" size"20"></input>  </th> 
</tr> 
<tr> 
<th scope="col" class="ttopl">Password:</th> 
<th scope="col" class="ttopl"><input name="mypassword" type="text" size"20"></input> </hd> 
</tr> 
<tr> 
<th scope="col" class="ttopl"></th> 
<th scope="col" class="ttopl"><input type="submit" value="Register" class="loginButton"> 
+1

裏面是否'如果(isset'在所有執行塊? (如果你不確定,試着在那裏添加'echo')並閱讀這樣的內容http://php.net/manual/en/security.database.sql-injection.php。 – Vyktor

+1

你確定你有error_reporting轉到最大?刪除isset以進行調試 – mario

+0

請發送您的表單代碼請 –

回答

0

1日關閉該查詢催芽注入攻擊,我會強烈建議你看看準備好的陳述。

回到你的情況......

添加

var_dump(mysql_error()); 

您查詢後,它會告訴你發生了什麼事查詢...

+1

正如OP所說,這將不會用於生產 –

+0

@Paul是的,他做了,但基於[我]感知的代碼質量沒有什麼壞處,在給出生產代碼的時候給出一些指示器 –

+0

@ sp4rt4n423在OP中沒有你的html,但是如果var_dump沒有顯示那是一個很好的指示,那麼你沒有打到該代碼塊 –

1

我的猜測是if (isset($_POST['submit']))是不開火確保它是名稱屬性而不是id。發佈你的表單代碼將是一個很大的幫助。

0

這裏唯一可能出錯的是「if」語句的結果爲false。如果出現其他問題,您將得到一個SQL錯誤輸出,而不是「謝謝」頁面。

因此,首先檢查'submit'是否是表單元素的實際名稱,並檢查它是否被設置。同時檢查您是否使用POST方法提交表單。

0

除了Zac的回答,您的提交按鈕根本沒有名稱。因此,isset($_POST['submit'])將始終爲假,您的查詢將永遠不會運行。

由於您剛剛熟悉PHP,因此您可以使用簡單的方法調試這種情況,即使用var_dump()print_r()來檢查變量。如果你看$ _POST並且看到它沒有一個名爲'submit'的鍵,你會意識到你的提交測試是有缺陷的。

1

您使用了錯誤的方法在你的形式:

<FORM name="form1" ACTION="register.php" METHOD=get> 

更改爲:

<FORM name="form1" ACTION="register.php" METHOD="POST"> 

順便說一句,我知道,安全是不是一個問題呢,但有些事情是從一開始就做得更好,因爲稍後將很難改變。例如:

  1. 散列/鹽醃使用PDO預處理語句,以避免SQL注入

編輯密碼

  • 您還缺少HTML表單的name屬性和你在php文件中檢查它。您需要更改提交按鈕:

    <input type="submit" name="submit" value="Register" class="loginButton"> 
    

    但更堅實的方式來檢查PHP中的POST使用:

    if ($_SERVER['REQUEST_METHOD'] === 'POST') 
    
  • +0

    嘗試了一些其他的東西其他的答案,仍然沒有效果: - ? – sp4rt4n423

    +0

    @ sp4rt4n423請參閱我的編輯。 – jeroen

    相關問題