【问题标题】:PHP MySQL INSERT Query & PHP seems to be run twicePHP MySQL INSERT Query & PHP 似乎运行了两次
【发布时间】:2015-05-12 00:01:47
【问题描述】:

我想做一个简单的安卓登录服务器。

登录功能很好,但在注册时出现了一些问题。

我的意图是:

  1. Android 客户端使用 HTTPPOST 向 XAMPP 服务器发送用户信息(id、用户名、密码)。

  2. 服务器获取用户信息,并从数据库中查找重复 ID 或用户名(使用选择查询)。如果存在重复,则使用 echo 响应客户端。

  3. 如果不存在重复,则使用插入查询将新用户信息添加到数据库。并使用 echo 响应客户端。

如果存在重复,则效果很好。服务器响应正确。

但在没有重复的情况下,查询的输出为 1 然后服务器响应“有重复”...

login.php 和 register.php 是一样的代码,但是 login.php 中没有插入查询,效果很好。

所以我认为这个问题是由插入查询引起的。

这是我的代码:

<?php
$hostname_localhost ="localhost";
$database_localhost ="mydatabase";
$username_localhost ="root";
$password_localhost ="";
$id_localhost ="";

$localhost = mysql_connect($hostname_localhost,$username_localhost,$password_localhost, $id_localhost) or trigger_error(mysql_error(),E_USER_ERROR);
mysql_select_db($database_localhost, $localhost);

$username = $_POST['username'];
$password = $_POST['password'];
$id = $_POST['id'];

$query_search = "select * from tbl_user where username = '".$username."' OR id = '".$id."'";
$query_exec = mysql_query($query_search) or die(mysql_error());
$rows = mysql_num_rows($query_exec);

if($rows == 0) { 
    $query_register = "INSERT INTO tbl_user (id, username, password) VALUES ('$id', '$username', '$password')";
    $result = mysql_query($query_register) or die(mysql_error());
    if($result == TRUE){
        echo "Register Success";
    } else {
        echo "Register Fail";
    }
    exit;
    die;
} else {
    echo "Registered Device or Username";
    exit;
}
?>

login.php 几乎相同。只有搜索查询(选择id和用户名密码相同)和插入查询不同(login.php中没有插入)。

服务器响应错误,但插入操作正确。我可以在我的数据库中看到新记录。所以...它似乎运行了两次。

客户端没有问题,因为它也几乎与登录代码相同(并且登录工作良好,无需插入查询:))。

【问题讨论】:

  • 最好使用$username = isset($_POST['username']) ? $_POST['username'] : '';。如果 $_POST 数组不包含名为 username 的键,您将避免 PHP 错误。此外,您应该使用MySQLi 而不是 MySQL。您的代码对 SQL 注入不安全。
  • 我在您的代码中找不到错误。代码不能运行两次,除非某处有循环。如果有任何错误,您应该显示 PHP 错误。
  • 代码无错误,功能运行良好,但响应错误。

标签: php mysql


【解决方案1】:

更新

mysql_num_rows 返回一个 int,您正在检查 $rows 是否为 false 而不是 0。使用 ===


您在tbl_user 中指的是什么id,为什么用户要提供他们的ID?你确定你检查的是正确的id吗?感觉您应该单独查询设备 ID 或检查表 tbl_user 中的 device_id 列。

需要调查的其他事项

exit;die; 相同,所以调用两次没有意义。

if ($rows == 0) 正在检查 (bool) false 而不是整数 0。使用=== 检查提供的类型。

使用 "" 双引号时,您可以直接提供变量; 例如。 "...WHERE username = '$username'" 而不是 "... WHERE username = '".$username."'"

考虑使用mysqli 而不是mysql 以获得更多功能并提高安全性; http://php.net/manual/en/book.mysqli.php

【讨论】:

  • 我知道退出;然后死去;是一样的。这是错误。 id 表示设备 ID,它会自动发送,用户将他的帐户名(用户名)和密码发送到服务器。谢谢你的建议,但我仍然不明白为什么它会出错:((
  • 你试过把if ($rows == 0)改成if ($rows === 0)吗?
  • 您遇到什么错误? echo "Register Fail";echo "Registered Device or Username";?
  • 客户端总是得到“注册设备或用户名”。但如果数据库中没有重复(id和用户名),记录在数据库中注册
  • 那怎么不能正常工作呢?如果数据库中没有任何内容,则它已注册,否则您会收到一条错误消息,指出已经有用户或设备提供了信息。听起来不错。
猜你喜欢
  • 1970-01-01
  • 2013-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-13
  • 2021-10-17
相关资源
最近更新 更多