php - 如何将帖子中的变量添加到数组中?

标签 php html mysql invoice

我从事一个开具发票的项目。我有一个数据库,其中包含包含服务和客户端的表。我尝试从 select 中提取一个名为 selectService 的值并将其添加到数组中。问题是,每次新选择时,变量都会被覆盖。我需要它来添加多个发票服务。

       <div class="client-select">
    <form method='post' action=''>        
      <select name='selectClient'>
        <?php
          $query = "select company_name from clients";

          if ($result = $mysqli->query($query)) {
              while ($row = $result->fetch_assoc()) {
        ?>
        <option value="<?php printf ("%s", $row["company_name"]); ?>">
          <?php printf ("%s", $row["company_name"]); ?>
        </option>
        <?php
              }
            $result->free();
          }
        ?>
      </select>
      <button type='submit' name='button1'>Załaduj fakturę</button>
    </form>
  </div>

  <?php function createForm($name='',$nip='', $address='', $error='') { ?>
  <h2>Dane klienta:</h2>
  <div class='client-data'>
    <label>Nazwa firmy:</label><input type="text" name="company_name" value="<?php echo $name; ?>" placeholder='NAZWA FIRMY'/>
    ...
  </div>
  <?php }
  function createCompany() {
    include('company-data.php'); ?>
    <h2>Dane wystawiającego:</h2>
    <div class='company-data'>
      <label>Nazwa firmy:</label><input type="text" name="my_company_name" value="<?php echo $comapny_name; ?>" placeholder='NAZWA FIRMY'/>
      ...
    </div>
  <?php }
  function createPayment() {
    include('company-data.php'); ?>
    <h2>Dane do płatności:</h2>
    <div class='payment-data'>
      <label>Data wydania:</label><input type="date" name="issue_date" value="<?php echo $issue_date; ?>" placeholder='DATA WYDANIA'/>
      ...
    </div>
    <div class='bank-data'>
      <label>Nr konta:</label><input type="text" name="account_number" value="<?php echo $account_number; ?>" placeholder='NR KONTA' size='30'/>
      ...
    </div>
  <?php }
  function serviceSelect() {
    include('db_connect.php'); ?>
    <div class="service-select">
      <form method='post' action=''>        
        <select name='selectService'>
          <?php
            $query = "select service_name from service";

            if ($result = $mysqli->query($query)) {
                while ($row = $result->fetch_assoc()) {
          ?>
          <option value="<?php printf ("%s", $row["service_name"]); ?>">
            <?php printf ("%s", $row["service_name"]); ?>
          </option>
          <?php
                }
              $result->free();
            }
          ?>
        </select>
        <button type='submit' name='button2'>Dodaj usługę</button>
      </form>
    </div>
  <?php }
  function serviceForm($service_name='',$quantity='', $unit='', $net_price='', $net_value='', $vat_rate='', $amount_vat='', $gross_value='', $error='') { ?>
  <div class='service-data'>
    <label>Nazwa usługi:</label><input type="text" name="service_name" value="<?php echo $service_name; ?>" placeholder='NAZWA USŁUGI'/>
    ...
  </div>
  <?php } ?>

 if(isset($_POST['button1'])) {
  $client = $_POST['selectClient'];
  if($stmt = $mysqli->prepare("SELECT company_name,nip,address FROM clients WHERE company_name='$client'")){
  $stmt->execute();
  $stmt->bind_result($name,$nip,$address);
  $stmt->fetch();
  createForm($name,$nip,$address,NULL);
  $stmt->close();
} else {
  echo "Błąd zapytania";
}
createCompany();
createPayment();
serviceSelect();
};

if(isset($_POST['button2'])) {
 createCompany();
 createPayment();
 serviceSelect();

 $service = $_POST['selectService'];
 if($stmt = $mysqli->prepare("SELECT service_name,quantity,unit,net_price,net_value,vat_rate,amount_vat,gross_value FROM service WHERE service_name='$service'")){
  $stmt->execute();
  $stmt->bind_result($service_name,$quantity,$unit,$net_price,$net_value,$vat_rate,$amount_vat,$gross_value);
  $stmt->fetch();
  serviceForm($service_name,$quantity,$unit,$net_price,$net_value,$vat_rate,$amount_vat,$gross_value,NULL);
  $stmt->close();
  array_push($_SESSION['array'], $service);
} else {
   echo "Błąd zapytania";
}
};

$mysqli->close();

如果点击button2,生成客户端表单的功能将会消失。我可能必须使用其他方式来生成表单,但我不知道。我还指望解决向发票添加不止一项服务的问题。

最佳答案

如果您正在谈论这一行:

while ($row = $result->fetch_assoc()) {

您可以通过将数据作为数组的新行保存到数组中来多次使用数据:

$rows = array();
while ($row = $result->fetch_assoc()) {
    $rows[] = $row;
    //...
}

然后在循环中使用它:

foreach($rows as $row) {
    //...
}

关于php - 如何将帖子中的变量添加到数组中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49033402/

相关文章:

mysql - 为 2 列选择不同值,但不是第 3 列

mysql - 如何将列的值分配给变量?

php - 使用带有正则表达式的 Sphinx 搜索车牌表

php - HTML ajax 响应不执行 javascript 函数

PHP PDO fetchAll 然后 json_encode 不起作用

javascript - 未捕获类型错误 : Cannot read property, JS 在页面渲染之前执行

javascript - 从显示 :none to display:block? 向下滑动动画

php - 更具声明性的 PHP : array conversion

php - 关于推广免费资源的好方法的建议

javascript - 后端驱动网站的 javascript 单元测试