【问题标题】:Passing space in parameters to php file将参数中的空间传递给php文件
【发布时间】:2023-03-26 03:51:01
【问题描述】:

我在 MySQL 中编写了一个表名“User”,其中包含以下字段:UserID、UserName、Password、eMail、DisplayName、Score、timeStamp。字段 UserID 是 int AUTO_INCREMENT,时间戳是 dateTime。我正在尝试使用 php 文件将值插入表中。这是我的 php 文件:

mysql_connect("mysql.1freehosting.com","u948577195_uname","p7CraCuRAw");

mysql_select_db("u948577195_dbnam");

$uName = $_GET['uname'];
$pass = $_GET['password'];
$mail = $_GET['email'];
$disName = $_GET['disnam'];
$date = $_GET['dt'];

$sql=mysql_query("INSERT INTO User
VALUES ('$uName', '$pass', '$mail', '$disName', 0, '$date')");

while($row=mysql_fetch_assoc($sql))

$output[]=$row;

print(json_encode($output));

mysql_close();

?>

我使用这个连接字符串激活文件:

http://pickupfriend.fulba.com/android_project/query3.php?uname=Test&password=p1&email=ml&disnam=Test&dt=21:12:30 2014-07-07

我在日期的秒和年之间有一个空格,可以吗?运行连接字符串后,我收到此错误:

Parse error: syntax error, unexpected T_STRING in /home/u948577195/public_html/android_project/query3.php on line 13

我做错了什么?如何更正我的连接字符串? 提前谢谢!

【问题讨论】:

  • 顺便说一句,你很容易受到这段代码的 SQL 注入攻击。
  • 如果您在此处发布正确的凭据,也会更改数据库服务器的凭据:)
  • 如果这是在公共互联网上,您将面临极端风险。你需要仔细阅读proper SQL escaping,这样你就不会像这里那样创建任何更严重的SQL injection bugs。此外,mysql_query 不应在新应用程序中使用,它已从 PHP 中删除。 PDO is not hard to learn 是一种更安全的查询方式。 $_GET 数据从不直接进入查询。

标签: php mysql sql


【解决方案1】:

您的链接显示您在$_GET 部分中获取了错误的参数。

因此你必须删除这一行,因为它不是 php

INSERT INTO [USER]
VALUES ('$uName', '$pass', '$mail', '$disName', 0, '$date')

如下更改您的代码。

mysql_connect("mysql.1freehosting.com","u948577195_uname","p7CraCuRAw");

mysql_select_db("u948577195_dbnam");

$uName = $_GET['uname'];
$pass = $_GET['pass'];
$mail = $_GET['mail'];
$disName = $_GET['disName'];
$date = $_GET['date'];

$sql = mysql_query("INSERT INTO User VALUES ('$uName', '$pass', '$mail', '$disName', 0, '$date')");
if (!$sql) {
    $message  = 'Invalid query: ' . mysql_error() . "\n";
    die($message);
}
mysql_close();

如果您的目标是在mysql_close() 之前查看所有内容,那么您不会在查询中获取任何内容

$query = mysql_query('SELECT * FROM User');
if (!$query) {
    $message  = 'Invalid query: ' . mysql_error() . "\n";
    die($message);
}
$output = array();
while ($row = mysql_fetch_assoc($query) !== false) {
   $output[] = $row;
}

echo json_encode($output);

【讨论】:

  • 你没有在这里改变任何东西。
  • 我改了password -> pass, email -> mail, disnam -> disName, dt -> date,再检查问题.
  • 是的,这是代码中的另一个错误。但不是崩溃的。
  • 在 a) 它是 MySQL,现在是 SQL Server 之前仍然需要更多帮助,并且 b) 不会让您的服务器在几秒钟内被完全破解。
  • 然后删除下面的部分。检查编辑,如果您在此处粘贴任何错误。
【解决方案2】:

你预计会发生什么?

INSERT INTO [USER]
VALUES ('$uName', '$pass', '$mail', '$disName', 0, '$date')

那不是 php!您忘记在查询或其他内容中使用它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-12
    • 2019-12-29
    • 2015-05-19
    • 2021-05-15
    • 1970-01-01
    • 2011-11-16
    相关资源
    最近更新 更多