有一个变量起到计数的作用,记录重复n次。假设计数的起始值为001,当n=10时,计数变为002,依次类推。
并将计数的变量值insert into到数据库中。现在的问题是我的计数重复的数值n是通过mysql_num_rows求得的,有何方法能将变化的计数值insert into到数据库中。贴出部分代码:$packageno = $_POST['description'].date('ymd').'001';
$sql = "INSERT INTO  `".$t."` (`username`,`packageno`,`lotno`,`description`,`barcode`,`date`)";
$sql .= "VALUES ('".$_SESSION['barcode_Account']."','".$packageno."','".$lotno."','".$_POST['description']."','".$_POST['barcode']."','".$date."')";
// echo $sql;
if($_POST['barcode'] == "")
{
echo "<Script language='JavaScript'> alert('请确保数据不为空!');</Script>";
echo "<script>location.href='addtest.php'</script>";

}
else
{
$result = mysql_query($sql);

$sql2 = "SELECT * FROM `barcode_2d` where 1";
// echo $sql2;
$result2 = mysql_query($sql2);
$num_rows = mysql_num_rows($result2);
以上代码当如何修改?

解决方案 »

  1.   

    凭感觉这不是什么难题,但是你的描述不太清晰,看得云里雾里的。
    最好在代码中加以注释,计数值好像没有保存到单独的变量,而是拼接到$packageno字符串末尾了吧?
      

  2.   


    这么说吧,重复N次,但是这个N只能通过mysql_num_rows函数求得。然后计数变量自加1,如初始001,变成002,然后insert into 写入数据库。我就是这个过程没弄明白。
      

  3.   

    举个例子吧,当n为1-16时,计数变量值为001。当n为17-32时,计数变量值为002。当n为33-48时,计数变量值为003。
      

  4.   

    继续云里雾里。。不知道是不是这个意思:
    $sql2 = "SELECT * FROM `barcode_2d` where 1";
    $result2 = mysql_query($sql2);
    $num_rows = mysql_num_rows($result2);$packageno = $_POST['description'].date('ymd').str_pad(ceil($num_rows / $n), 3, '0');
    $sql = "INSERT INTO  `".$t."` (`username`,`packageno`,`lotno`,`description`,`barcode`,`date`)";
    $sql .= "VALUES ('".$_SESSION['barcode_Account']."','".$packageno."','".$lotno."','".$_POST['description']."','".$_POST['barcode']."','".$date."')";
    //..
      

  5.   

    foreach($vs as $v) {
    // 判断数据库获取00n
    // 插入获取的00n
    }
    // 修改为
    $n = 1;
    $c = 1;
    foreach($vs as $v) {
    if($c % 16 == 0) {
    $n++;
    }
    if(插入成功) {
    $c++;
    }
    // 插入00n
    }
      

  6.   

    通过你的描述,只拿你的n来计算$n=1234;
    $m = hexdec(substr(dechex($n),0,strlen(dechex($n))-1));
    echo str_repeat('0',3-strlen($m)).$m;
      

  7.   

    不好意思上面错了$n=123;
    $m = hexdec(substr(dechex($n-1),0,strlen(dechex($n-1))-1))+1;
    echo str_repeat('0',3-strlen($m)).$m;
      

  8.   


    所以用ceil()函数处理了,只有在$sql2查询结果集行数为0时才是从000起始的,其它情况都是001起始。如果有可能出现0行的结果集,可以先判断一下:
    $packageno = $_POST['description'].date('ymd');
    $num_rows > 0 ? $packagno .= str_pad(ceil($num_rows / $n), 3, '0') : $packagno .= '001';
      

  9.   


    在初始的时候,值没有问题,但是n>16时,还是没有变化啊。都是001
      

  10.   

    //漏掉个参数
    $packageno = $_POST['description'].date('ymd');
    $num_rows > 0 ? $packagno .= str_pad(ceil($num_rows / $n), 3, '0', STR_PAD_LEFT) : $packagno .= '001';
      

  11.   

    是否是因为$num_rows的位置问题引起的?
      

  12.   

    结果是CVT110819001 17.其中$num_rows为17
      

  13.   


    不会吧。。
    echo str_pad(ceil(1 / 16), 3, '0', STR_PAD_LEFT); //001
    echo str_pad(ceil(16 / 16), 3, '0', STR_PAD_LEFT); //001
    echo str_pad(ceil(17 / 16), 3, '0', STR_PAD_LEFT); //002
    echo str_pad(ceil(2011 / 16), 3, '0', STR_PAD_LEFT); //126
      

  14.   

    我找到原因了,是因为insert into后mysql_query后才能获取$num_rows的值。其实我就是卡在这里。所以数据就没有更新。有什么办法能将新的值更新?
      

  15.   

    先INSERT,再UPDATE修改packageno字段。