在这里,我创建了一个包含登录和注册的表单。
当我运行我们的代码时,它会在消息中显示未定义的变量,并且无法在后端存储用户输入值。
以下是供您参考的完整代码:
db.php中:
<?php
$connection = mysqli_connect('localhost','root','','sign-log') or die(mysqli_error($connection));
?>
index.php(带css):
<?php
include('db.php');
if(isset($_POST['action']))
{
if($_POST['action']=="login")
{
$email = mysqli_real_escape_string($connection,$_POST['email']);
$password = mysqli_real_escape_string($connection,$_POST['password']);
$strSQL = mysqli_query($connection,"select name from users where email='".$email."' and password='".md5($password)."'");
$Results = mysqli_fetch_array($strSQL);
if(count($Results)>=1)
{
$message = $Results['name']." Login Sucessfully!!";
}
else
{
$message = "Invalid email or password!!";
}
}
elseif($_POST['action']=="signup")
{
$name = mysqli_real_escape_string($connection,$_POST['name']);
$email = mysqli_real_escape_string($connection,$_POST['email']);
$password = mysqli_real_escape_string($connection,$_POST['password']);
$query = "SELECT email FROM users where email='".$email."'";
$result = mysqli_query($connection,$query);
$numResults = mysqli_num_rows($result);
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) // Validate email address
{
$message = "Invalid email address please type a valid email!!";
}
elseif($numResults>=1)
{
$message = $email." Email already exist!!";
}
else
{
mysql_query("insert into users(name,email,password) values('".$name."','".$email."','".md5($password)."')");
$message = "Signup Sucessfully!!";
}
}
}
echo '<script type="text/javascript" src="jquery-1.8.0.min.js"></script>
<link rel="stylesheet" href="http://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css" />
<script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script>
<style type="text/css">
input[type=text]
{
border: 1px solid #ccc;
border-radius: 3px;
box-shadow: inset 0 1px 2px rgba(0,0,0,0.1);
width:200px;
min-height: 28px;
padding: 4px 20px 4px 8px;
font-size: 12px;
-moz-transition: all .2s linear;
-webkit-transition: all .2s linear;
transition: all .2s linear;
}
input[type=text]:focus
{
width: 400px;
border-color: #51a7e8;
box-shadow: inset 0 1px 2px rgba(0,0,0,0.1),0 0 5px rgba(81,167,232,0.5);
outline: none;
}
input[type=password]
{
border: 1px solid #ccc;
border-radius: 3px;
box-shadow: inset 0 1px 2px rgba(0,0,0,0.1);
width:200px;
min-height: 28px;
padding: 4px 20px 4px 8px;
font-size: 12px;
-moz-transition: all .2s linear;
-webkit-transition: all .2s linear;
transition: all .2s linear;
}
input[type=password]:focus
{
width: 400px;
border-color: #51a7e8;
box-shadow: inset 0 1px 2px rgba(0,0,0,0.1),0 0 5px rgba(81,167,232,0.5);
outline: none;
}
</style>
<script>
$(function() {
$( "#tabs" ).tabs();
});
</script>
</head>
<body>
<b>'.$message.'</b>
<div id="tabs" style="width: 480px;">
<ul>
<li><a href="#tabs-1">Login</a></li>
<li><a href="#tabs-2" class="active">Signup</a></li>
</ul>
<div id="tabs-1">
<form action="" method="post">
<p><input id="email" name="email" type="text" placeholder="Email"></p>
<p><input id="password" name="password" type="password" placeholder="Password">
<input name="action" type="hidden" value="login" /></p>
<p><input type="submit" value="Login" /></p>
</form>
</div>
<div id="tabs-2">
<form action="" method="post">
<p><input id="name" name="name" type="text" placeholder="Name"></p>
<p><input id="email" name="email" type="text" placeholder="Email"></p>
<p><input id="password" name="password" type="password" placeholder="Password">
<input name="action" type="hidden" value="signup" /></p>
<p><input type="submit" value="Signup" /></p>
</form>
</div>
</div>';
?>
db.sql:
CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(240) NOT NULL,
`email` varchar(240) NOT NULL,
`password` varchar(240) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
如何在后端存储输入值以及如何在消息中修复未定义的变量。
任何人都可以帮助我吗?
答案 0 :(得分:1)
我似乎无法在评论中得到这一点,所以这里有更完整的解释:您正在将mysqli_*
函数与已弃用的mysql_*
函数混合使用。这与您收到的undefined variable
警告无关。
问题在于:
else
{
mysql_query("insert into users(name,email,password) values('".$name."','".$email."','".md5($password)."')");
// ^^^^^^^^^^^ not good
$message = "Signup Sucessfully!!";
}
mysqli_*
和mysql_*
函数不能像那样交换,你可以使用两者,但是你必须为每个函数打开一个数据库连接。
因此,要解决您的问题,您需要执行与上一个查询相同的操作:
$result = mysqli_query($connection,'insert ......');
答案 1 :(得分:0)
变量$ message在IF体内,在此之前初始化它
$message = '';
if(isset($_POST['action']))
{.....