【发布时间】:2018-07-13 11:18:31
【问题描述】:
我有以下 php 代码试图
a) 要求用户输入学校密码 b) 查找数据库表“教师”,然后将新值(输入到文本框中)覆盖在数据库中学校密码的旧值上。
目前的问题是它确实使用新输入的 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 = "";
【问题讨论】:
-
我只看到
INSERT声明。无论如何,您都会添加新行。如果要覆盖现有行,则需要UPDATE语句。 -
@WillardSolutions 您能否在我的代码上下文中发布您建议的解决方案?
-
然后使用 UPDATE 或 INSERT ON DUPLICATE
-
我曾尝试 UPDATE 并导致新的错误,例如:注意:未定义索引:第 19 行 C:\xampp\.php 中的电子邮件。基本上,它随后停止识别声明的会话。
-
另外,这个脚本容易受到 MySQL 注入的影响,您应该使用准备好的语句并确保正在使用的每个字段都经过适当的验证和清理。
标签: php html mysqli phpmyadmin