使用php保存html表单时出现错误未定义变量和所有值在sql db中保存为0 [重复]
Posted
技术标签:
【中文标题】使用php保存html表单时出现错误未定义变量和所有值在sql db中保存为0 [重复]【英文标题】:Getting the error Undefined variable and all values getting saved as 0 in sql db when saving an html form using php [duplicate] 【发布时间】:2017-12-10 20:41:08 【问题描述】:html代码:
<html>
<head>
</head>
<body>
<p><h1>Student Information Input Form</h1></p>
<section>
<form method="POST" action="connection.php">
<p><b>Name:</b> <input type="text" id="name" name="name"></input></p>
<p><b>Username:</b> <input type="text" id="username" name="username"></input></p>
<p><b>Password:</b> <input type="password" id="password" name="password"></input></p>
<p><b>Email:</b> <input type="email" id="email" name="email"></input></p>
<p><input type="submit" id="submit" name="submit"></p>
</form>
</section>
</body>
</html>
PHP 代码:
<?php
$servername="localhost";
$username="root";
$password="";
$dbname="newdb";
//Create Connection
$conn=new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error)
die("Connection failed: " . $conn->connect_error);
//get values from form
if (isset($_POST['name']))
$nameForm=$_POST['name'];
if (isset($_POST['username']))
$usernameForm=$_POST['username'];
if (isset($_POST['passsword']))
$passwordForm=$_POST['password'];
if (isset($_POST['email']))
$emailForm=$_POST['email'];
//Insert Values
$sql = "INSERT INTO userinfo (name, username, password, email) VALUES ('$nameForm', '$usernameForm', '$passwordForm', '$emailForm')";
//To check whether data is inserted properly or not
if ($conn->query($sql) === TRUE)
echo "New record created successfully";
else
echo "Error: " . $sql . "<br>" . $conn->error;
$conn->close();
?>
错误信息:
注意:未定义变量:passwordForm in C:\xampp\htdocs\Project2_php db\connection.php 第28行新记录 创建成功
单击提交按钮时,我收到上述错误,并且在数据库中,所有值都存储为零。
【问题讨论】:
你的代码容易受到SQL injection attacks的攻击!如果不使用prepared statements,你应该(至少)转义你的输入! 名称、用户名、密码和电子邮件列肯定不是数字或默认值为“0”,对吧?否则在插入行时它们不会为零。 另外注意,你不应该以纯文本形式存储密码!阅读password hashing,并在可用时使用password_hash
and password_verify
函数!
@Byteawave 您能否详细建议一下如何避免 sql 注入以及使用散列作为密码,因为我是新手。
@SloanThrasher db 行设置为 int,当我更改为 varchar 时它起作用了。
【参考方案1】:
这是一个错字if (isset($_POST['passsword'])) // password
注意: 也可以考虑切换到 PDO 语句
【讨论】:
@alapan 解决了吗? 这并不能解释为什么所有值都将存储为 0,尽管它确实回答了问题的一部分。提问者还应该验证他们的数据库行没有设置为“整数” @JigarShah 感谢您发现它成功了。 @sicksixtings 我将数据库行保持为整数,当我更改为 Varchar 时,它现在可以正常工作了。以上是关于使用php保存html表单时出现错误未定义变量和所有值在sql db中保存为0 [重复]的主要内容,如果未能解决你的问题,请参考以下文章