Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/286.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
基于php的web表单中的自动数字增加_Php_Forms_Pdf_Webforms - Fatal编程技术网

基于php的web表单中的自动数字增加

基于php的web表单中的自动数字增加,php,forms,pdf,webforms,Php,Forms,Pdf,Webforms,因此,我创建了一个html表单,然后将结果发布到一个php文件中,该文件将其覆盖在PDF上,然后将该PDF发送给我自己和表单中的电子邮件。我现在想做的就是找到一个简单的方法,使PDF包含一个序列号 例如:第一次填写表单时,数字0001将自动输入PDF,第二次输入数字0002,依此类推 有没有一个简单的PHP函数来实现这一点 基本上,我是在创建一个在线发票表单,这样当我打服务电话时,我可以通过网络浏览器当场创建发票,然后通过电子邮件发送给我的办公室和客户 任何帮助都将不胜感激 对于递增的数字,您可

因此,我创建了一个html表单,然后将结果发布到一个php文件中,该文件将其覆盖在PDF上,然后将该PDF发送给我自己和表单中的电子邮件。我现在想做的就是找到一个简单的方法,使PDF包含一个序列号

例如:第一次填写表单时,数字0001将自动输入PDF,第二次输入数字0002,依此类推

有没有一个简单的PHP函数来实现这一点

基本上,我是在创建一个在线发票表单,这样当我打服务电话时,我可以通过网络浏览器当场创建发票,然后通过电子邮件发送给我的办公室和客户


任何帮助都将不胜感激

对于递增的数字,您可以在数据库中保留一个数字,然后提取它,向其中添加1,使用它,然后下次将其放回数据库,但这似乎很复杂。评论中有人提到使用时间戳,这样做:

$invoicenumber = time(); //This number will always be unique
时间函数的工作原理如下(复制自W3):

函数的作用是:返回自Unix纪元(1970年1月1日00:00:00 GMT)以来的当前时间(以秒为单位)。 因为实际秒数只能增加(增量),所以这个数字永远不会相同两次

我希望这是有帮助的

-编辑

您还可以以可读格式显示此日期/时间,如下所示:

$time = time();
echo date("Y-m-d H:i:s",$time);
-编辑2

如果您想要一个递增的数字,您基本上需要一个非常简单的数据库来保存它,它可能像一个名为invoices的表一样简单,带有一个名为invoicesnumber的列,该列存储您的发票号。您也可以/可能应该使用它来存储其他发票信息,这样您就可以保存每个发票号(这意味着我们只希望得到最高的一个)

那么您的代码将如下所示,每次您想要使用它时:

首先,您有一个数据库信息文件(settings.php或类似文件),其中包含您的数据库定义,可能如下所示:

define('DB_HOST', 'localhost');
define('DB_USER', 'db_username');
define('DB_PASS', 'db_password');
define('DB_NAME', 'database_name');
//Establish a mysql connection
$mysqli = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);

//Set up a query to get the highest number
$query = "SELECT invoicenumber FROM invoices ORDER BY invoicenumber DESC LIMIT 1";

//Get the result
$result = $mysqli->query($query);
$row = $result->fetch_assoc();

//If we have a record
if($row){
    //New invoice number
    $invoicenumber = $row['invoicenumber']++;
//Else (database is empty, so start at the beginning)
}else{
    $invoicenumber = 1;
}

//Now we have our invoice number, so do whatever you want with it
/**
 * Code here to use the number
 * */

//Now we wanna add the new invoice to the database, so
/**
 * Add any other info to this statement if you want.
 * If any of it is user submitted data, be sure to use prepared statements 
 * (just look at php.net's documentation on prepared statements)
 * w3schools also has some nice tutorials on how to safely insert stuff
 * in to a database, so check it all out :)
 * */
$query = "INSERT INTO invoices(invoicenumber) VALUES($invoicenumber)";

//Execute the query
if($mysqli->query($query)){
    //Show success
    echo "Invoice $invoicenumber has been added to the database.";
}else{
    //Show error
    echo "Unfortunately we could not add invoice $invoicenumber to the database.";
}

//Now we can clear up our resources
$stmt->free_result(); $stmt->close(); $mysqli->close();
您的代码如下所示:

define('DB_HOST', 'localhost');
define('DB_USER', 'db_username');
define('DB_PASS', 'db_password');
define('DB_NAME', 'database_name');
//Establish a mysql connection
$mysqli = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);

