【问题标题】:Checkbox in each row in the table to get values and insert in database表中每一行中的复选框以获取值并插入数据库
【发布时间】:2015-11-13 17:49:28
【问题描述】:

我正在使用我页面的发送邮件功能。为了能够获取表中的值,我想在每一行中添加一个复选框,可以勾选超过 1 行。然后一旦被一个按钮提交,它就会被插入到数据库中。我不知道我的代码有什么问题。请帮忙。

这里是复选框:

 echo "<td><input type='checkbox' name='checkb[".$row['ID']."]'></td>";

代码如下:

 function InsertEmailMessage() {

 foreach ($_POST['checkb'] as $id => $val) {

 if($val=='checked'){
 $sql6 = "SELECT * FROM invalid_invoice WHERE ID='".$id."'";
 $conn = dbConnect();
 $stmt6 = $conn->prepare($sql6); 
 $stmt6->execute();
 $data = $stmt6->fetchAll(PDO::FETCH_ASSOC);     
 $conn=null;
 }

 foreach ($data as $row6) {

 $invnumb=$row6['Invoice_Number'];
 $partnumb=$row6['Part_Number'];
 $issue=$row6['Issues'];
 $pic=$row6['PIC_Comments'];
 $emailadd= $row6['PersoninCharge'];
 $issuetype=$row6['Issue_Type'];
 $createdate=$row6['Creation_Date'];
 $site=$row6['Site'];
 $vendor=$row6['Vendor_Name'];
 $invdate=$row6['Invoice_Date'];
 $po=$row6['PO'];
 $rr=$row6['RR']; 
 $currency=$row6['Currency'];
 $invamount=$row6['Invoice_Amount'];
 $stat=$row6['Status'];


 if($row6['Status']=="Open") {

 $message = "<html><b>Issue Type: {$issuetype} </b><br><br>";       
 $message .= "<b>Creation Date: {$createdate} </b><br><br>";
 $message .= "<b>Site: {$site} </b><br><br>";
 $message .= "<b>Vendor Name: {$vendor} </b><br><br>";
 $message .= "<b>Invoice Date: {$invdate} </b><br><br>";
 $message .= "<b>Invoice Number: {$invnumb} </b><br><br>";
 $message .= "<b>Part Number:</b><br>{$partnumb}<br><br>";
 $message .= "<b>PO: {$po} </b><br><br>";
 $message .= "<b>RR: {$rr} </b><br><br>";
 $message .= "<b>Currency: {$currency} </b><br><br>";
 $message .= "<b>Invoice Amount: {$invamount} </b><br><br>";
 $message .= "<b>Issues:</b><br>{$issue}<br>";
 $message .= "<b>Status: {$stat} </b><br><br>";  
 $message .= "<b>{$pic}<b><br>";  
 $message .= "</html>";


 if(!empty($emailadd)) {
 dbInsertEmailMessage($emailadd, "Invoice Number: {$invnumb} - {$issue}.", $message);
 echo "<script language='javascript'>alert('Email sent to {$emailadd}')</script>";
 }
 }
 }

 }
 }
 }

 function dbInsertEmailMessage($send_to, $subject, $message) {

  $sql7 = "INSERT INTO email_queue (send_to, subject, message) VALUES (:send_to, :subject, :message)";  
  $conn = dbConnect();
  $stmt7 = $conn->prepare($sql7); 
  $stmt7->bindParam(':send_to', $send_to);
  $stmt7->bindParam(':subject', $subject);
  $stmt7->bindParam(':message', $message);
  $stmt7->execute();
  $conn=null; 
  }  

【问题讨论】:

    标签: php checkbox pdo


    【解决方案1】:

    这行好像错了:

    <td><input type='checkbox' name='checkb[".$row['ID']."]'></td>
    

    如果你在 PHP 中,回显示例:

    echo '<td><input type="checkbox" name="checkb[\'' . $row['ID'] . '\']"></td>';
    

    如果你在 HTML 中:

    <td><input type='checkbox' name='checkb["<?php echo $row['ID'] ?>"]'></td>
    

    然后在您的发送功能中,您可以尝试一些调试:

    var_dump( $_POST );
    

    【讨论】:

    • 我正在使用 php。我应该把 var_dump( $_POST );
    • 就在function InsertEmailMessage() { 行之后,您可以输入:var_dump( $_POST ); return; - 这样您就可以检查复选框名称和值是否完全符合您的预期。
    • 尝试查看页面的源代码,可能var_dump被其他东西隐藏了
    【解决方案2】:

    这种声明方式是错误的。

    echo "<td><input type='checkbox' name='checkb[".$row['ID']."]'></td>";
    

    把这个改成

    echo "<td><input type='checkbox' name='checkb[]' value='".$row['ID']."'></td>";
    

    选中复选框的方法是

    $checkb=$_POST['checkb'];
    
    $TotalCheckbox=$sizeof($checkb);
    for($i=0;$i<$TotalCheckbox;$i++)
    {
        echo $Selcheckb=$checkb[$i];
    }
    

    现在,用这个$Selcheckb..做任何你想做的事。

    .
    .
    .
    // Your code.
    

    应该是这样的。

    <?
    echo "<td><input type='checkbox' name='checkb[]' value='".$row['ID']."'></td>";
    
    function InsertEmailMessage() 
    {
            $checkb=$_POST['checkb'];
            $TotalCheckbox=$sizeof($checkb);
            for($i=0;$i<$TotalCheckbox;$i++)
            {
                 $Selcheckb=$checkb[$i];
                 $sql6 = "SELECT * FROM invalid_invoice WHERE ID=$Selcheckb";
                 $conn = dbConnect();
                 $stmt6 = $conn->prepare($sql6); 
                 $stmt6->execute();
                 $data = $stmt6->fetchAll(PDO::FETCH_ASSOC);     
                 $conn=null;
            }
    .
    .// Your rest of the code..
    

    【讨论】:

    • 谢谢,但是如何使用 $Selcheckb?我应该在哪里插入它?
    • @KimlynTormes :我更新了我的答案。请通过它。因为,您的复选框声明是错误的。我做对了。并且,第一个功能将相应地工作。因为,我不知道您的数据库表/列,所以我无法编辑您的完整代码。但是,我已经更新了复选框代码。请检查。谢谢。
    • @KimlynTormes : 请告诉我你的工作进度。
    • 仍然没有在数据库中插入行。
    • @KimlynTormes : 你用我的代码删除了foreach ($_POST['checkb'] as $id =&gt; $val) { // } ??
    猜你喜欢
    • 2019-05-22
    • 2016-08-05
    • 2017-07-17
    • 1970-01-01
    • 2017-06-15
    • 2021-04-03
    • 1970-01-01
    • 2020-05-02
    • 1970-01-01
    相关资源
    最近更新 更多