【问题标题】:Use the same variable for two PHP functions对两个 PHP 函数使用相同的变量
【发布时间】:2018-01-01 03:04:05
【问题描述】:
<?php require_once 'config.php';

// FUNCTION 1 BEGINS
        function saveInvoice( array $data){         if( !empty( $data ) ){              global $con;            $count = 0;             if( isset($data['data'] )){
                        foreach ($data['data'] as $value) {
                            if(!empty($value['length'] ))$count++;
                        }           }           if($count == 0)throw new Exception( "Please add atleast one item to warehouse form." );
         if( !empty( $data)){
                        $codigo1 = mysqli_real_escape_string( $con, trim( $data['codigo1'] ) );
                        $shipper = mysqli_real_escape_string( $con, trim( $data['shipper'] ) );
                        $codigo2 = mysqli_real_escape_string( $con, trim( $data['codigo2'] ) );
                        $consignee = mysqli_real_escape_string( $con, trim( $data['consignee'] ) );
                        $carrier = mysqli_real_escape_string( $con, trim( $data['carrier'] ) );
                        $supplier = mysqli_real_escape_string( $con, trim( $data['supplier'] ) );
                        $tracking = mysqli_real_escape_string( $con, trim( $data['tracking'] ) );
                        $vlb_total = mysqli_real_escape_string( $con, trim( $data['airtotal'] ) );
                        $ft3_total = mysqli_real_escape_string( $con, trim( $data['oceantotal'] ) );
                        $weight_total = mysqli_real_escape_string( $con, trim( $data['totalweight'] ) );
                        $method = mysqli_real_escape_string( $con, trim( $data['method'] ) );
                        $user = mysqli_real_escape_string( $con, trim( $data['user'] ) );
                        $office = mysqli_real_escape_string( $con, trim( $data['office'] ) );
                        $notes = mysqli_real_escape_string( $con, trim( $data['notes'] ) );
                        $total_air_usd = mysqli_real_escape_string( $con, trim( $data['totalairusd'] ) );
                        $total_ocean_usd = mysqli_real_escape_string( $con, trim( $data['totaloceanusd'] ) );

                        $warehouse = mysqli_real_escape_string( $con, trim( $data['warehouse'] ) );

                        if(empty($warehouse)){
                            $uuid = uniqid();
                        $query = "INSERT INTO wreceipt (`warehouse`, `codigo1`, `shipper`, `codigo2`, `consignee`, `carrier`, `supplier`, `tracking`, `vlb_total`, `ft3_total`, `weight_total`, `method`, `user`, `office`, `notes`, `total_air_usd`, `total_ocean_usd`, `created`, `uuid`) VALUES ('', '$codigo1', '$shipper', '$codigo2', '$consignee', '$carrier', '$supplier', '$tracking', '$vlb_total', '$ft3_total', '$weight_total', '$method', '$user', '$office', '$notes', '$total_air_usd', '$total_ocean_usd', NOW() + INTERVAL 1 HOUR, '$uuid')";
                        }else{
                            throw new Exception( "Please check, some of the required fields missing" );
                        }
                        if(!mysqli_query($con, $query)){
                            throw new Exception(  mysqli_error($con) );
                        }else{
                        if(empty($warehouse))$warehouse = mysqli_insert_id($con);
                        }

                        if( isset( $data['data']) && !empty( $data['data'] )){
                            saveInvoiceDetail( $data['data'], $warehouse );
                        }
                        return [
                            'success' => true,
                            'uuid' => $uuid,
                            'message' => 'Warehouse Saved Successfully.',
                            'warehouse' => $warehouse
                        ];          }else{
                        throw new Exception( "Please check, some of the required fields missing" );             }       } else{             throw new Exception( "Please check, some of the required fields missing" );         }   }
// FUNCTION 1 ENDS

