注意:此问题似乎与在运行El Capitan的Macbook Pro上运行 MAMP / XAMPP 有关。相同的DB /源文件在Windows机器上完美运行。
注意2:这不是生产应用程序。请不要批评该代码,是否容易受伤。
注3:原始POST数据:
file_get_contents("php://input"); = author=1&title=1&category=1&year=1&isbn=1
print_r($_POST); = Array()
来源:学习PHP,MySQL和Javascript第4版。这是示例10-6。当我提交表单以添加额外的行时,实际上没有任何内容发布到数据库。
我在另一本书的另一个例子中遇到了与查询运行器完全相同的问题。 $ _POST数组为空,但原始发布数据显示带有正确信息的字符串。 $ _GET确实有效。这似乎仅限于此计算机上的 MAMP / XAMPP 。我无法想象我的生活。大多数有类似问题的人建议验证php.ini文件中的max post size变量设置得太低。默认值为128M,对于此脚本应该完全过度。
有没有人有任何建议,似乎与配置相关。
<?php // sqltest.php
/**
* Created by PhpStorm.
* User: kg3
* Date: 12/27/15
* Time: 12:34 AM
*/
require_once 'connect.php';
if (isset($_POST['delete']) && isset($_POST['isbn']))
{
$isbn = get_post($conn, 'isbn');
$query = "DELETE FROM classics WHERE isbn='$isbn'";
$result = $conn->query($query);
if (!$result) echo "DELETE failed: $query<br>" .
$conn->error . "<br><br>";
}
if (isset($_POST['author']) &&
isset($_POST['title']) &&
isset($_POST['category']) &&
isset($_POST['year']) &&
isset($_POST['isbn']))
{
$author = get_post($conn, 'author');
$title = get_post($conn, 'title');
$category = get_post($conn, 'category');
$year = get_post($conn, 'year');
$isbn = get_post($conn, 'isbn');
$query = "INSERT INTO classics VALUES" .
"('$author', '$title', '$category', '$year', '$isbn')";
$result = $conn->query($query);
if (!$result) echo "INSERT failed: $query<br>" .
$conn->error . "<br><br>";
}
echo <<<_END
<form action="sqltest.php" method="post"><pre>
Author <input type="text" name="author">
Title <input type="text" name="title">
Category <input type="text" name="category">
Year <input type="text" name="year">
ISBN <input type="text" name="isbn">
<input type="submit" value="ADD RECORD">
</pre></form>
_END;
$query = "SELECT * FROM classics";
$result = $conn->query($query);
if (!$result) die ("Database access failed: " . $conn->error);
$rows = $result->num_rows;
for ($j = 0 ; $j < $rows ; ++$j)
{
$result->data_seek($j);
$row = $result->fetch_array(MYSQLI_NUM);
echo <<<_END
<pre>
Author $row[0]
Title $row[1]
Category $row[2]
Year $row[3]
ISBN $row[4]
</pre>
<form action="sqltest.php" method="post">
<input type="hidden" name="delete" value="yes">
<input type="hidden" name="isbn" value="$row[4]">
<input type="submit" value="DELETE RECORD"></form>
_END;
}
$result->close();
$conn->close();
function get_post($conn, $var)
{
return $conn->real_escape_string($_POST[$var]);
}
答案 0 :(得分:0)
想出来。
它最终不是Apache,PHP版本,我的代码或我之前提到的任何其他内容。我使用PHPStorm IDE,并在之前使用MAMP进行了设置。该安装的端口与我当前的安装不同,我没有意识到。一些网络流量通过该端口,但$ _POST不是。在更正URL中的端口并更新PHPStorm后,一切正常。 2天才弄清楚...... DOH