【问题标题】:multiple selected html table row data using checkbox is not sending to a email address使用复选框的多个选定的 html 表行数据未发送到电子邮件地址
【发布时间】:2020-05-05 02:04:06
【问题描述】:

我有一个从数据库中获取数据的 html 表。我想使用复选框选择一些行数据。我已将唯一值令牌设置为复选框,并且我想将检查的数据发送到电子邮件地址。问题是只有一行数据发送到邮件,多行数据没有发送

<form method="post" name="myForm">
<div class="col-lg-6">
    <div class="form-group" style="margin-left: 2%;">
        <div class="row">
            <input type="email" class="col-lg-9 form-control" name="email" id="email" placeholder="Enter Email Address" required="">
            <button type="submit" name="submit" class="col-lg-2 btn btn-primary"><i class="fa fa-envelope" style="margin-left: 10px;"></i> Send</button>
        </div>
    </div>
</div>
<table class="table table-bordered table-responsive" id="myTable">
    <thead>
    <tr>
        <th>Select</th>
        <th>Product</th>
        <th>Subproduct</th>
        <th>Product Name</th>
    </tr>
    </thead>
    <tbody>
    <?php
    /*select query here*/
    while($val = mysqli_fetch_assoc($retval))        
    {?>
    <tr>
        <td><input type='checkbox' name="checkbox[]" id="chk" value="<?php echo $val['tno']?>"></td>
        <td><?php echo $val['product'];?></td>
        <td><?php echo $val['subproduct'];?></td>
        <td><?php echo $val['name'];?></td>

   </tr>
   <?php           
    }
    ?>
    </tbody>
</table>

php代码如下

 <?php
if(isset($_POST['submit'])){
    $checkbox = $_POST['checkbox'];
    $email = $_POST['email'];
    //$count=1;
    for($i=0;$i<count($checkbox);$i++){
        $chk_id = $checkbox[$i];
        $sql = "select * from newstock WHERE tno='$chk_id'";
        $result = mysqli_query($link,$sql);
        $val=mysqli_fetch_assoc($result);
        $product=$val['product'];
        $subproduct=$val['subproduct'];
        $name=$val['name'];
        $quantity=$val['pcs'];
        $gwt=$val['gwt'];
        $nwt=$val['nwt'];
        $tno=$val['tno'];
        $bookno=$val['bookno'];
        $dealer=$val['dealer'];
        $co='<tr>';
        $co.= '<td>Product:'. $product. '</td>';
        $co.= '<td>Subproduct: '. $subproduct . '</td>';
        $co.= '<td>Name: '. $name. '</td>';
        $co.= '<td>Pcs: '. $quantity. '</td>';
        $co.= '<td>Gross Weight: '. $gwt . '</td>';
        $co.= '<td>Net Weight: '. $nwt. '</td>';
        $co.= '<td>Token No: '. $tno. '</td>';
        $co.= '<td>Book No: '. $bookno. '</td>';
        $co.= '<td>Dealer: '. $dealer . '</td>';
        $co.= '</tr>';
    }
    $mailto = $email;
    $mailSub = "Product Details";
    require 'PHPMailer-master/PHPMailerAutoload.php';
    $mail = new PHPMailer();
    $mail ->IsSmtp();
    $mail ->SMTPDebug = 0;
    $mail ->SMTPAuth = true;
    $mail ->SMTPSecure = 'ssl';
    $mail ->Host = "smtp.gmail.com";
    $mail ->Port = 465; // or 587
    $mail ->IsHTML(true);
    $mail ->Username = "kothariorg.group@gmail.com";
    $mail ->Password = "kotharigroup@123";
    $mail ->SetFrom("noreply@kothari.com");
    $mail ->Subject = $mailSub;
    $mail ->Body = $co;
    $mail ->AddAddress($mailto);

    if(!$mail->Send())
    {
       echo "Mail Not Sent";
    }
    else
    {
        header('location: dashboard.php');
    }
}?>

【问题讨论】:

  • 那么您的 http 服务器错误日志文件是怎么说的?
  • 我没有收到任何错误。如果我选择多行数据并发送它。只有最后选择的行值才能收到邮件。我希望每个选定的行数据都应该来
  • 啊,好吧,我想念你的问题,对我来说,在那种情况下好像根本没有发送电子邮件。
  • 您的代码容易受到 sql 注入攻击。请了解结合使用“准备好的语句”和“参数绑定”来避免这种情况的好处。

标签: php


【解决方案1】:

检查循环。每次迭代后

$co 

$co 变量获取新值。

这里是修复:

$co = '';

for($i=0;$i<count($checkbox);$i++){
    $chk_id = $checkbox[$i];
    $sql = "select * from newstock WHERE tno='$chk_id'";
    $result = mysqli_query($link,$sql);
    $val=mysqli_fetch_assoc($result);
    $product=$val['product'];
    $subproduct=$val['subproduct'];
    $name=$val['name'];
    $quantity=$val['pcs'];
    $gwt=$val['gwt'];
    $nwt=$val['nwt'];
    $tno=$val['tno'];
    $bookno=$val['bookno'];
    $dealer=$val['dealer'];
    $co .='<tr>';
    $co.= '<td>Product:'. $product. '</td>';
    $co.= '<td>Subproduct: '. $subproduct . '</td>';
    $co.= '<td>Name: '. $name. '</td>';
    $co.= '<td>Pcs: '. $quantity. '</td>';
    $co.= '<td>Gross Weight: '. $gwt . '</td>';
    $co.= '<td>Net Weight: '. $nwt. '</td>';
    $co.= '<td>Token No: '. $tno. '</td>';
    $co.= '<td>Book No: '. $bookno. '</td>';
    $co.= '<td>Dealer: '. $dealer . '</td>';
    $co.= '</tr>';
}

尝试替换此代码。

【讨论】:

    【解决方案2】:

    你的实际问题是这一行:

    $co='<tr>';
    

    在这里,您在循环的每次迭代中重置$co,因此您基本上放弃了到目前为止收集的所有内容。

    相反,您应该考虑将您在每次迭代中创建的数据放在一个数组中,并在您完成循环后将其内爆。所以类似的东西:

    [...]
    $coBuffer = [];
    for($i=0;$i<count($checkbox);$i++){
        [...]
        $co='<tr>';
        $co.= '<td>Product:'. $product. '</td>';
        [...]
        $co.= '</tr>';
        $coBuffer[] = $co;
    }
    $coBody = implode("\n", $coBuffer);
    

    现在您已经收集了最终$coBody 上的所有数据“行”,您可以使用它来组装您的电子邮件正文。

    【讨论】:

      猜你喜欢
      • 2012-09-15
      • 1970-01-01
      • 2012-02-25
      • 1970-01-01
      • 2017-12-23
      • 1970-01-01
      • 1970-01-01
      • 2015-02-01
      • 2017-05-29
      相关资源
      最近更新 更多