2013-07-11 26 views
2

好了,所以我設置了一個網站,上有一個形式,我想保存的所有信息,用戶類型爲形式,以我的MySQL數據庫。形式編碼是這樣的:如何從寫html表單信息,以MySQL數據庫

<?php 
$mysql_host  = "localhost"; 
$mysql_username = "username"; 
$mysql_password = "password"; 
$mysql_database = "database"; 

mysql_select_db($mysql_database, mysql_connect($mysql_host, $mysql_username, $mysql_password)); 
//Sending form data to sql db. 
mysqli_query("INSERT INTO Information (Firstname,Lastname,Email,StreetAddress,PostalCode,City,StateProvince,Country,Controllers,Color) VALUES ('$_POST[firstname]','$_POST[lastname]','$_POST[email]','$_POST[streetaddress]','$_POST[postalcode]','$_POST[city]','$_POST[state]','$_POST[country]','$_POST[conrollers]','$_POST[color]'))"); 
?> 

這有什麼錯我的代碼:

<form method="post" action="claim.php" name="ClaimForm" id="ClaimForm" autocomplete="on"> 
    <fieldset> 
     <legend>Contact Details</legend> 
     <div> 
      <label for="firstname" accesskey="U">Your First Name</label> 
      <input name="firstname" type="text" id="firstname" placeholder="Enter your name" required /> 
     </div> 
     <div> 
      <label for="lastname" accesskey="U">Your Last Name</label> 
      <input name="lastname" type="text" id="lastname" placeholder="Enter your name" required /> 
     </div> 
     <div> 
      <label for="email" accesskey="E">Email</label> 
      <input name="email" type="email" id="email" placeholder="Enter your Email Address" pattern="^[A-Za-z0-9](([_\.\-]?[a-zA-Z0-9]+)*)@([A-Za-z0-9]+)(([\.\-]?[a-zA-Z0-9]+)*)\.([A-Za-z]{2,})$" required /> 
     </div> 
     <div> 
      <label for="streetaddress">Street Address</label> 
      <input name="streetaddress" type="text" id="streetaddress" placeholder="123 Stanley dr." required /> 
     </div> 
     <div> 
      <label for="postalcode">Postal Code</label> 
      <input name="postalcode" type="text" id="postalcode" placeholder="12345, A1B 2C3, etc." required /> 
     </div> 
     <label for="city">City</label> 
     <input name="city" type="text" id="city" placeholder="Schenectady" required /> 
     <div> 
      <label for="state">State/Province</label> 
      <input name="state" type="text" id="state" placeholder="New York" required /> 
     </div> 
     <div> 
      <label for="country">Country</label> 
      <input name="country" type="text" id="country" placeholder="United States" required /> 
     </div> 
    </fieldset> 
    <fieldset> 
     <legend>Extra</legend> 
     <div> 
      <label for="controllers" accesskey="S">Number of Controllers</label> 
      <select name="controllers" id="controllers" required="required"> 
       <option value="0">0</option> 
       <option value="1">1</option> 
       <option value="2">2</option> 
       <option value="3">3</option> 
       <option value="4">4</option> 
       <option value="5">5</option> 
      </select> 
     </div> 
     <div> 
      <label for="color" accesskey="C">Color</label> 
      <select name="color" id="color" required="required"> 
       <option value="Black">Black</option> 
       <option value="White">White</option> 
       <option value="Red">Red</option> 
       <option value="Blue">Blue</option> 
       <option value="Gold">Gold</option> 
       <option value="Purple">Purple</option> 
      </select> 
     </div> 
    </fieldset> 
    <fieldset> 
     <legend>Captcha Verification</legend> 
     <label for="verify" accesskey="V" class="verify"><img src="captcha.php" alt="Verification code" /></label> 
     <input name="verify" type="text" id="verify" size="6" required style="width: 50px;" title="This confirms you are a human user and not a spam-bot." /> 
    </fieldset> 
    <input type="submit" class="submit" id="submit" value="Submit" /> 
</form> 

我使用Claim.php此代碼嘗試並保存到數據庫中試過嗎?或者我的數據庫結構錯了?我剛開始學習如何編寫代碼,這讓我感到困惑。