//Set up a query to get the highest number
$query = "SELECT invoicenumber FROM invoices ORDER BY invoicenumber DESC LIMIT 1";

//Get the result
$result = $mysqli->query($query);
$row = $result->fetch_assoc();

//If we have a record
if($row){
    //New invoice number
    $invoicenumber = $row['invoicenumber']++;
//Else (database is empty, so start at the beginning)
}else{
    $invoicenumber = 1;
}

//Now we have our invoice number, so do whatever you want with it
/**
 * Code here to use the number
 * */

//Now we wanna add the new invoice to the database, so
/**
 * Add any other info to this statement if you want.
 * If any of it is user submitted data, be sure to use prepared statements 
 * (just look at php.net's documentation on prepared statements)
 * w3schools also has some nice tutorials on how to safely insert stuff
 * in to a database, so check it all out :)
 * */
$query = "INSERT INTO invoices(invoicenumber) VALUES($invoicenumber)";

//Execute the query
if($mysqli->query($query)){
    //Show success
    echo "Invoice $invoicenumber has been added to the database.";
}else{
    //Show error
    echo "Unfortunately we could not add invoice $invoicenumber to the database.";
}

//Now we can clear up our resources
$stmt->free_result(); $stmt->close(); $mysqli->close();

请注意:这是一个非常基本的示例。如果您使用的是用户提交的数据,您的代码将具有附加功能和增强的安全性,因此请做好准备,并确保您在继续使用之前完全理解此代码的每一行。

我对患者报告上的患者登录号做了完全相同的处理

include('/home/user/php/class.pdf2text.php');
$p2t = new PDF2Text();

$p2t->setFilename($pdf);
$p2t->decodePDF();
$data = $p2t->output();
$len = strlen($data);
$pos = strpos($data,$accession);

if (pos){
  $in .= "$accession,";
  $checked++;
}
else{
  $missingPDF += 1;echo "\n<p>&#x2002;<span class='bold red'>INCORRECT ACCESSION NUMBER c=$row[0] p=$row[1]</span>\n";
   }

if ($checked > 0){
  $in = substr($in,0,-1) . ')';
  $sql = "UPDATE `Patient` SET `PDF`=1 WHERE $in";
}
include('/home/user/php/class.pdf2text.php');
$p2t=新的PDF2Text();
$p2t->setFilename($pdf);
$p2t->decodePDF();
$data=$p2t->output();
$len=strlen($data);
$pos=STRPO($data,$ACCESS);
如果(pos){
$in.=“$accession,”;
$checked++;
}
否则{
$missingPDF+=1;echo“\n ;不正确的登录号c=$row[0]p=$row[1]\n”;
}
如果($checked>0){
$in=substr($in,0,-1)。”);
$sql=“UPDATE`Patient`SET`PDF`=1,其中$in”;
}
pdf2text.php

class PDF2Text {
  // Some settings
  var $multibyte = 4; // Use setUnicode(TRUE|FALSE)
  var $convertquotes = ENT_QUOTES; // ENT_COMPAT (double-quotes), ENT_QUOTES (Both), ENT_NOQUOTES (None)
  var $showprogress = true; // TRUE if you have problems with time-out
   // Variables
  var $filename = '';
  var $decodedtext = '';
   function setFilename($filename) {
    // Reset
    $this->decodedtext = '';
    $this->filename = $filename;
  }
   function output($echo = false) {
    if($echo) echo $this->decodedtext;
    else return $this->decodedtext;
  }
   function setUnicode($input) {
    // 4 for unicode. But 2 should work in most cases just fine
    if($input == true) $this->multibyte = 4;
    else $this->multibyte = 2;
  }
   function decodePDF() {
    // Read the data from pdf file
    $infile = @file_get_contents($this->filename, FILE_BINARY);
    if (empty($infile))
      return "";
     // Get all text data.
    $transformations = array();
    $texts = array();
     // Get the list of all objects.
    preg_match_all("#obj[\n|\r](.*)endobj[\n|\r]#ismU", $infile . "endobj\r", $objects);
    $objects = @$objects[1];
     // Select objects with streams.
    for ($i = 0; $i < count($objects); $i++) {
      $currentObject = $objects[$i];
       // Prevent time-out
      @set_time_limit ();
      if($this->showprogress) {
//            echo ". ";
        flush(); ob_flush();
      }
       // Check if an object includes data stream.
      if (preg_match("#stream[\n|\r](.*)endstream[\n|\r]#ismU", $currentObject . "endstream\r", $stream )) {
        $stream = ltrim($stream[1]);
        // Check object parameters and look for text data.
        $options = $this->getObjectOptions($currentObject);
         if (!(empty($options["Length1"]) && empty($options["Type"]) && empty($options["Subtype"])) )
//            if ( $options["Image"] && $options["Subtype"] )
//            if (!(empty($options["Length1"]) &&  empty($options["Subtype"])) )
          continue;
         // Hack, length doesnt always seem to be correct
        unset($options["Length"]);
         // So, we have text data. Decode it.
        $data = $this->getDecodedStream($stream, $options);
         if (strlen($data)) {
      if (preg_match_all("#BT[\n|\r](.*)ET[\n|\r]#ismU", $data . "ET\r", $textContainers)) {
            $textContainers = @$textContainers[1];
            $this->getDirtyTexts($texts, $textContainers);
          } else
            $this->getCharTransformations($transformations, $data);
        }
      }
    }
     // Analyze text blocks taking into account character transformations and return results.
    $this->decodedtext = $this->getTextUsingTransformations($texts, $transformations);
  }

