当前位置: 首页 > 知识库问答 >
问题:

mysqli和php代码未能将字段正确插入数据库

谢骏奇
2023-03-14

我有以下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 = "";

共有3个答案

师博
2023-03-14

这就是你需要的那种结构。如果存在当前记录,请使用新信息更新它。否则请插入。根据您想要更新的内容进行相应调整。也作为进一步的一点。请不要将用户输入直接放入数据库。通过将参数绑定到查询来使用准备好的语句。

 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");
    }

}
堵泽宇
2023-03-14

不太清楚你在问什么——你的主键是什么?

您说“查找数据库表'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注入开始?

胡承载
2023-03-14

如果您正在使用会话变量,您需要首先启动会话。只需在脚本的开头添加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,它