mysqli和php代码无法正确地将字段插入数据库

时间:2018-02-02 21:57:31

标签: php html mysqli phpmyadmin

我有以下寻求

的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 = "";

3 个答案:

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

}