【发布时间】:2021-02-15 21:48:29
【问题描述】:
我试图在页面 {"status":1} 上显示,但它给出了错误 500。我的所有代码似乎都在数据库和平台上工作。
它在错误日志中显示此错误:
- [error] 42094#0: *233568 FastCGI sent in stderr: "PHP message: PHP Notice: Undefined index: id in /var/www/.../.../.../.../第 519 行的 classes/pageuser.class.php
- PHP 消息:PHP 致命错误:在 /var/www/.../.../.../.../classes/loan.class.php 中的布尔值上调用成员函数 execute()第 537 行”,同时从上游读取响应标头,客户端:162...,服务器:interno.neeec.pt,请求:“GET /loans/tickets/pay HTTP/1.1”,上游:“fastcgi://unix:/ var/lib/php5-fpm/web20.sock:",主机:"interno.neeec.pt"
在 pageuser.class.php 上:
case "loans/tickets/pay":
$this->template = "no_render";
$response = null;
if (Loan::payTicket($_POST["id"], $user->getID())) {
$response = ["status" => 1];
} else {
$response = ["status" => 0, "err" => "Erro ao atualizar base de dados"];
}
die(json_encode($response));
return;
在loan.class.php上:
public static function payTicket($ticket_id, $user_id)
{
$ticket_value = Loan::getTicketValue($ticket_id);
$database = new Database();
$connection = $database->getConnection();
$stmt = $connection->prepare("UPDATE loan_tickets SET `paid`=1,date_of_payment=CURRENT_TIMESTAMP WHERE id=?");
$stmt->bind_param('i', $ticket_id);
if ($stmt->execute()) {
$stmt = $connection->prepare("UPDATE `c3interno`.`payment_methods` SET `expected_value` = `expected_value` + $ticket_value WHERE `id` = 6");
if($stmt->execute())
{
$stmt = $connection->prepare("INSERT INTO `c3interno`.`payment_methods_logs` (`payment_method`,`type`,`value`,`user_id`,`date`,`reason`) VALUES (6,5,$ticket_value,$user_id,CURRENT_TIMESTAMP,'Delay')");
if($stmt->execute())
{
$stmt->close();
return true;
}
$stmt->close();
return false;
}
$stmt->close();
return false;
}
$stmt->close();
return false;
}
【问题讨论】:
-
“我的所有代码都在工作” - 显然有些东西不是。您查看过服务器错误日志吗?
-
我该怎么做?
-
我不知道。每个系统都是不同的。在 Linux 服务器上,它通常位于 /var/log/ 中的某个位置,但不同的 linux 风格有不同的默认值,并且您的 Apache 配置可能再次将它放在不同的位置。对于 Windows,这将取决于您如何配置 IIS。对于托管系统,您可能无法访问原始文件,但副本将放置在您的用户区某处。坦率地说,作为一名开发人员,这是您应该对您的系统了解的内容。
-
我通过 ftp 错误日志访问了它
-
警告:使用
mysqli时,您应该使用parameterized queries 和bind_param将任何数据添加到您的查询中。 请勿使用字符串插值或连接来完成此操作,因为您创建了严重的SQL injection bug。 切勿将$_POST、$_GET或任何类型的数据直接放入查询中,如果有人试图利用您的错误,这可能会非常有害。