有一个变量起到计数的作用,记录重复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);
以上代码当如何修改?
并将计数的变量值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);
以上代码当如何修改?
最好在代码中加以注释,计数值好像没有保存到单独的变量,而是拼接到$packageno字符串末尾了吧?
这么说吧,重复N次,但是这个N只能通过mysql_num_rows函数求得。然后计数变量自加1,如初始001,变成002,然后insert into 写入数据库。我就是这个过程没弄明白。
$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."')";
//..
// 判断数据库获取00n
// 插入获取的00n
}
// 修改为
$n = 1;
$c = 1;
foreach($vs as $v) {
if($c % 16 == 0) {
$n++;
}
if(插入成功) {
$c++;
}
// 插入00n
}
$m = hexdec(substr(dechex($n),0,strlen(dechex($n))-1));
echo str_repeat('0',3-strlen($m)).$m;
$m = hexdec(substr(dechex($n-1),0,strlen(dechex($n-1))-1))+1;
echo str_repeat('0',3-strlen($m)).$m;
所以用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';
在初始的时候,值没有问题,但是n>16时,还是没有变化啊。都是001
$packageno = $_POST['description'].date('ymd');
$num_rows > 0 ? $packagno .= str_pad(ceil($num_rows / $n), 3, '0', STR_PAD_LEFT) : $packagno .= '001';
不会吧。。
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