   function decodeAsciiHex($input) {
    $output = "";
     $isOdd = true;
    $isComment = false;
     for($i = 0, $codeHigh = -1; $i < strlen($input) && $input[$i] != '>'; $i++) {
      $c = $input[$i];
       if($isComment) {
        if ($c == '\r' || $c == '\n')
          $isComment = false;
        continue;
      }
       switch($c) {
        case '\0': case '\t': case '\r': case '\f': case '\n': case ' ': break;
        case '%':
          $isComment = true;
        break;
         default:
          $code = hexdec($c);
          if($code === 0 && $c != '0')
            return "";
           if($isOdd)
            $codeHigh = $code;
          else
            $output .= chr($codeHigh * 16 + $code);
           $isOdd = !$isOdd;
        break;
      }
    }
     if($input[$i] != '>')
      return "";
     if($isOdd)
      $output .= chr($codeHigh * 16);
     return $output;
  }
   function decodeAscii85($input) {
    $output = "";
     $isComment = false;
    $ords = array();
     for($i = 0, $state = 0; $i < strlen($input) && $input[$i] != '~'; $i++) {
      $c = $input[$i];
       if($isComment) {
        if ($c == '\r' || $c == '\n')
          $isComment = false;
        continue;
      }
       if ($c == '\0' || $c == '\t' || $c == '\r' || $c == '\f' || $c == '\n' || $c == ' ')
        continue;
      if ($c == '%') {
        $isComment = true;
        continue;
      }
      if ($c == 'z' && $state === 0) {
        $output .= str_repeat(chr(0), 4);
        continue;
      }
      if ($c < '!' || $c > 'u')
        return "";
       $code = ord($input[$i]) & 0xff;
      $ords[$state++] = $code - ord('!');
       if ($state == 5) {
        $state = 0;
        for ($sum = 0, $j = 0; $j < 5; $j++)
          $sum = $sum * 85 + $ords[$j];
        for ($j = 3; $j >= 0; $j--)
          $output .= chr($sum >> ($j * 8));
      }
    }
    if ($state === 1)
      return "";
    elseif ($state > 1) {
      for ($i = 0, $sum = 0; $i < $state; $i++)
        $sum += ($ords[$i] + ($i == $state - 1)) * pow(85, 4 - $i);
      for ($i = 0; $i < $state - 1; $i++) {
        try {
          if(false == ($o = chr($sum >> ((3 - $i) * 8)))) {
            throw new Exception('Error');
          }
          $output .= $o;
        } catch (Exception $e) { /*Dont do anything*/ }
      }
    }
     return $output;
  }
   function decodeFlate($data) {
    return @gzuncompress($data);
  }
   function getObjectOptions($object) {
    $options = array();
     if (preg_match("#<<(.*)>>#ismU", $object, $options)) {
      $options = explode("/", $options[1]);
      @array_shift($options);
       $o = array();
      for ($j = 0; $j < @count($options); $j++) {
        $options[$j] = preg_replace("#\s+#", " ", trim($options[$j]));
        if (strpos($options[$j], " ") !== false) {
          $parts = explode(" ", $options[$j]);
          $o[$parts[0]] = $parts[1];
        } else
          $o[$options[$j]] = true;
      }
      $options = $o;
      unset($o);
    }
     return $options;
  }
   function getDecodedStream($stream, $options) {
    $data = "";
    if (empty($options["Filter"]))
      $data = $stream;
    else {
      $length = !empty($options["Length"]) ? $options["Length"] : strlen($stream);
      $_stream = substr($stream, 0, $length);
       foreach ($options as $key => $value) {
        if ($key == "ASCIIHexDecode")
          $_stream = $this->decodeAsciiHex($_stream);
        elseif ($key == "ASCII85Decode")
          $_stream = $this->decodeAscii85($_stream);
        elseif ($key == "FlateDecode")
          $_stream = $this->decodeFlate($_stream);
        elseif ($key == "Crypt") { // TO DO
        }
      }
      $data = $_stream;
    }
    return $data;
  }
   function getDirtyTexts(&$texts, $textContainers) {
    for ($j = 0; $j < count($textContainers); $j++) {
      if (preg_match_all("#\[(.*)\]\s*TJ[\n|\r]#ismU", $textContainers[$j], $parts))
        $texts = array_merge($texts, array(@implode('', $parts[1])));
      elseif (preg_match_all("#T[d|w|m|f]\s*(\(.*\))\s*Tj[\n|\r]#ismU", $textContainers[$j], $parts))
        $texts = array_merge($texts, array(@implode('', $parts[1])));
      elseif (preg_match_all("#T[d|w|m|f]\s*(\[.*\])\s*Tj[\n|\r]#ismU", $textContainers[$j], $parts))
        $texts = array_merge($texts, array(@implode('', $parts[1])));
    }
   }
   function getCharTransformations(&$transformations, $stream) {
    preg_match_all("#([0-9]+)\s+beginbfchar(.*)endbfchar#ismU", $stream, $chars, PREG_SET_ORDER);
    preg_match_all("#([0-9]+)\s+beginbfrange(.*)endbfrange#ismU", $stream, $ranges, PREG_SET_ORDER);
     for ($j = 0; $j < count($chars); $j++) {
      $count = $chars[$j][1];
      $current = explode("\n", trim($chars[$j][2]));
      for ($k = 0; $k < $count && $k < count($current); $k++) {
        if (preg_match("#<([0-9a-f]{2,4})>\s+<([0-9a-f]{4,512})>#is", trim($current[$k]), $map))
          $transformations[str_pad($map[1], 4, "0")] = $map[2];
      }
    }
    for ($j = 0; $j < count($ranges); $j++) {
      $count = $ranges[$j][1];
      $current = explode("\n", trim($ranges[$j][2]));
      for ($k = 0; $k < $count && $k < count($current); $k++) {
        if (preg_match("#<([0-9a-f]{4})>\s+<([0-9a-f]{4})>\s+<([0-9a-f]{4})>#is", trim($current[$k]), $map)) {
          $from = hexdec($map[1]);
          $to = hexdec($map[2]);
          $_from = hexdec($map[3]);
           for ($m = $from, $n = 0; $m <= $to; $m++, $n++)
            $transformations[sprintf("%04X", $m)] = sprintf("%04X", $_from + $n);
        } elseif (preg_match("#<([0-9a-f]{4})>\s+<([0-9a-f]{4})>\s+\[(.*)\]#ismU", trim($current[$k]), $map)) {
          $from = hexdec($map[1]);
          $to = hexdec($map[2]);
          $parts = preg_split("#\s+#", trim($map[3]));
           for ($m = $from, $n = 0; $m <= $to && $n < count($parts); $m++, $n++)
            $transformations[sprintf("%04X", $m)] = sprintf("%04X", hexdec($parts[$n]));
        }
      }
    }
  }
  function getTextUsingTransformations($texts, $transformations) {
    $document = "";
    for ($i = 0; $i < count($texts); $i++) {
      $isHex = false;
      $isPlain = false;
       $hex = "";
      $plain = "";
      for ($j = 0; $j < strlen($texts[$i]); $j++) {
        $c = $texts[$i][$j];
        switch($c) {
          case "<":
            $hex = "";
            $isHex = true;
      $isPlain = false;
          break;
          case ">":
            $hexs = str_split($hex, $this->multibyte); // 2 or 4 (UTF8 or ISO)
            for ($k = 0; $k < count($hexs); $k++) {
               $chex = str_pad($hexs[$k], 4, "0"); // Add tailing zero
              if (isset($transformations[$chex]))
                $chex = $transformations[$chex];
              $document .= html_entity_decode("&#x".$chex.";");
            }
            $isHex = false;
          break;
          case "(":
            $plain = "";
            $isPlain = true;
      $isHex = false;
          break;
          case ")":
            $document .= $plain;
            $isPlain = false;
          break;
          case "\\":
            $c2 = $texts[$i][$j + 1];
            if (in_array($c2, array("\\", "(", ")"))) $plain .= $c2;
            elseif ($c2 == "n") $plain .= '\n';
            elseif ($c2 == "r") $plain .= '\r';
            elseif ($c2 == "t") $plain .= '\t';
            elseif ($c2 == "b") $plain .= '\b';
            elseif ($c2 == "f") $plain .= '\f';
            elseif ($c2 >= '0' && $c2 <= '9') {
              $oct = preg_replace("#[^0-9]#", "", substr($texts[$i], $j + 1, 3));
              $j += strlen($oct) - 1;
              $plain .= html_entity_decode("&#".octdec($oct).";", $this->convertquotes);
            }
            $j++;
          break;
           default:
            if ($isHex)
              $hex .= $c;
            elseif ($isPlain)
              $plain .= $c;
          break;
        }
      }
      $document .= "\n";
    }
     return $document;
  }
}
类PDF2文本{
//一些设置
var$multibyte=4;//使用setUnicode(TRUE | FALSE)
var$convertquotes=ENT_QUOTES;//ENT_COMPAT(双引号)、ENT_引号(两个)、ENT_NOQUOTES(无)
var$showprogress=true;//如果超时有问题,则为true
//变数
var$filename='';
var$decodedtext='';
函数setFilename($filename){
//重置
$this->decodedtext='';
$this->filename=$filename;
}
函数输出($echo=false){
如果($echo)echo$this->decodedtext;
否则返回$this->decodedtext;
}
函数setUnicode($input){
//4表示unicode,但2在大多数情况下都可以正常工作
如果($input==true)$this->multibyte=4;
else$this->multibyte=2;
}
函数decodePDF(){
//从pdf文件中读取数据
$infle=@file\u get\u contents($this->filename,file\u BINARY);
如果(空($infle))
返回“”;
//获取所有文本数据。
$transformations=array();
$text=array();
//获取所有对象的列表。
preg#u match_all(“#obj[\n |\r](*)endobj[\n |\r]#ismU”、$infle.“endobj\r”、$objects);
$objects=@$objects[1];
//选择具有流的对象。
对于($i=0;$ishowprogress){
//“回声”;
冲水;
}
//检查对象是否包含数据流。
if(preg#u match(“#stream[\n |\r](.*)endstream[\n |\r]#ismU”、$currentObject.“endstream\r”、$stream)){
$stream=ltrim($stream[1]);
//检查对象参数并查找文本数据。
$options=$this->getObjectOptions($currentObject);
if(!(空($options[“Length1”])和空($options[“Type”])和空($options[“Subtype”]))
//如果($options[“Image”]&&$options[“Subtype”])
//if(!(空($options[“Length1”])和空($options[“Subtype”]))
继续;
//哈克,长度似乎并不总是正确的
未设置($选项[“长度]);
//所以,我们有文本数据。解码它。
$data=$this->getDecodedStream($stream,$options);
if(斯特伦(数据)){
if(preg#u match#u all(#BT[\n|\r](*)ET[\n|\r]#ismU“,$data.“ET\r”,$textContainers)){
$textContainers=@$textContainers[1];
$this->getDirtyText($text,$textContainers);
}否则
$this->getChartTransformations($transformations,$data);
}
}
}
//分析文本块时考虑字符转换并返回结果。
$this->decodedtext=$this->getTextUsingTransformations($text,$transformations);
}
函数decodeAsciHex($input){
$output=“”;
$isOdd=true;
$isComment=false;
对于($i=0,$codeHigh=-1;$i';$i++){
$c=$input[$i];
如果($isComment){
如果($c='\r'| |$c=='\n')
$isComment=fals