PHP 和 MYSQL 中的编码错误


Coding errors in PHP and MYSQL

我遵循了YouTube教程,该教程教您如何为PHP和MYSQL创建编辑和删除数据页面,但由于某种原因代码不起作用。出现了两条错误消息:

注意:未定义的变量:_Get在 C:''Users''siaw_''PhpstormProjects''Report Page''modify.php 第 6 行

警告:mysql_fetch_array() 期望参数 1 是资源,布尔值在第 8 行的 C:''Users''siaw_''PhpstormProjects''Report Page''modify.php 中给出

我完全按照教程的方式进行操作...我对PHP和MYSQL的了解非常有限,所以请找出第6行和第8行的错误?

这是代码:

<?php
include 'connect.php';
if(!isset($_POST['submit'])) {
    $q = "SELECT * FROM people WHERE ID = $_Get[id]";
    $result = mysql_query($q);
    $person = mysql_fetch_array($result);
}
?>
<h1>You Are Modifying A User</h1>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
    Name <input type="text" name="inputName" value="<?php echo $person['Name']; ?>" /><br />
    Description <input type="text" name="inputDesc" value="<?php echo $person['Description']; ?>" />
    <br />
    <input type="hidden" name="id" value="<?php echo $_GET['id']; ?>" />
    <input type="submit" name="submit" value="Modify" />
</form>
<?php
if(isset($_POST['submit'])) {
    $u = "UPDATE people SET `Name`='$_POST[inputName]', `Description`='$_POST[inputDesc]' WHERE ID = $_POST[id]";
    mysql_query($u) or die(mysql_error());
    echo "User Has Been Modified";
    header("Location: index.php");
}
?>

这里也是我使用的YouTube链接(https://www.youtube.com/watch?v=kc1bppUlqps)

  • 您应该将变量正确绑定到查询中
  • 在将变量
  • 用于查询之前,还应使用*_real_escape_string()清理变量
  • 我认为当第一个isset($_POST["submit"])条件未满足时,您的页面会出现错误。

首先清理变量:

$id = mysql_real_escape_string((int) $_GET["id"]);

将它们绑定到查询:

$q = "SELECT * FROM people WHERE ID = '$id'";

请注意,mysql_*已被弃用,您至少应考虑mysqli_*

但。。。MySQL 已弃用:(

如果您对mysqli_*感兴趣,可以检查以下内容:

首先,我们必须使用以下mysqli_*连接到您的数据库(连接.php):

$conn = new mysqli("Host", "Username", "Password", "Database"); /* REPLACE NECESSARY DATA */
/* CHECK CONNECTION */
if (mysqli_connect_errno()) {
    printf("Connect failed: %s'n", mysqli_connect_error());
    exit();
}

然后对于您处理$_GET["id"]的 php 文件:

if(isset($_POST['submit'])) {
  $stmt = $con->prepare("SELECT Name, Description FROM people WHERE ID = ?"); /* PREPARE THE QUERY */
  $stmt->bind_param("i", $_GET["id"]); /* BIND $_GET["id"] TO YOUR QUERY; i STANDS FOR INTEGER TYPE */
  $stmt->execute(); /* EXECUTE YOUR PREPARED QUERY */
  $stmt->bind_result($name, $description); /* BIND THE RESULTS TO THESE VARIABLES CORRESPONDINGLY */
  $stmt->fetch(); /* FETCH THE RESULTS */
  $stmt->close(); /* CLOSE THE PREPARED STATEMENT */
}
/* YOUR HTML CODE HERE */
if(isset($_POST['submit'])) {
  $stmt = $con->prepare("UPDATE people SET Name = ?, Description = ? WHERE ID = ?");
  $stmt->bind_param("ssi", $_POST["inputName"], $_POST["inputDesc"], $_POST["id"]); /* s STANDS FOR STRING TYPE */
  $stmt->execute();
  $stmt->close();
  echo "User Has Been Modified";
  header("Location: index.php");
}
你需要

把$_GET放在外面,而且你的$_GET语法不正确,试着改变:

if(!isset($_POST['submit'])) {
    $q = "SELECT * FROM people WHERE ID = $_Get[id]";
    $result = mysql_query($q);
    $person = mysql_fetch_array($result);
}

有了这个:

if(!isset($_POST['submit'])) {
    $id = $_GET['id'];
    $q = "SELECT * FROM people WHERE ID = $id";
    $result = mysql_query($q);
    $person = mysql_fetch_array($result);
}