Php 为什么我的数组值在输入if语句时不显示?
我将多个查询的值带到前端,并使用一个数组来实现。当我回显我的Php 为什么我的数组值在输入if语句时不显示?,php,Php,我将多个查询的值带到前端,并使用一个数组来实现。当我回显我的$hold['POAmount']值时在我的if语句之前它按预期返回253{“Sum”:10,“POAmount”:-10},但不要将其与我想要的输出混淆。但是在输入if语句后,返回页面的响应是{“Sum”:10,“POAmount”:-10}。我想也许使用fetch\u assoc()overfetch\u array()可以做些什么,但这没有什么作用。我得到的是: <?php include '../../inc/dbinfo
$hold['POAmount']值时代码>在我的if语句之前它按预期返回253{“Sum”:10,“POAmount”:-10}
,但不要将其与我想要的输出混淆。但是在输入if语句后,返回页面的响应是{“Sum”:10,“POAmount”:-10}
。我想也许使用fetch\u assoc()
overfetch\u array()
可以做些什么,但这没有什么作用。我得到的是:
<?php
include '../../inc/dbinfo.inc';
ini_set("log_errors", 1);
ini_set("error_log", "/tmp/php-error.log");
error_log( "################################################# FT-SUM-INVOICES.PHP #################################################" );
$inv = $_POST['inv'];
$status = $_POST['stat'];
//Get PO # From invoice id
$getPO = "SELECT VendorPOID1, VdrInvoiceAmount FROM tblVendorInvoices WHERE VENDORINVOICEID =?";
$exgetPO = $conn->prepare($getPO);
$exgetPO->bind_param("i", $inv);
$exgetPO->execute();
$obj = $exgetPO->get_result();
$hold = $obj->fetch_assoc();
$po = $hold['VendorPOID1'];
$currentInAmount = $hold['VdrInvoiceAmount'];
$cn = 3; //paid status
$getPOAmount = "SELECT POAmount FROM tblVendorPOs WHERE VENDORPOID = ?";
$poAmount = $conn->prepare($getPOAmount);
$poAmount->bind_param("i",$po);
$poAmount->execute();
$obj3 = $poAmount->get_result();
$hold = $obj3->fetch_assoc(); //Total PO Amount
if($status == 3){
echo json_encode($hold['POAmount']);
//Get Sum of invoices on po + current invoice
$qr = "SELECT SUM(VdrInvoiceAmount) AS Sum FROM tblVendorInvoices WHERE VENDORPOID1 = ? AND VdrInvoiceStatusID = ?";
$getSum = $conn->prepare($qr);
$getSum->bind_param("ii", $po, $cn);
$getSum->execute();
$obj2 = $getSum->get_result();
$hold = $obj2->fetch_assoc();
$hold['Sum'] += $currentInAmount;
$hold['POAmount'] -= $hold['Sum']; //remaining balance
if($hold['Sum'] == NULL){
$hold['Sum'] = 0;
}
echo json_encode($hold);
}else{
//Get Sum of invoices on po
$qr = "SELECT SUM(VdrInvoiceAmount) AS Sum FROM tblVendorInvoices WHERE VENDORPOID1 = ? AND VdrInvoiceStatusID = ?";
$getSum = $conn->prepare($qr);
$getSum->bind_param("ii", $po, $cn);
$getSum->execute();
$obj2 = $getSum->get_result();
$hold = $obj2->fetch_assoc();
if($hold['Sum'] == NULL){
$hold['Sum'] = 0;
}
$hold['POAmount'] -= $hold['Sum'];
echo json_encode($hold);
}
?>
我上面描述的if语句是if($status==3){
我没有从网页或PHP错误日志中收到任何错误
我的问题摘要:
$hold['POAmount']
在我从中减去sum时被认为是null
。因此它被称为-$hold['sum']
。然而它一开始就不应该是null。它在输入if语句时变为null
当前输出:{“Sum”:9,“POAmount”:-9}
所需的输出:{“Sum”:9,“POAmount”:243}
这应该是可行的(尚未测试)。我所做的更改是,我已将if语句中SELECT查询的结果分配给另一个名为$hold2的变量,以便不会覆盖$hold中的$hold['POAmount']值
然后,我将$hold变量中的数组(它在if语句之前保存SELECT查询的结果)与$hold2中的数组(它在if语句中保存SELECT查询的结果)合并,生成了一个包含POAmount和Sum键的数组
如果这不起作用,请告诉我您会遇到什么错误,我很乐意提供帮助。:)
在if之前,$hold保存第二个select查询的结果,在if内部,您再次将第三个select查询的结果分配给$hold,因此我认为该值在那里丢失。请尝试重命名存储第三个select查询结果的变量(if内部的变量)输入$hold2或其他内容,看看是否有帮助。回答很好,谢谢你的帮助。我不知道数组合并是一个函数。
<?php
include '../../inc/dbinfo.inc';
ini_set("log_errors", 1);
ini_set("error_log", "/tmp/php-error.log");
error_log( "################################################# FT-SUM-INVOICES.PHP #################################################" );
$inv = $_POST['inv'];
$status = $_POST['stat'];
//Get PO # From invoice id
$getPO = "SELECT VendorPOID1, VdrInvoiceAmount FROM tblVendorInvoices WHERE VENDORINVOICEID =?";
$exgetPO = $conn->prepare($getPO);
$exgetPO->bind_param("i", $inv);
$exgetPO->execute();
$obj = $exgetPO->get_result();
$hold = $obj->fetch_assoc();
$po = $hold['VendorPOID1'];
$currentInAmount = $hold['VdrInvoiceAmount'];
$cn = 3; //paid status
$getPOAmount = "SELECT POAmount FROM tblVendorPOs WHERE VENDORPOID = ?";
$poAmount = $conn->prepare($getPOAmount);
$poAmount->bind_param("i",$po);
$poAmount->execute();
$obj3 = $poAmount->get_result();
$hold = $obj3->fetch_assoc(); //Total PO Amount
if($status == 3){
echo json_encode($hold['POAmount']);
//Get Sum of invoices on po + current invoice
$qr = "SELECT SUM(VdrInvoiceAmount) AS Sum FROM tblVendorInvoices WHERE VENDORPOID1 = ? AND VdrInvoiceStatusID = ?";
$getSum = $conn->prepare($qr);
$getSum->bind_param("ii", $po, $cn);
$getSum->execute();
$obj2 = $getSum->get_result();
$hold2 = $obj2->fetch_assoc();
$hold = array_merge($hold, $hold2);
$hold['Sum'] += $currentInAmount;
$hold['POAmount'] -= $hold['Sum']; //remaining balance
if($hold['Sum'] == NULL){
$hold['Sum'] = 0;
}
echo json_encode($hold);
}else{
//Get Sum of invoices on po
$qr = "SELECT SUM(VdrInvoiceAmount) AS Sum FROM tblVendorInvoices WHERE VENDORPOID1 = ? AND VdrInvoiceStatusID = ?";
$getSum = $conn->prepare($qr);
$getSum->bind_param("ii", $po, $cn);
$getSum->execute();
$obj2 = $getSum->get_result();
$hold2 = $obj2->fetch_assoc();
$hold = array_merge($hold, $hold2);
if($hold['Sum'] == NULL){
$hold['Sum'] = 0;
}
$hold['POAmount'] -= $hold['Sum'];
echo json_encode($hold);
}
?>