我正在尝试为管理试卷的讲师创建一个项目,作为我的第一个PHP项目。到目前为止,我已成功创建了一个add_user.php应用准备好的语句,这些语句最初工作正常。然后我将session_start()包含在add_user.php中,并在提交表单后似乎没有发生任何事情。
没有弹出错误,但成功声明也没有弹出。我检查了数据库,是的,它是空的。我还在试图找出究竟出了什么问题。如果它是会话,我如何正确实现会话,以便它不会篡改功能?查看了几个关于会话的参考和教程,发现它们主要解释了如何应用会话的基础知识。
如果有人可以帮助我,我真的很感激。我是PHP的新手,还有很多需要学习的地方。
auth.php:
<?php
session_start();
if(!isset($_SESSION["user_id"])){
header("Location: login.php");
exit(); }
?>
adduser.php:
<?php
session_start();
require('dbconnect.php');
include('header.php');
$status = "";
// If form submitted, insert values into the database.
if (isset($_POST['userid'])){
// removes backslashes
//escapes special characters in a string
$name = mysqli_real_escape_string($con, $_POST['name']);
$username = mysqli_real_escape_string($con, $_POST['userid']);
$email = mysqli_real_escape_string($con, $_POST['email']);
$password = mysqli_real_escape_string($con,md5($_POST['password']));
$usertype = mysqli_real_escape_string($con, $_POST['usertype']);
$trn_date = date("Y-m-d H:i:s");
$query = "INSERT into `users` (name, user_id, email, password, user_type, trn_date) VALUES (?, ?, ?, ?, ?, ?);";
$stmt = mysqli_stmt_init($con);
if (!mysqli_stmt_prepare($stmt, $query)) {
echo "SQL Query Failure";
}
else if (mysqli_stmt_prepare($stmt, $query)) {
mysqli_stmt_bind_param($stmt, "ssssss", $name, $userid, $email, $password, $usertype, $trn_date);
mysqli_stmt_execute($stmt);
echo "<div class='alert alert-success' role='alert'>
<h3>You are registered successfully.</h3>
<br/>Click here to <a href='login.php'>Login</a></div>";
}
} else {
?>
<!DOCTYPE html>
<html lang="en">
<body>
<div class="container">
<div class="row main">
<div class="panel panel-default">
<div class="main-login main-center">
<div class="panel-heading">
Register Subject
</div>
<form class="form-horizontal" method="post" action="#">
<div class="form-group">
<label for="name" class="cols-lg-2 control-label"></label>
<div class="cols-lg-10">
<div class="input-group">
<span class="input-group-addon"><i class="fa fa-user fa" aria-hidden="true"></i></span>
<input type="text" class="form-control" name="name" id="name" placeholder="Enter user Name"/>
</div>
</div>
</div>
<div class="form-group">
<label for="userid" class="cols-lg-2 control-label"></label>
<div class="cols-lg-10">
<div class="input-group">
<span class="input-group-addon"><i class="fa fa-users fa" aria-hidden="true"></i></span>
<input type="text" class="form-control" name="userid" id="userid" placeholder="Enter User ID"/>
</div>
</div>
</div>
<div class="form-group">
<label for="email" class="cols-lg-2 control-label"></label>
<div class="cols-lg-10">
<div class="input-group">
<span class="input-group-addon"><i class="fa fa-envelope fa" aria-hidden="true"></i></span>
<input type="text" class="form-control" name="email" id="email" placeholder="Enter user Email"/>
</div>
</div>
</div>
<div class="form-group">
<label for="password" class="cols-lg-2 control-label"></label>
<div class="cols-lg-10">
<div class="input-group">
<span class="input-group-addon"><i class="fa fa-lock fa-lg" aria-hidden="true"></i></span>
<input type="password" class="form-control" name="password" id="password" placeholder="Enter user Password"/>
</div>
</div>
</div>
<div class="form-group">
<label for="confirm" class="cols-lg-2 control-label"></label>
<div class="cols-lg-10">
<div class="input-group">
<span class="input-group-addon"><i class="fa fa-lock fa-lg" aria-hidden="true"></i></span>
<input type="password" class="form-control" name="confirm" id="confirm" placeholder="Confirm user Password"/>
</div>
</div>
</div>
<div class="cols-lg-10">
<div class="form-group">
<label>User Role</label>
<select name="usertype" class="form-control">
<option value="admin">Admin</option>
<option value="lect">Lecturer</option>
<option value="cord">Exam Coordinator</option>
</select>
</div>
</div>
<div class="form-group ">
<button type="submit" class="btn btn-primary btn-lg btn-block login-button">Register</button>
</div>
<div class="login-register">
<a href="index.php">Login</a>
</div>
</form>
</div>
</div>
</div>
</div>
<?php } ?>
<script type="text/javascript" src="assets/js/bootstrap.js"></script>
</body>
答案 0 :(得分:0)
好的,所以我给了它一个很难看的东西,这里有很多缺少的信息让某人能够完全帮助你。基于上面的内容,我会尽我所能给你,但是你可以做一些试验,然后做一些研究。
首先,您的错误不是因为您包含session_start();
它甚至看起来不像您之后引用的会话,因此该函数在您当前的脚本中是无用的。如果您在顶部有if (isset($_SESSION['userID'])){}
(或您在会话字段中设置的任何内容)以查看用户是否已登录,那么您将有理由将其包含在内。现在它什么也没做。
其次,我假设您希望html表单中的字段发布到页面顶部的php处理程序,但是您没有定义它。您有action="#"
,但如果您希望将其发布到同一页面,则表单标签中需要action="< ? php echo $_SERVER['PHP_SELF'] ?>"
。然后在页面顶部,将您的php包装在if ($_SERVER['REQUEST_METHOD'] == "POST"){
中。在这种情况下,表单材料将由同一页面发布和处理。目前您只有if(isset($_POST['userID']))
,但除非您将userID
从其他页面发布到adduser.php
,否则不会设置任何内容。
ob_start()
或session_start()
的顺序无关紧要,但需要ob_start()
才能处理标题。这是一个快速的Google或Stack Overflow搜索,因此找到示例应该不难。
您应该独立于其他页面测试您的adduser.php
页面,因为它们是不同的问题。您在每个页面上都会遇到一些问题,这些问题会使您的故障排除变得复杂,因此请一次只处理一个问题。
我希望这会有所帮助。