【问题标题】:HTTP POST data to php and mysql [closed]HTTP POST 数据到 php 和 mysql [关闭]
【发布时间】:2014-07-10 17:12:38
【问题描述】:

我有一个网络服务器,它正在从日志收集服务器收集传入的 HTTP POST 消息。我正在尝试使用 php 脚本收集传入的帖子数据,然后将其下载到 mysql 中。我对php和mysql的经验有限。

这是我一直在编写的脚本,但我似乎无法让它工作:

<?php
ob_start();
print_r($_REQUEST);
$data = ob_get_contents();
ob_end_clean();

$mysqli = new mysqli("localhost", "root", "XXXX", "XXXX");
if ($mysqli->connect_errno) {
echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}
mysqli_query("INSERT INTO `XXXX` VALUES ('$data')");
Print "Your information has been successfully added to the database.";
?>

我不确定我在哪里失败了,如果有任何帮助,我将不胜感激!如果您想知道的话,我确实用 XXXX 替换了我的网络服务器的密码和数据库名称。

我能够使用此脚本成功登录 mysql,但我使用 PHP 收集的 POST 数据似乎工作不正常。

谢谢

【问题讨论】:

  • 尝试打印出您的 SQL 语句,看看它是否有效。我的猜测是 $data 的格式不适合在 SQL 插入中插入值列表。因为使用 ob_start();和 ob_get_contents();将帖子数据转换为值列表是愚蠢的。
  • 使用mysqli 时,您应该使用参数化查询和bind_param 将用户数据添加到您的查询中。 请勿使用字符串插值来完成此操作,因为您将创建严重的SQL injection bugs

标签: php mysql function http post


【解决方案1】:
ob_start();
print_r($_REQUEST);
$data = ob_get_contents();
ob_end_clean();

你为什么要这样做?您将得到的只是$_POST 数组中的任何内容的字符串,它很可能与您需要的列/值不匹配。

  1. XXXX 应该是数据库表名,而不是数据库名
  2. 您的插入语句有点时髦。阅读manual。至少,指定列名:

    插入tablenamecol1col2)值(“value1”,“value2”)

  3. $_POST 中提取您期望的值,如下所示:$_POST['keyname'],您可以将 keyname 替换为您自己的。

【讨论】:

    猜你喜欢
    • 2012-08-17
    • 2016-01-03
    • 1970-01-01
    • 2017-05-06
    • 2012-11-29
    • 1970-01-01
    • 2013-03-14
    • 1970-01-01
    • 2014-03-15
    相关资源
    最近更新 更多