Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
joomla php变量有一个随机变量&引用;数值后面的字符_Php_Mysql_Joomla - Fatal编程技术网

joomla php变量有一个随机变量&引用;数值后面的字符

joomla php变量有一个随机变量&引用;数值后面的字符,php,mysql,joomla,Php,Mysql,Joomla,我有一个由Joomla!提供动力的网站!。该网站有一个自定义组件,我构建该组件以允许事件注册,并且发票编号编码为具有自动递增功能 发票编号的示例类似于DOMAINNAME-00015-00000000 55。请注意,“00015”是事件ID,“00000000 55”是增量。因此,在这张发票之后,下一个数字将是域名-00015-00000000 56,依此类推 最近举办了一个活动,大约有1500人注册。但是,我注意到有一些预订的发票号码生成错误。例如,DOMAINNAME-0015.-00000

我有一个由Joomla!提供动力的网站!。该网站有一个自定义组件,我构建该组件以允许事件注册,并且发票编号编码为具有自动递增功能

发票编号的示例类似于DOMAINNAME-00015-00000000 55。请注意,“00015”是事件ID,“00000000 55”是增量。因此,在这张发票之后,下一个数字将是域名-00015-00000000 56,依此类推

最近举办了一个活动,大约有1500人注册。但是,我注意到有一些预订的发票号码生成错误。例如,DOMAINNAME-0015.-0000000057,因此如果您注意到事件ID是“0015”,而不是“00015”。我检查了访问日志,注意到当从视图中传递事件ID变量时,它实际上传递的是“15”,而不仅仅是“15”

用户需要转到“活动详细信息”页面并单击此链接以预订他们的预订。因此,我怀疑在event details页面上,包含添加到链接的事件ID的变量被呈现为“15”。如果发票号生成错误,则该变量将被呈现为“15”

但现在的问题是为什么?我并没有看到价值不一致的案例,1500个案例中有6个存在这个问题。事件ID应该是从数据库中提取的,它是一个固定值15

有经验的人知道为什么会这样吗

[编辑]

下面是用户将在其中单击以进行首次初始预订的链接的代码。这里的变量“cid”应该是“15”,但从web托管服务器的访问日志中,用户输入的链接将变量“cid”的值设置为“15”。而不是导致发票生成错误的“15”。数组“$post”是使用joomla抓取的!核心函数“JRequest::get();”,我认为这不应该是问题所在

$apply_individual = 'index.php?option='.$post['option'].'&task=default&view=eventregistration&cid='.$post['cid'].'&type=individual';
这是生成发票编号的零件

function generateInvoiceID($event_id) {
    // Get a database object
    $db =& JFactory::getDBO();  
    $query = "SELECT * FROM #__db_name ORDER BY id";
    $db->setQuery($query);
    $results = $db->loadObjectList();

    $order_id = array();

    if(isset($results)) {
        foreach($results as $result) {
            if(!empty($result->invoice_id)) {
                $invoice_event_id = substr($result->invoice_id, 6, -11);
                $check_event_id = str_pad($event_id, 5, 0, STR_PAD_LEFT);
                $get_invoice_number = substr($result->invoice_id, -10);

                if($invoice_event_id == $check_event_id) {
                    //$order_id[] = $result->invoice_id;
                    $order_id[] = $get_invoice_number;
                }
            }
        }

        // get max id
        if(isset($order_id) && !empty($order_id)) {
            $max_id = max($order_id);
            //$max_id = substr($max_id, 12);
            $max_id++;
        } else {
            $max_id = 1;
        }

        $invoice_number = str_pad($max_id, 10, 0, STR_PAD_LEFT);
        $event_id = str_pad($event_id, 5, 0, STR_PAD_LEFT);
        $invoice_id = 'DOMAINNAME-'.$event_id.'-'.$invoice_number;
        $invoice_id = strtoupper($invoice_id);
    }

    return $invoice_id;
}

如您所见,事件id使用php函数“str_pad”转换为5位数字。不过,增量数字工作得很好。我还注意到,如果我在用户将单击的链接中添加“.”,我将生成一个发票号,如“DOMAINNAME-0015.-00000000 58”。但是我不知道为什么一个值例如“15.”会首先被传递到链接中。此问题不会影响所有发票号,但仅影响1500个发票号中的5个。

我认为您也需要包含一些代码片段,例如,如果单位值为15,那么如何填充它以获得00015?我假设没有源代码显示!好像它被锁在二进制文件里或者其他什么东西对不起,丢失了代码样本。我用代码示例更新了问题。我不明白为什么会发生这种事。你是说它有时会发生,但不是一直都会发生吗?你知道怎么做才能让它发生吗?如果它是坏的用户输入,我会先清理输入。。。在未对输入进行消毒的情况下,决不能直接从用户处获取输入。在JForm中,您可以使用validate=“Int”,如果您没有使用JForm,则可以使用JInputFilter Int.@Elin。这种情况并不总是发生。这看起来像是来自URL的随机错误输入,我不确定这是由用户还是由错误生成的HTML(发现很难确认)引起的。我在事件预订之前添加了一个附加检查,以确认事件ID的输入仅包含数字,而不包含任何其他内容(仅0-9)。如果它包含0-9以外的内容,用户将被重定向到一个页面,页面上会显示“您的请求中有错误”。并且不会对该请求进行预订。