我有以下寻求
的PHP代码a)要求用户输入校针 b)查找数据库表'teachers',然后覆盖数据库中school pin的旧值覆盖新值(输入到文本框中)。
目前问题是它使用新输入的引脚向表添加新行,但我希望它覆盖该特定教师的现有值(基本上覆盖现有值)。
php处理程序代码如下:
if (isset($_POST["addpin1"]) && !empty($_POST['schoolpin1']) && $_SESSION['teacher']) {
$school_pin = mysqli_real_escape_string($con,$_POST['schoolpin1']);
$email = $_SESSION['email'];
$username = $_SESSION['username'];
$pass = $_SESSION['pass'];
$check_duplicate = mysqli_query($con,"SELECT school_pin FROM teachers WHERE school_pin='$school_pin' ");
if(@mysqli_num_rows($check_duplicate) == 0){
$query = mysqli_query($con,"INSERT INTO teachers (school_pin,email,username,pass)
VALUES('$school_pin','$email','$username','$pass')");
if($query){
header("Location: teachers.php");
}
}
}
HTML表单代码:
<form action="" method="post">
<input type="text" name="schoolpin1" id="schoolpin1">
<input type="submit" class="btn btn-success" name="addpin1" value="CHANGE PIN">
</form>
数据库结构(tbl:教师)字段如下所示
id
email
school_pin
username
pass
发生这种情况的页面有一位教师登录,因此他们的用户名会显示在屏幕上。
更新:根据有关开始会话的答案之一。这已经完成了
<?php
require_once("scripts/connect_db.php");
session_start();
if(!isset($_SESSION['teacher'])) header('Location: teacher_login.php');;
$result="";
if (isset($_POST["logout"])) {
session_destroy();
header('Location:index.php');
}
$err = "";
答案 0 :(得分:0)
如果您正在使用会话变量,则需要先启动会话。只需在脚本的开头添加session_start()
即可。
答案 1 :(得分:0)
目前尚不清楚你在问什么 - 你的主要关键是什么?
你说“查找数据库表'教师',然后在数据库”中的学校图钉的旧值上覆盖新值(输入到文本框中),所以我想你想要更新当前老师的校针价值?主要的逻辑问题是:
当您检查重复项时,您正在寻找新引脚并在未找到时执行插入
你永远不会做更新!
第一点:你有
$check_duplicate = mysqli_query($con,"SELECT school_pin FROM teachers WHERE school_pin='$school_pin' ");
我想你想要
SELECT school_pin FROM teachers WHERE username=` not `SELECT school_pin FROM teachers WHERE school_pin=
第二,您需要在else
上执行更新的if
阻止。或者(例如,如果username
是主键),您可以使用insert ... on duplciate key update
和mysql处理检查行是否存在。见https://dev.mysql.com/doc/refman/5.7/en/insert-on-duplicate.html
请查看如何进行参数化查询并使用它们而不是像这里的字符串一样。从How can I prevent SQL injection in PHP?
开始答案 2 :(得分:0)
这是您需要的那种结构。如果存在当前记录,请使用新信息更新它。否则插入。根据您要更新的内容进行相应调整。还作为另一点。请不要将用户输入直接放入数据库。使用binding parameters为查询准备的语句。
if(@mysqli_num_rows($check_duplicate) == 0){
$query = mysqli_query($con,"INSERT INTO teachers (school_pin,email,username,pass)
VALUES('$school_pin','$email','$username','$pass')");
if($query){
header("Location: teachers.php");
}
}else{
$query = mysqli_query($con,"
UPDATE teachers
SET email = '$email' ,username =
'$username',pass = '$pass'
WHERE school_pin='$school_pin'
");
if($query){
header("Location: teachers.php");
}
}