您正在詢問該腳本的許多問題。讓我們通過所有的人都走:
1)設置表格屬性
告訴瀏覽器如何將表單數據發送到你的服務器是很重要的。否則,你將最終不得不依靠超全球性的$_REQUEST
。從PHP官方網站援引:
在$ _REQUEST的變量通過GET, POST和COOKIE機制提交至腳本,因此可以修改通過 遠程用戶和不能被信任。
因此,您應該將method
屬性添加到您的表單中。您可能要添加字符編碼爲好,只是要確定你的腳本就不會感到困惑,當有人使用非UTF-8字符:
<form method="POST" action="" accept-charset="utf-8">
2)的方式來訪問你的POST數據
爲了能夠實際做POST數據,你需要一種方法來訪問它。這就是name
屬性發揮作用:
<input placeholder="Placeholder" id="email" type="text" name="email" />
超全局$_POST
現在將能夠使用name
屬性值作爲密鑰來訪問輸入字段的值:$_POST['email']
。這隻會在表單發送後才起作用。
3)提交表單
你不能指望magicly你的服務器都通過你的網站訪問者填寫表單數據。首先,您需要提交:
<input type="submit" value="Register email" />
這將成爲與文本你已經安裝在value
屬性按鈕。當訪問者點擊它時,你的表單數據將被提交給你的服務器。
所以,你的整個造型看起來應該是這樣:
<form method="POST" action="" accept-charset="utf-8">
<input placeholder="Placeholder" id="email" type="text" name="email" />
<input type="submit" value="Register email" />
</form>
4)建立PHP
在我們開始與POST數據的工作,我們需要確保用戶給我們的數據:
if(isset($_POST['email']) && !empty($_POST['email'])){
//...
}
這將驗證$_POST['email']
是否存在並確保它不爲空。
5)安全地處理用戶數據:預處理語句
一個你學到作爲一名開發人員是永遠信任用戶數據的第一件事情。在未經驗證的情況下將數據輸入到用戶提交的數據庫中,會造成很多麻煩。特別是SQL Injection。
使用MySQLi Prepared Statements,你可以保護自己免受這樣的:
//$link will be the connection to your database
//For example: $link = mysqli_connect("localhost", "db_user", "db_pass", "db_name");
if ($stmt = mysqli_prepare($link, "INSERT INTO news (news) VALUES (?)")) {
/* bind parameters for markers */
mysqli_stmt_bind_param($stmt, "s", $_POST['email']);
/* execute query */
mysqli_stmt_execute($stmt);
/* close statement */
mysqli_stmt_close($stmt);
/* print success message */
echo "Email successfull registered!";
} else {
/* print errors */
printf("MySQL Error: %s\n", mysqli_error($link));
}
結束語一起:
<?php
if(isset($_POST['email']) && !empty($_POST['email'])){
//$link will be the connection to your database
//For example: $link = mysqli_connect("localhost", "db_user", "db_pass", "db_name");
if ($stmt = mysqli_prepare($link, "INSERT INTO news (news) VALUES (?)")) {
/* bind parameters for markers */
mysqli_stmt_bind_param($stmt, "s", $_POST['email']);
/* execute query */
mysqli_stmt_execute($stmt);
/* close statement */
mysqli_stmt_close($stmt);
/* print success message */
echo "Email successfull registered!";
} else {
/* print errors */
printf("MySQL Error: %s\n", mysqli_error($link));
}
}
?>
<!-- Your HTML here -->
<div class="row">
<form class="col s12" method="POST" action="" accept-charset="utf-8">
<div class="row">
<div class="input-field col s6">
<input placeholder="Placeholder" id="email" type="text" name="email" />
<input type="submit" value="Register email" />
</div>
</div>
</form>
</div>
<!-- Your HTML here -->
顯示完整的代碼 –
請分享您與我們試過的代碼 - 它有點難以幫助你這樣做。 –
即使您在同一頁面上使用'$ _POST ['']'數組,也應該可以工作。除非當然你不是首先發送你的表格。你能告訴我們你的代碼嗎?這將讓我們明白爲什麼陣列不能工作,你需要做些什麼來解決它。 – icecub