在外部php文件上返回函数
为了学习php,我正在尝试开发一个简单的登录表单 我创建了一个表单和一个函数,它向mysql数据库发送一个查询,以检索用户名和密码(存储在md5加密中),并使用用户插入的数据对其进行控制 问题是这个函数(login())位于一个名为fun_login.php的外部文件中,当我从login.php页面调用它时,它会打开fun_login.php页面,而不会返回login.php(我想是因为返回值有问题) 在login.php中,我将文件fun_login.php包含在在外部php文件上返回函数,php,html,mysql,Php,Html,Mysql,为了学习php,我正在尝试开发一个简单的登录表单 我创建了一个表单和一个函数,它向mysql数据库发送一个查询,以检索用户名和密码(存储在md5加密中),并使用用户插入的数据对其进行控制 问题是这个函数(login())位于一个名为fun_login.php的外部文件中,当我从login.php页面调用它时,它会打开fun_login.php页面,而不会返回login.php(我想是因为返回值有问题) 在login.php中,我将文件fun_login.php包含在 <?php incl
<?php
include "fun_login.php";
?>
login.php
<div class="container">
<div class="row">
<div class="col-sm-2 col-sm-offset-5">
<form action="fun_login.php" role="form" method="post">
<div class="form-group">
<label for="nome">Username:</label>
<input type="textarea" class="form-control" id="username" name="username">
</div>
<div class="form-group">
<label for="password">Password:</label>
<input type="password" class="form-control" id="password" name="password">
</div>
<button type="submit" class="btn btn-default" id="submitlogin" name="submitlogin">Log In</button>
</form>
<?php
if(isset($_POST['submitlogin'])) {
$control = login($_POST['username'], md5($_POST['password']));
if($control) header("Location: ./index.php");
else header("Location: ./login.php");
}
?>
</div>
</div>
</div>
<?php
function login($username, $password) {
$myconn = mysql_connect(localhost, root, password);
mysql_select_db('portfolio', $myconn);
$query = "SELECT username,password,admin FROM utenti WHERE username = '" . $username . "' AND password = '" .$password . "';";
$result = mysql_query($query, $myconn)or die('Error, insert query failed');
// conto il numero di occorrenze trovate nel db
$numrows = mysql_num_rows($result);
// se il database è vuoto lo stampo a video
if ($numrows == 0) return false;
// se invece trovo delle occorrenze...
else return true;
}
?>
用户名:
密码:
登录
fun\u login.php
<div class="container">
<div class="row">
<div class="col-sm-2 col-sm-offset-5">
<form action="fun_login.php" role="form" method="post">
<div class="form-group">
<label for="nome">Username:</label>
<input type="textarea" class="form-control" id="username" name="username">
</div>
<div class="form-group">
<label for="password">Password:</label>
<input type="password" class="form-control" id="password" name="password">
</div>
<button type="submit" class="btn btn-default" id="submitlogin" name="submitlogin">Log In</button>
</form>
<?php
if(isset($_POST['submitlogin'])) {
$control = login($_POST['username'], md5($_POST['password']));
if($control) header("Location: ./index.php");
else header("Location: ./login.php");
}
?>
</div>
</div>
</div>
<?php
function login($username, $password) {
$myconn = mysql_connect(localhost, root, password);
mysql_select_db('portfolio', $myconn);
$query = "SELECT username,password,admin FROM utenti WHERE username = '" . $username . "' AND password = '" .$password . "';";
$result = mysql_query($query, $myconn)or die('Error, insert query failed');
// conto il numero di occorrenze trovate nel db
$numrows = mysql_num_rows($result);
// se il database è vuoto lo stampo a video
if ($numrows == 0) return false;
// se invece trovo delle occorrenze...
else return true;
}
?>
您收到的错误消息是什么? 在php文件的开头使用以下命令:
// Report all PHP errors
error_reporting(E_ALL);
然后,您将知道发生了哪个错误(如果有)。在您呼叫时
<?php
if(isset($_POST['submitlogin'])) {
$control = login($_POST['username'], md5($_POST['password']));
if($control) header("Location: ./index.php");
else header("Location: ./login.php");
}
?>
在您的login.php
中,标题已经发送,因此header('Location:')
将无法工作
您需要在显示任何输出(echo或html)之前将其放置。
如果查看错误日志,您可能会看到警告:无法修改标题信息-标题已由
从外观上看,该文件包含在布局或其他内容中,因此您的
login()
调用必须早于此。MD5不是“加密”;这是一个杂烩。它也完全不足以保护密码;使用像bcrypt这样的现代安全散列,最好采用PHP内置的形式,也不要使用mysql。。它是可怕的、糟糕的、危险的和不推荐的。$myconn=mysql\u connect(localhost、root、密码)
是在任何地方定义的常量localhost
、root
和password
?die('Error,insert query failed')代码>您的查询是选择查询,而不是插入查询。因此,您的header()
调用是在输出html之后进行的,因此您将收到“headers ready sent”错误。这不是答案,请不要将其作为答案发布。这充其量只是一个评论。既然你还没有足够的声誉来发表评论,你最好在你可以发表评论之前不要发表这样的评论。因为没有答案而被否决对这个目标没有好处。@deceze,我的对手也很强硬,但我看到了他的名声。。。他/她不能继续评论,所以我们应该原谅他/她:D