// FUNCTION 2 BEGINS       
        function saveInvoiceDetail(array $wreceipt_items, $warehouse = ''){     global $con;

            foreach ($wreceipt_items as $wreceipt_item){
                $desc = mysqli_real_escape_string( $con, trim( $wreceipt_item['desc'] ) );
                $length = mysqli_real_escape_string( $con, trim( $wreceipt_item['length'] ) );
                $width = mysqli_real_escape_string( $con, trim( $wreceipt_item['width'] ) );
                $height = mysqli_real_escape_string( $con, trim( $wreceipt_item['height'] ) );
                $weight = mysqli_real_escape_string( $con, trim( $wreceipt_item['weight'] ) );
                $quantity = mysqli_real_escape_string( $con, trim( $wreceipt_item['quantity'] ) );
                $volumeweight = mysqli_real_escape_string( $con, trim( $wreceipt_item['volumeweight'] ) );
                $volume = mysqli_real_escape_string( $con, trim( $wreceipt_item['volume'] ) );
                $weightrow = mysqli_real_escape_string( $con, trim( $wreceipt_item['weightrow'] ) );

                $query = "INSERT INTO wreceipt_items (`id`, `warehouse`, `desc`, `length`, `width`, `height`, `weight`, `quantity`, `volumeweight`, `volume`, `weightrow`)
                        VALUES (NULL, '$warehouse', '$desc', '$length', '$width', '$height', '$weight', '$quantity', '$volumeweight', '$volume', '$weightrow' )";
                mysqli_query($con, $query);
            } }

        function getInvoices($warehouse){
                global $con;
                $data = [];
                $query = "SELECT * FROM wreceipt WHERE warehouse = '$warehouse'";
                if ( $result = mysqli_query($con, $query) ){
                    while($row = mysqli_fetch_assoc($result)) {
                        array_push($data, $row);
                    }
                }    return $data; } ?>
// FUNCTION 2 ENDS

我有 2 个功能:一个是寄存器,另一个是显示数据。我对第二个感兴趣,因为它不采用 $warehouse 变量(第一个函数)的值来在第二个函数的查询中使用它正是在这里: $query = "SELECT * FROM wreceipt WHERE 仓库 = $warehouse

有人知道为什么会这样吗?

PD: I use this for show the (function 2) data:

<?php 
$invoices = getInvoices($warehouse);

if( !empty( $invoices ) ){ 
foreach ($invoices as $value) {
$value['warehouse'];
}
}
?>

【问题讨论】:

    标签: php arrays function mysqli global-variables


    【解决方案1】:

    这可能是变量范围的问题。我看不到您的主脚本正在输入什么变量 saveInvoice(),但是如果您传递一个名为 $data 的变量,其中包含 codedatawarehouse 等键,那么同一个数组应该用于主脚本中的getinvoices() 而不是$invoices = getInvoices($warehouse);

    再次关于函数内部的变量范围...

    function saveInvoice( array $data){ 内部...getInvoices($warehouse); 可以使用,因为$warehouse 是一个声明变量,在函数内部有一个值。

    saveInvoice() 之外,变量$warehouse 不存在(除非您已在未发布到此问题的代码中将其声明为全局范围)。

    出于这个原因,我认为解决方案是(在您发布的第二个代码块中)调用getInvoices() 类似这样的东西:$invoices = getInvoices($data['warehouse']);



    此外,我建议您不要使用 mysqli 转义您将返回的值。我的建议是在 saveInvoiceDetail() 和所有其他数据库查询函数中使用 mysqli 准备好的语句。

    最后,仔细查看包含success 的数组。即使没有成功,它也会返回success=&gt;true。这部分需要更多的开发。

    【讨论】:

    • 感谢您的回复,我在退货中添加了“'warehouse' => $warehouse”,但仍然无法使用,我无法获得“仓库”的价值。我只希望这个值在其他页面中显示为“echo”。提前致谢
    • @IrvıngNgr' 您应该在整个函数中编写一些“检查点”(回声),以查看该值是否在您期望的位置...例如 $data['warehouse'] 并重新访问您的 if 流程-声明。
    • @IrvıngNgr' 我之前可能误读了您的问题。请在整个代码中显示生成数组的 var_export() 检查点。在$invoices = getInvoices($warehouse); 之后var_export($invoices); 是什么?
    • 另外,你不需要在 foreach 循环之前写if(!empty($invoices)){。如果循环为空,则循环根本不会运行,getInvoices() 默认返回空数组的值——因此永远不会出现错误/警告。
    • 目前还没有足够的代码来帮助您。我不知道您的 getInvoices($warehouse); 呼叫是否收到有效的 $warehouse 值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多