php脚本在160个字符后扣除1个学分

标签 php mysql

我的 PHP 函数遇到了一些小问题。

我创建了一个 PHP 函数,在 160 个字符后扣除 1 个短信信用,在 320 个字符后扣除 2 个短信信用等等,但最近我观察到 151 个字符或少于 160 个字符的文本扣除 2 个短信信用。不知道是不是有什么隐藏字符,还是我没有对某些字符串进行转义。

PHP代码如下:

//=== function to deduct credit per sms

function deduct_sms_credit( $user_id, $msg ) {
    $per_sms = 160;

    //calculate the no. Of sms pages with ceil() function
    $no_pg_sms = ceil( strlen( $msg ) / $per_sms );
    $sms_amount = $no_pg_sms;
    $query = "SELECT * FROM sms_history WHERE user_id=".$user_id."";
    $result = mysql_query( $query );
    while( $rs = mysql_fetch_array( $result ) ) {
        $remaining = $rs['remaining'] - $sms_amount;
        $spent = $rs['spent'] + $sms_amount;
    }
    $qupdate = "UPDATE sms_history SET `remaining` = ".$remaining.", `spent` = ".$spent." WHERE user_id = ".$user_id."";
    mysql_query( $qupdate );    
}

我尝试发送包含以下内容的短信:

Dear customer,we apologise for issues experienced while logging in last wk,follow the link below to reset ur password http://bit.ly/i5ud1zhm,www.boltsns238.com

它向我收取了 2 个积分而不是 1 个积分。我需要任何 PHP 函数的帮助来修剪、转义或解决问题。

最佳答案

我修改了你的函数

function deduct_sms_credit( $user_id, $msg ) {
     $per_sms = 160;
     $no_pg_sms = 0;

     $len = mb_strlen($msg);

     if($len<=160)
     {
        $no_pg_sms = 0;
     }
     else if ($len % $per_sms == 0) {
         $no_pg_sms = $len / $per_sms;
      } else {
          $str_sms = chunk_split($msg,160,"|*|");
          $arr_sms = explode("|*|", $str_sms);
          foreach($arr_sms as $key=>$value)
          {
             if(mb_strlen($value) !== 0)
                 $no_pg_sms++;
          }
    }

    $sms_amount = $no_pg_sms;
    $query = "SELECT * FROM sms_history WHERE user_id=".$user_id."";
    $result = mysql_query( $query );
    while( $rs = mysql_fetch_array( $result ) ) {
      $remaining = $rs['remaining'] - $sms_amount;
      $spent = $rs['spent'] + $sms_amount;
  }
  $qupdate = "UPDATE sms_history SET `remaining` = ".$remaining.", `spent` = ".$spent."   WHERE user_id = ".$user_id."";
  mysql_query( $qupdate );    
  }

请试试这个,让我知道

关于php脚本在160个字符后扣除1个学分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18226654/

相关文章:

PHP str_replace 数字与其他数字

MYSQL如何查找包含10个以上数字的条目?

mysql - 不同的主题,Sum 和 group by

phpmyadmin 使用 mysql 连接访问

mysql - 在 mysql 触发器中,有没有办法知道哪一列正在更新?

mysql - netbeans mysql syntax Error at line 1 and no error in mysql 查询浏览器

MySQL 到 MongoDB

PhpStorm Symfony 分析器

javascript - 在数字范围内自动生成年份

PHP 通知 : Object of class Closure could not be converted to int