【问题标题】:Error 500 when submitting PHP form to database将 PHP 表单提交到数据库时出现错误 500
【发布时间】:2013-03-25 11:39:23
【问题描述】:

我使用 ProgreSQL 和 Heroku 为我的 Facebook Web 应用程序创建了一个 SQL 数据库,以下代码是收集数据的表单

</style>
  <div class="container">
  <form action="insert.php" method="post" onSubmit="window.location.reload()">
  Cover URL: <input type="text" name="Cover URL" id="coverURL"><br><br>
  Title:   <input type="text" name="Title" id="title"><br><br>
  Author:      <input type="text" name="Author" id="author"><br><br>
  Genre:<br> <select name="genre" id="genre">
  <option>Adventure & Action</option>
  <option>Anthologies</option>
  <option>Classics</option>
  <option>Sport</option>
  <option>War</option>
//More options in actual code, just deleted some to save space.          
    </select><br><br>
  Total Pages: <input type="number" name="TotalPages" id="totalpages"><br><br>
  Curent Page: <input type="number" name="CurrentPage" id="currentpage"><br><br>
  <input type="submit"> </form><br><br></div>

  </center>
</section>

然后调用insert.php

<?php
$dbconn = pg_connect("host=ec2-54-243-190-226.compute-1.amazonaws.com port=5432    dbname=d6fh4g6l0l6gvb user=[REMOVED] password=[REMOVED] sslmode=require options='--client_encoding=UTF8'") 
or     die('Could not connect: ' . pg_last_error());


pg_query("INSERT INTO books(coverURL, title, author, genre, currentPg, totalPg)     VALUES('"$_POST["coverURL"]"','"$_POST["title"]"','"$_POST["author"]"','"$_POST["genre"]"',    '"$_POST["currentpages"]"','"$_POST["totalpages"]"')");


pg_close($dbconn);
?>

问题是我在点击提交时收到错误 500,在网上查看大多数解决方案后说 PHP 中肯定有错误,但由于我没有经验(边走边学)我不知道我是什么'做错了。

如有需要,我可以提供更多信息。提前致谢!

【问题讨论】:

  • 你的服务器日志说什么?
  • 您的数据库是否已连接...第一次检查
  • @thumbernirmal 我该如何检查?抱歉,如果这是一个愚蠢的问题,我对此很陌生。
  • 签入 if 条件 if($con){ echo "connet"; }else{回显“断开”; } 并检查输出
  • 尝试将代码缩小到 这行得通吗?

标签: php sql forms postgresql heroku


【解决方案1】:

试试这个:

请确保 html 输入的 names 匹配 $_POST 值。

mysqli_query($con,"INSERT INTO books(coverURL, title, author, genre, currentPg, totalPg) VALUES('".$_POST["coverURL"]."','".$_POST["title"]."','".$_POST["author"]."','".$_POST["genre"]."','".$_POST["currentpages"]."','".$_POST["totalpages"]."')");

编辑:使用此语句------^

而不是:

'$_POST[author]'

最好这样做:

'".$_POST["author"]."'

您是否知道$sql 实际上并没有被插入到数据库中?

【讨论】:

  • 谢谢,我已按照建议添加了额外的引号符号。我不知道 $sql 没有被插入,我从这里得到了大部分代码:w3schools.com/php/php_mysql_insert.asp我错过了什么?
  • 不用担心!以后尽量不要使用 w3schools :) w3fools 我会更新我对你需要做的事情的回答
  • 好的,我已经更改了一些内容(在上面进行了编辑)并确保所有 "' 都是正确的。我现在在日志中收到此错误:PHP Parse error: syntax error, unexpected T_VARIABLE in /app/www/insert.php on line 6, referer:[address]/new.php
  • 如果您的问题中的代码是最新的,则您有重复的;
  • 删除了,但它似乎不是问题,仍然从日志中得到同样的错误。
【解决方案2】:

error 500 is a "internal server error"。这基本上意味着服务器端发生了故障,它只是一个非常通用的错误消息。基本上它可以是一切,它不仅限于您的脚本。可能是 Apache 模块错误或任何其他原因导致您的 WebServer 软件拒绝处理请求而不会出现任何致命故障。

如果它只发生在相同的操作上(例如提交表单或调用特殊页面),很可能是脚本错误导致错误 500。

您应该查看您的日志文件,尤其是。 apache错误日志。它应该包含有关出现问题的更多信息。

在您的情况下,您的服务器可能不允许连接到外部数据库服务器,但这只是一个猜测。

【讨论】:

  • 稍微编辑代码后,我检查了日志,我得到了这个:PHP Parse error: syntax error, unexpected '"', expecting T_STRING or T_VARIABLE or T_NUM_STRING in /app/www/insert.php on line 7, referer: [address]/new.php 可能是什么原因造成的?
  • 更新:将 $_POST["coverURL"] 等更改为 $_POST[coverURL],现在日志中只有很多 `GET \favicon.ico HTTP/1.1" 304。仍然收到错误 500。
  • 很好,这意味着某处存在语法错误。第 7 行到底是什么?
  • $_POST[coverURL] 是错误的。它是一个关联数组,它必须在字符串中:$_POST["coverURL"]$_POST['coverURL']
  • 哎呀!好的,我读到了 " 符号,第 7 行是:VALUES('$_POST["coverURL"]','$_POST["title"]','$_POST["author"]','$_POST["genre"]','$_POST["currentpages"]','$_POST["totalpages"]')");
【解决方案3】:

问题在于,您实际上是在将事物“混合”在一起。您的代码使用 pg_connect 连接并使用 mysqli 进行查询。仅使用 Postgree 函数连接到数据库阅读手册http://www.php.net/manual/en/ref.pgsql.php

我会做类似的事情:(虽然我还没有测试过)

 <?php
$dbconn = pg_connect("host=ec2-54-243-190-226.compute-1.amazonaws.com port=5432    dbname=d6fh4g6l0l6gvb user=[REMOVED] password=[REMOVED] sslmode=require options='--client_encoding=UTF8'") or die('Could not connect: ' . pg_last_error());;

$coverUrl = $_POST["coverURL"];
$title = $_POST["title"];
$author = $_POST["author"];
$genre = $_POST["genre"];
$currentPages = $_POST["currentpages"];
$totalPages = $_POST["totalpages"];
pg_query_params($dbconn, "INSERT INTO books(coverURL, title, author, genre, currentPg, totalPg) VALUES($1,$2,$3,$4,$5,$6)", array($coverUrl, $title, $author, $genre, $currentPages, $totalPages));

pg_close($dbconn);
?>

【讨论】:

  • 刚刚将 mysqli_query 替换为 pg_querymysqli_close 替换为 pg_close 但我仍然收到错误 500。
  • 我提供了一个例子。我希望它会有所帮助。我不是 postgree 专家,实际上我从未使用过它,但我认为代码会起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-21
  • 2018-09-06
相关资源
最近更新 更多