Php mysql if while and else造成麻烦

Php mysql if while and else造成麻烦,php,html,mysql,database,Php,Html,Mysql,Database,我需要显示3种不同类型发票的最后一个发票号,如果已经有发票,系统只需向发票号添加+1,或者如果有第一个发票,则只需添加000000000 1作为第一个发票号 <option value="boleta" data-price=" <?php $boletas=mysqli_query($datacenter, " SELECT * FROM ventas WHERE documento = 'boleta' ORDER BY id DESC LIMIT 1"); whil

我需要显示3种不同类型发票的最后一个发票号,如果已经有发票,系统只需向发票号添加+1,或者如果有第一个发票,则只需添加000000000 1作为第一个发票号

    <option value="boleta" data-price="
<?php $boletas=mysqli_query($datacenter, "
SELECT * FROM ventas 
WHERE documento = 'boleta' 
ORDER BY id DESC LIMIT 1");
while($boleta=mysqli_fetch_assoc($boletas)) 
    if(mysqli_num_rows($boletas) > 0) { echo
        str_pad($boleta['folio']+1, 15, "0", STR_PAD_LEFT);
    }
 else {
    echo "000000000000001";
}?>">boleta</option>
    <option value="factura" data-price="
<?php $facturas=mysqli_query($datacenter, "
SELECT * FROM ventas WHERE documento = 'factura' 
ORDER BY id DESC LIMIT 1");
while($factura=mysqli_fetch_assoc($facturas)) 
    if(mysqli_num_rows($facturas) > 0) { echo
        str_pad($factura['folio']+1, 15, "0", STR_PAD_LEFT);
    }
 else {
    echo "000000000000001";
}?>">boleta</option>
    <option value="nota" data-price="
<?php $notas=mysqli_query($datacenter, "
SELECT * FROM ventas WHERE documento = 'nota' 
ORDER BY id DESC LIMIT 1");
while($nota=mysqli_fetch_assoc($notas)) 
    if(mysqli_num_rows($notas) > 0) { echo
        str_pad($nota['folio']+1, 15, "0", STR_PAD_LEFT);
    }
 else {
    echo "000000000000001";
}?>">boleta</option>
尝试更改此选项:

$boletas=mysqli_query($datacenter, "
SELECT * FROM ventas 
WHERE documento = 'boleta' 
ORDER BY id DESC LIMIT 1");
while($boleta=mysqli_fetch_assoc($boletas)) 
    if(mysqli_num_rows($boletas) > 0) { echo
        str_pad($boleta['folio']+1, 15, "0", STR_PAD_LEFT);
    }
 else {
    echo "000000000000001";
}
致:

这更具可读性,包括一些错误检查,如果没有结果,将显示所需的发票号
00000000000000 1


顺便说一句,我不认为使用一个查询对您的问题来说是切实可行的,因为您使用的不同查询的性质不同。无论如何,它最终都需要3个子查询。

我强烈建议您不要像这样编写代码,难以阅读、维护、调试并启用错误报告和检查日志,这将告诉您很多地方需要查找。并遵循史密斯的建议,更好地格式化代码,使其更易于阅读。这反过来使调试更容易。我还建议您考虑使用单个查询,而不是3个查询。最后,您的else仍然在
while
循环中,因此如果没有行,则该代码块将永远不会执行,任何建议示例Qirel请?
错误报告(E_ALL);ini设置(“显示错误”,1)下面已经给了您一个答案;你没看到吗?嗨,尼卡莱尼卡,这有用吗?
$sql = "SELECT * FROM ventas WHERE documento = 'boleta' ORDER BY id DESC LIMIT 1";
if ($boletas = mysqli_query($datacenter, $sql)) {
    if ($boleta = mysqli_fetch_assoc($boletas)) {
        echo str_pad($boleta['folio']+1, 15, "0", STR_PAD_LEFT);
    }
    else {
        echo "000000000000001";
    }
}
else {
    echo "Query failed for boletas!";
}