我有以下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 = "";
这就是你需要的那种结构。如果存在当前记录,请使用新信息更新它。否则请插入。根据您想要更新的内容进行相应调整。也作为进一步的一点。请不要将用户输入直接放入数据库。通过将参数绑定到查询来使用准备好的语句。
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");
}
}
不太清楚你在问什么——你的主键是什么?
您说“查找数据库表'teachers',然后将新值(输入文本框)覆盖到数据库中学校pin的旧值”因此我猜您想更新当前教师的学校pin值?主要的逻辑问题是:
>
你永远不会做更新!
第一点:你有
$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=
第二,如果执行更新,则需要在您的上设置一个
上使用其他
块。或者(例如,如果username
是主键),您可以在重复键更新插入...,然后让mysql处理该行是否存在的检查。看https://dev.mysql.com/doc/refman/5.7/en/insert-on-duplicate.html
请查看如何进行参数化查询,并使用它们代替这里的字符串。从如何防止PHP中的SQL注入开始?
如果您正在使用会话变量,您需要首先启动会话。只需在脚本的开头添加session_start()
。
问题内容: 我一直在看这段代码已有一段时间了,但我看不出问题出在哪里。我已经阅读了整个StackOverflow,但仍然看不到我的错误在哪里。 错误在第13行中,即thats 。我尝试通过http://www.w3schools.com/php/php_mysql_insert.asp帮助自己,但对我没有太大帮助。 问题答案: 警告: 切勿将 w3schools 用于学习目的。他们的教程中有很多错
我正在为我的网站做一个注册页面。我在PHPMyAdmin中维护一个包含7个字段的数据库(id、用户名、密码、电子邮件、活动、代码和日期)。我正在使用代码和活动字段来实现电子邮件激活。注册表单使用post方法获取4个参数(名称、电子邮件、密码和重新键入密码),并将提交按钮的信息传递给PHP代码,以检查用户是否是新的,电子邮件ID是否应该是新的,并在单击提交按钮后检查空字段。PHP代码如下所示: 当我
我正在尝试使用SSIS将数据从一个数据库复制到另一个数据库。我使用SQL Server导入导出向导创建了dtsx包。我正在复制的表的列名为“id”,另一个表的名称为“moduleCategoryid”,我将它们映射在一起。 ModuleCategoryId是标识,它的自动增量为1。在源数据库中,ID不排序,如下所示: 32名称1 14名称2 7名称3 null 如果我显式地关闭ValueGener
我想使用以下格式的多维数组:value[n][],其中n是问题编号。使用此新设置,您将得到以下输入字段: 请注意,选定的值编码在value属性中。name属性只包含值所属的问题。 因此,上述输入说明的是: 我想在下面的“问题”和“答案”数据库表中插入这些详细信息: 问题表: 答案表: 现在,我已经尝试编写下面的mysqli/php代码来将这些值插入数据库,但是我收到了错误,并且在想要实现我想要实现
我无法将表格发送到数据库。我已经试了一个小时来解决这个问题;我用“echo mysqli_error();”将代码打了个谜,但并没有收到任何错误,只是数据库中缺少新数据(似乎提交表单也并没有重新加载页面来发送信息)。数据库使用config.php、connectDB.php和header.php为我的其余页面工作,因此问题不在数据库设置中。我相信错误在“isset($\u POST['submit
我正在尝试使用mysqli函数将一些数据插入到表中。 我的连接使用以下功能可以正常工作: 但当我尝试运行insert函数时,数据库中什么也得不到。 我一直在查看mysqli函数列表,寻找正确的错误方法,但它们似乎都与DB的连接有关,而不是与插入成功有关(而且我可以在我的DB中清楚地看到它没有插入。) 最好的调试方法是什么?我应该对插入使用哪种错误处理? 我尝试使用mysqli_sqlstate,它