(我发现了这个但仍然不明白){HTML form PHP post to self to validate or submit to new page}
我很抱歉,如果这个问题在其他地方得到更好的解释,但我已经被困了几个小时,已经搜索过,并且刚刚放弃了。我将通过W3c网站教程了解如何使用PHP验证,清理和处理表单。一切顺利(至少我认为确实如此),直到有时间对这些数据做些什么。我现在将向您展示代码并在代码后进一步解释我的位置和问题:
<form method="POST" name="signup" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
<label for="first name"></label><input id="first name" name="first_name" placeholder="First Name" type="text" value="<?php echo $firstname;?>" /> <span class="error">* <?php echo $firstnameErr;?></span>
<label for="last_name"></label><input id="last name" name="last_name" placeholder="Last Name" type="text" value="<?php echo $lastname;?>" />
<span class="error">* <?php echo $lastnameErr;?></span>
<br><br>
<label for="email"></label><input id="email" name="email" placeholder="Email" type="text" value="<?php echo $email;?>" />
<span class="error">* <?php echo $emailErr;?></span>
<br /><br />
<label for="password"></label><input id="password" name="password" placeholder="Create Password" type="password" />
<span class="error">* <?php echo $passwordErr;?></span>
<br /><br />
<label for="male"><strong>Male</strong></label>
<input id="male" value="male" <?php if (isset($gender) && $gender=="male") echo "checked";?> name="gender" type="radio" />
<label for="female"><strong>Female</strong></label> <input id="female" value="female"
<?php if (isset($gender) && $gender=="female") echo "checked";?> name="gender" type="radio" />
<span class="error">* <?php echo $genderErr;?></span>
<br /><br />
<label for="submit">"I Agree To <a href="#">Terms And Conditions"</a></label> <input id="submit" value="Submit" type="submit" name="submit"/><br /><br />
<p><span class="error">* required field.</span></p>
<hr>
我对很多事感到困惑。我应该按原样保留“表单操作”,还是应该将其更改为“welcome.php”。如果我将其更改为“welcome.php”,我还是要包含“htmlspecialchars”吗?我要去使用MSQLI。我已经能够连接到我的数据库但是如何将用户数据转换为服务器的可行信息?我是否继续使用我在这个HTML表单中创建的变量?我知道我需要将某种变量放入查询字符串中,然后确保我也退出它。很抱歉,如果我对你们中的一些人感到愤怒,但我只是需要帮助。我不想要消极点,但如果我能得到一些答案我可以处理一些坏点。感谢您的帮助和节日快乐。
以下是我的“welcome.php”。它实际上被称为不同的东西,但在这一刻它是“welcome.php”。再次感谢。
<?php
$hostname="social89.db";
$username="social89";
$password="P!!";
$dbname="social89";
$db_conx = mysqli_connect($hostname, $username, $password) OR DIE ("Unable to
connect to database! Please try again later.");
if(mysqli_connect_errno()){
echo mysqli_connect_error();
exit();
}
$select = mysqli_select_db($db_conx,$dbname);
$firstname= $_POST["first_name"];
$lastname= $_POST["last_name"];
$email= $_POST["email"];
$password= $_POST["password"];
$gender= $_POST["gender"];
mysqli_query($db_conx,"INSERT INTO users (firstname, lastname, email, password, gender)
VALUES ('$firstname', '$lastname', '$email', '$password', '$gender')");
mysqli_close($db_conx);
header("Location: ERASETHISprofile.php")
?>
答案 0 :(得分:1)
一开始我猜。
“发布到自己”是指使用相同的脚本呈现表单接收表单数据。表单操作使用服务器变量$_SERVER['PHP_SELF']
指向同一个php脚本。
这意味着您可以执行以下操作:
<?php
if (!empty($_POST)) { // if $_POST isn't empty, the user submitted the form
// validate
if ($validationPassed) {
// insert to db
} else {
// tell the user they messed up
$error = 'Hey, you! Email address was incorrect.';
}
}
//
?>
<html> ...
<?php if (isset($error)) { echo $error; } ?>
// form
以上是非常基本的。您将需要为未通过验证的特定字段设置错误,以便为用户提供更多关于纠正内容的线索。
htmlspecialchars()
- 将特殊字符转换为HTML实体
简而言之,如果您信任输入字符串,则不需要它。因此,“welcome.php”已被您自己手动输入到文档中,是受信任的,并且不需要转换特殊字符 - 字符串中没有任何字符。如果该文本来自用户,则可以包含<h2>Hello</h2>
。如果不使用此函数,您的页面可能会在H2中呈现Hello。
下一部分的推荐阅读:How can I prevent SQL injection in PHP?
目前您很容易受到攻击,因为您从表单中获取数据并且未对其进行验证或清理。强制性的XKCD漫画:http://xkcd.com/327/。除了SQL注入的风险之外,还存在垃圾数据在数据库中结束的风险。
PHP验证:filter_var示例:http://www.php.net/manual/en/filter.examples.validation.php