2011-06-15 92 views
0

編輯4:主要問題已解決 - 原來問題是我的一些錯別字。 (發佈,<)謝謝!數據現在被輸入到我的數據庫中。我仍然會考慮你給我的其他提示。非常好的第一次使用stackoverflow的經驗。如何將表單信息提交給我的MySQL服務器?

編輯1:好的,我忘了大寫$ _POST。現在我收到一個錯誤「列計數與第1行的值計數不匹配」
編輯2:我刪除了ID並添加了exit();.現在,我有錯誤消息「列'名稱'不能爲空」。我不知道如何/在哪裏添加轉義字符串。 (8)「TestName」字符串(16)「測試說明」字符串(3)「567」字符串(6)編輯3:我遵循達米安的指示,我有這個作爲我的輸出:「連接到MySQL 字符串「234567」字符串(13)「[email protected]」字符串(8)「TestPass」列'名稱'不能爲空「 - 所以仍然是相同的錯誤。

原問題:
我是使用MySQL和PHP的新手。根據我提供的說明,我使用MAMP作爲我的服務器,並且已經建立了幾個PHP文件。目前,主要目標是能夠建立一個用戶數據庫,並且有問題的表單應該創建一個新用戶,使用用戶名,密碼等。

當我填寫完表單並按下提交後,它給出了一個不完整形式的錯誤消息,而不是像我想要的那樣發送數據。 (我真的不知道如何將數據發送到我的數據庫的作品,無論是)

這裏是形式(我認爲這是在HTML):

<form action="create.php" method="post"> 
Name: <input type="text" name="inputName" value="" /><br> 
Description: <input type="text" name="inputDesc" value=""/> 
    <br/> 
Phone Number : (<input type="text" name="inputPArea" value="" />) 
- <input type="text" name ="inputPBody" value="" /><br> 
Email: <input type="text" name="inputEmail" value=""/><br> 
Password: <input type="password" name="inputPass" value=""/> 

    <input type="submit" name="submit" /> 

這裏是IF/else聲明爲錯誤消息:

if(!$_Post['submit']){ 
    echo "please fill out the form"; 
    header('Location:demo.php'); 

    } 

else { 
    mysql_query("INSERT INTO people (`ID`,`Name`,`Description`,`Area Code`,`Phone Body`,`Email`,`Password`) 
       VALUES(NULL<'$name','$desc','$area','$pbody','$email','$pass') ") or die(mysql_error()) ; 

echo "User has been added!"; 
header('Location: demo.php'); 

    } 

請幫忙!謝謝。如果你能幫助我理解如何將數據提交給我的數據庫,那將會很好。

(。有很多,當然其他PHP的東西,告訴我,如果你需要任何的話)

+1

你有正確的想法 - 只要確保它是$ _POST並檢查,使用if(isset($ _ POST ['submit'])並且不要忘記獲取所有輸入的值 - 從你的$ _POST超全局的,你必須首先從它們中提取出來(我推薦在它們上面使用mysql_real_escape_string(),然後把它們分配給你放入查詢中的變量,我會建議準備好的語句,但是你應該先掌握這個概念 – kinakuta 2011-06-15 19:33:10

+1

在這裏有很多關注... – 2011-06-15 19:33:38

+0

謝謝kinakuta - 我現在感覺很傻 – Xheia 2011-06-15 19:35:28

回答

3
$name = mysql_real_escape_string($_POST['inputName']); 
$desc = mysql_real_escape_string($_POST['inputDesc']); 
$area = mysql_real_escape_string($_POST['inputPArea']); 
$pbody= mysql_real_escape_string($_POST['inputPBody']); 
$email = mysql_real_escape_string($_POST['inputEmail']); 
$pass = mysql_real_escape_string($_POST['inputPass']); 

您訪問他們通過超全局變量$ _POST數組(因爲你使用的「後」的形式方法),正確消毒(你應該使用PDO和準備語句不過,它們會讓你的代碼,甚至更安全)。如果ID設置爲自動增量,則不需要查詢。

mysql_query("INSERT INTO people (`Name`,`Description`,`Area Code`,`Phone Body`,`Email`,`Password`) VALUES('$name','$desc','$area','$pbody','$email','$pass') ") or die (mysql_error()); 

建議: 此外,考慮增加出口();之後您的頭重定向,以避免意外的代碼顯示。
如果您不想(或不能接受)空值(即使您正在爲此進行客戶端驗證),您還應該檢查是否設置了$ _POSTs if(isset($_POST['postname']))。總是依靠服務器端驗證,因爲客戶端可以很容易地避免)

警告上mysql_real_escape_string:

一個MySQL連接 之前使用mysql_real_escape_string() 否則水平E_WARNING 的誤差所需的生成,並返回FALSE。 如果未定義link_identifier,則使用最後一個MySQL連接 。

+0

+1提及轉義值 – 2011-06-15 19:43:28

+0

我已經刪除'ID',並添加了exit();.現在我收到錯誤消息:「列'名稱'不能爲空' – Xheia 2011-06-15 19:55:13

+0

我不太確定在哪裏放置逃生的東西。我應該替換現有的「$ name = $ _POST ['inputName'];」等等? – Xheia 2011-06-15 19:57:10

0

在你else語句,添加:

$name = $_POST['inputName']; 
$desc = $_POST['inputDesc']; 
$pbody = $_POST['inputPBody']; 
$email = $_POST['inputEmail']; 
$pass = $_POST['inputPass']; 

考慮SQL Injection

+0

我在if語句之前已經有了這個。 – Xheia 2011-06-15 19:49:12

+1

@Xheia:將你的查詢行分成兩部分:'$ sql =「INSERT ...」; mysql_query($ sql)或死('query:'。$ sql。'//'。mysql_error());'。通過這種方式,您可以使用可以輸出的字符串來生成查詢,以檢查錯誤。像這樣分離它們對於調試非常方便。 – 2011-06-15 20:04:01

+0

我只是有點理解馬克B. - 我不認爲我現在會這樣做,但如果我需要更多的調試,我會考慮它。 – Xheia 2011-06-15 20:20:53

相關問題