圖片我的數據庫結構:

+1

請不要使用'mysql_ *'函數編寫新代碼。他們不再被維護,社區已經開始[棄用流程](http://goo.gl/q0gwD)。看到[紅色框](http://goo.gl/OWwr2)?相反,您應該瞭解[準備好的語句](http://goo.gl/orrj0)並使用[PDO](http://goo.gl/TD3xh)或[MySQLi](http://php.net/ mysqli的)。如果你不能決定哪些,[這篇文章](http://goo.gl/YXyWL)會幫助你。如果你選擇PDO,[這裏是很好的教程](http://goo.gl/b2ATO)。另請參閱[爲什麼不應該在PHP中使用mysql函數?](http://goo.gl/J5jAo) –

+0

另外,不要混合使用'mysqli'和'mysql'! –

+0

@DaveChen嘿,對不起。我仍然在努力學習。我真的不知道兩者之間的區別是什麼。 –

回答

4

請使用mysqli。我改變了你的代碼來準備插入。

如果你沒有,這將是一個巨大的SQL注入方。

此外,要訪問$_POST,你應該給一個字符串索引,像$_POST['firstname']。儘管它的工作方式類似於$_POST[firstname],但PHP會發出警告。

<?php 
$mysql_host  = "localhost"; 
$mysql_username = "username"; 
$mysql_password = "password"; 
$mysql_database = "database"; 

$mysqli = new Mysqli($mysql_host, $mysql_username, $mysql_password, $mysql_database); 
$prepare = $mysqli->prepare("INSERT INTO `Information`(`Firstname`,`Lastname`,`Email`,`StreetAddress`,`PostalCode`,`City`,`StateProvince`,`Country`,`Controllers`,`Color`) VALUES (?,?,?,?,?,?,?,?,?,?)"); 
$prepare->bind_param("ssssssssss", $_POST['firstname'], $_POST['lastname'], $_POST['email'], $_POST['streetaddress'], $_POST['postalcode'], $_POST['city'], $_POST['state'], $_POST['country'], $_POST['controllers'], $_POST['color']); 
$prepare->execute(); 
$mysqli->close(); 
?> 
+1

好的,我試過了,但數據庫中仍然沒有數據。另外,爲什麼「ssssssssss」在那裏?它有什麼作用? –

+1

請'print_r($ _ POST)',另外,確保MySQLi憑證是正確的。 –

+0

這是我在將'print_r($ POST)'添加到我的文件後得到的:'Array([firstname] => Fname [lastname] => LName [email] => [email protected] [streetaddress] => 123 Stanley dr。[postalcode] => 12345 [city] => Schenectady [state] =>紐約州[country] =>美國[controllers] => 0 [color] =>黑色[verify] => 52fe7 [conrollers] =>)' –

2

你可能想考慮讓你的PHP信息看看你正在運行的版本。

如果您正在運行支持的mysqli對象,您可能想從那裏開始和實例的mysqli的對象的版本。

Mysqli documentation:http://us.php.net/manual/en/book.mysqli.php

這就讓你的方法不推薦使用。

也請記住,你不會看到任何錯誤,在輸出發佈到你的頁面時。這可能會使調試複雜化。使用這兩行php來查看錯誤:

error_reporting(E_ALL); 
ini_set('display_errors', '1'); 

確保設置所有變量也是一個好習慣。您可以使用isset()方法在插入數據之前檢查它們是否已設置。

我敢打賭,你會發現一些錯誤時設置錯誤。

它看起來像你沒有正確訪問你的變量。

$_POST[varname]將無法​​訪問數據,並拋出一個錯誤信息。

$_POST['varname']會工作。

+0

是的,謝謝你沒有注意到我的單引號出錯了。 –

0

我看到的第一件事是,在將它們插入到查詢中之前,您沒有越過您的值。 想象我寫這篇文章在電子郵件領域:

'); drop table Information --

你失去了你的數據。

爲了逃避值,你可以使用mysql_real_escape_string()函數是這樣的:

"......".mysql_real_escape_string($_POST['email'])."...."
相關問題