使用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>&nbsp;<input type="text" id="name" name="name"></input></p>
<p><b>Username:</b>&nbsp;<input type="text" id="username" name="username"></input></p>
<p><b>Password:</b>&nbsp;<input type="password" id="password" name="password"></input></p>
<p><b>Email:</b>&nbsp;<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 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

编译 SCSS 时出现误报“未定义变量”错误

使用 node-sass 编译 SCSS 时出现未定义变量错误

注册时出现未定义的方法错误

在 ImageJ 中运行宏时出现未定义的变量错误

React 表单中的两个下拉菜单

为柴油模型定义结构时出现错误未定义类型或模块