【问题标题】:How to insert checkbox values into table using PHP?如何使用 PHP 将复选框值插入表中?
【发布时间】:2016-07-23 18:09:40
【问题描述】:

不管怎样,我有一个注册志愿者的表格——正常的东西,一切都通过了。但后来我有一个复选框问题。志愿者可以在不同的节日提供帮助,并且可以用于任务(2张桌子,其中志愿者的id对应节日/任务的id)。 现在的代码不完整,因为我不断收到错误,最新的是:

SQLSTATE[HY093]:参数号无效:参数未定义

Vardump 结果:

array(2) { [0]=> string(1) "8" [1]=> string(2) "10" } array(4) { [0]=> string(1) "1" [1]=> string(1) "2" [2]=> string(1) "3" [3]=> string(1) "4" 

谁能帮助我走上正确的道路,以便我继续前进?

更新/编辑:语句 2 和 3 中出现奇怪的错字以及另一个错字 - 但无法解决问题。将bindparam(':t_id',$task, PDO::PARAM_INT) 更改为bindparam(':t_id',$task, PDO::PARAM_STR) 也不起作用(尽管我知道问题可能出在该语句的某个地方)。

addvolunt.php

     <?php
    error_reporting(-1);
    ini_set('display_errors', 'On');
    if(!isset($_SESSION)){
    session_start();
    }
    include_once 'dbConnect.php';

    if(!isset($_SESSION['user']))
    {
        header("Location: index.php");
    }

    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Welcome - <?php echo $_SESSION['user']; ?></title>
 <link rel="stylesheet" type="text/css" href="../css/main.css" />
 <link rel="stylesheet" type="text/css" href="../css/menu.css" />
</head>
<body>
    <table class="center"><tr><td>
                    <p class="P1">Voeg hier een vrijwilliger toe</br>
                    <hr></hr>
                </p>
<?php
if(isset($_POST['reg_btn'])) {
    $p_fname = $_POST['fname'];
    $p_lname = $_POST['lname'];
    $p_dob = $_POST['dob'];
    $p_adres = $_POST['adres'];
    $p_pc = $_POST['pc'];
    $p_loc = $_POST['loc'];
    $p_coun = $_POST['coun'];
    $p_phone = $_POST['phone'];
    $p_phone2 = $_POST['phone2'];
    $p_mail = $_POST['mail'];

  if($volunt->createVolunt($p_fname,$p_lname,$p_dob,$p_adres,$p_pc,$p_loc,$p_coun,$p_phone,$p_phone2,$p_mail)) {;
        echo("Vrijwilliger toegevoegd");

    }

    else{
        echo("Registration Failed");
        var_dump($_POST['tid']);
        var_dump($_POST['fest']);
    }

}
?>
<div id="formdiv">    
<form method="post" id="form">
            <table class="center" width="30%" border="0">
                <tr>
                    <td>Voornaam</td><td><input type="text" name="fname" placeholder="Voornaam" required /></td>
                </tr>
                <tr>
                    <td>Achternaam</td><td><input type="text" name="lname" placeholder="Achternaam" required /></td>
                </tr>
                <tr>
                    <td>Geboortedatum dd/mm/jjjj</td><td><input type="text" name="dob" placeholder="Geboortedatum dd/mm/jjjj" required /></td>
                </tr>
                <tr>
                    <td>Adres</td><td><input type="text" name="adres" placeholder="Adres" required /></td>
                </tr>
                <tr>
                    <td>Postcode</td><td><input type="text" name="pc" placeholder="Postcode 1234AB" required /></td>
                </tr>
                  <tr>
                    <td>Plaats </td><td><input type="text" name="loc" placeholder="Plaats" required /></td>
                </tr>
                <tr>
                    <td>Land </td><td><input type="text" name="coun" placeholder="Land" required /></td>
                </tr>
                <tr>
                    <td> Mobiel</td><td><input type="text" name="phone" placeholder="Mobiel#" required /></td>
                </tr>
                <tr>
                    <td>Telefoon 2 </td><td><input type="text" name="phone2" placeholder="Vast#" required /></td>
                </tr>
                <tr>
                    <td>Email </td><td><input type="email" name="mail" placeholder="Email" required /></td>
                </tr>

                <table class="center"><th colspan="2">Festivals</th>
        <tr>
            <td><input type="checkbox" name="fest[]" value="1">Vurige Tongen</td>
          <td><input type="checkbox" name="fest[]" value="2">Solstice</td>
        </tr>
        <tr>
            <td><input type="checkbox" name="fest[]" value="3">Landjuweel</td>
            <td><input type="checkbox" name="fest[]" value="4">Zaterdagen</td>
        </tr>
    </table>

                <table class="center"><th colspan="3">Taken</th>
        <tr>
            <td><input type="checkbox" name="tid[]" value="1">Bar</td>
             <td><input type="checkbox" name="tid[]" value="2">Camping</td>
            <td><input type="checkbox" name="tid[]" value="3">Hygiene</td>
        </tr>
        <tr>
            <td><input type="checkbox" name="tid[]" value="4">Kassa</td>
            <td><input type="checkbox" name="tid[]" value="5">Keuken</td>
            <td><input type="checkbox" name="tid[]" value="6">Munt</td>
        </tr>
                    <tr>
            <td><input type="checkbox" name="tid[]" value="7">Parkeerbeheer</td>
            <td><input type="checkbox" name="tid[]" value="8">Vrijwilligerscoordinatie</td>
            <td><input type="checkbox" name="tid[]" value="9">Kantoor</td>
        </tr>
                    <tr>
            <td><input type="checkbox" name="tid[]" value="10">Runner</td>            
            <td><input type="checkbox" name="tid[]" value="11">Op/Afbouw</td>
            <td><input type="checkbox" name="tid[]" value="12">Techniek</td> 
        </tr>
    </table>

                <tr>
                    <td><button type="submit" name="reg_btn">Aanvallen</button></td>
                </tr>

            </table>
        </form>
</div>
</td></tr></table>
</body>
</html>

crud.php 部分

public function createVolunt($p_fname,$p_lname,$p_dob,$p_adres,$p_pc,$p_loc,$p_coun,$p_phone,$p_phone2,$p_mail){

    try{

        $statement = $this->Db->prepare("INSERT INTO RO_volunt(p_fname,p_lname,p_dob,p_adres,p_pc,p_loc,p_coun,p_phone,p_phone2,p_mail) VALUES (:p_fname,:p_lname,:p_dob,:p_adres,:p_pc,:p_loc,:p_coun,:p_phone,:p_phone2,:p_mail)") ; 
        $statement->bindparam(':p_fname',$p_fname, PDO::PARAM_STR);
        $statement->bindparam(':p_lname',$p_lname,PDO::PARAM_STR);
        $statement->bindparam(':p_dob',$p_dob,PDO::PARAM_STR);
        $statement->bindparam(':p_adres',$p_adres,PDO::PARAM_STR);
        $statement->bindparam(':p_pc',$p_pc,PDO::PARAM_STR);
        $statement->bindparam(':p_loc',$p_loc,PDO::PARAM_STR);
        $statement->bindparam(':p_coun',$p_coun,PDO::PARAM_STR);
        $statement->bindparam(':p_phone',$p_phone,PDO::PARAM_STR);
        $statement->bindparam(':p_phone2',$p_phone2,PDO::PARAM_STR);
        $statement->bindparam(':p_mail',$p_mail,PDO::PARAM_STR);
        $statement->execute();
        $last_id = $this->Db->lastInsertId();

        $statement2 = $this->Db->prepare("INSERT INTO RO_eventsvol(id,e_id) VALUES (:id,:e_id)"); 
        $statement2->bindparam(':e_id',$fest, PDO::PARAM_INT);
        $statement2->bindparam(':id',$last_id, PDO::PARAM_INT);
        foreach ($_POST['fest'] as $fest) {$statement2->execute(); }

        $statement3 = $this->Db->prepare("INSERT INTO RO_tasksvol(id,t_id) VALUES (:id,:t_id)"); 
        $statement3->bindparam(':t_id',$task, PDO::PARAM_INT);
        $statement3->bindparam(':id',$last_id, PDO::PARAM_INT);
        foreach ($_POST['tid'] as $task) {$statement3->execute(); }


    } catch (PDOException $ex){
        echo $ex->getMessage();
        return false;
    }

}
}

【问题讨论】:

  • 嗨 Vivianne,很高兴你解决了这个问题!我们更喜欢这里的自我回答,而不是 SOLVED 附录。我已将其移至下面的答案。非常欢迎您将来这样做,您甚至可能因此获得代表点数。
  • 啊,谢谢您的解释并将其更改为正确的格式!

标签: php forms checkbox pdo sql-insert


【解决方案1】:

(代表 OP 发布)。

已解决:这里是有相同问题的人的正确代码:

 $statement2 = $this->Db->prepare("INSERT INTO RO_eventsvol(id,e_id) VALUES (:id,:e_id)"); 
   foreach ($_POST['fest'] as $fest) {           
            $statement2->bindparam(':e_id',$fest, PDO::PARAM_INT);
            $statement2->bindparam(':id',$last_id, PDO::PARAM_INT);
            $statement2->execute(); } 

            $statement3 = $this->Db->prepare("INSERT INTO RO_tasksvol(id,t_id) VALUES (:id,:t_id)"); 
 foreach ($_POST['tid'] as $task) {            
        $statement3->bindparam(':t_id',$task, PDO::PARAM_INT);
        $statement3->bindparam(':id',$last_id, PDO::PARAM_INT);
        $statement3->execute();
        }

【讨论】:

    【解决方案2】:

    你需要为每个循环绑定参数

     $statement2 = $this->Db->prepare("INSERT INTO RO_eventsvol(id,e_id)` VALUES (:id,:e_id)"); 
       foreach ($_POST['fest'] as $fest) {           
                $statement2->bindparam(':e_id',$fest, PDO::PARAM_INT);
                $statement2->bindparam(':id',$last_id, PDO::PARAM_INT);
                $statement2->execute(); } 
    
    
     $statement3 = $this->Db->prepare("INSERT INTO RO_tasksvol(id,t_id) VALUES (:id,:t_id)"); 
     foreach ($_POST['tid'] as $task) {            
            $statement3->bindparam(':t_id',$task, PDO::PARAM_INT);
            $statement3->bindparam(':id',$last_id, PDO::PARAM_INT);
            $statement3->execute();
            }
    

    【讨论】:

    • 解决了!谢谢!! (唯一的问题是您提供的代码中的 VALUES 之后的错字` ;)) - 但它有效!非常感谢大家!!
    • @VivianneDaniels:理想情况下,如果您可以对您喜欢的答案进行投票,并接受一个给您最大帮助的答案,那就太好了。您没有必须这样做,但建议这样做 - 这是我们在此表达感谢的方式。
    • 是的,已经点击了upvote按钮,但它还没有注册..确实我非常感谢快速响应!
    【解决方案3】:

    您在查询 2 和 3 中输入了错误的绑定参数名称

    $statement2 = $this->Db->prepare("INSERT INTO RO_eventsvol(id,e_id) VALUES (:id,:e_id1)"); 
    $statement2->bindparam(':e_id1',$fest, PDO::PARAM_INT);
    $statement2->bindparam(':id',$last_id, PDO::PARAM_INT);
    foreach ($_POST['fest'] as $fest) {$statement2->execute();
    
    $statement3 = $this->Db->prepare("INSERT INTO RO_tasksvol(id,t_id) VALUES (:id,:t_id1)"); 
    $statement3->bindparam(':t_id1',$task, PDO::PARAM_INT);
    $statement2->bindparam(':id',$last_id, PDO::PARAM_INT);
    foreach ($_POST['tid'] as $task) {$statement3->execute();
    

    会解决的

    【讨论】:

    • 哇 - 谈论由于所有凝视而错过的错误:P 谢谢!
    猜你喜欢
    • 1970-01-01
    • 2013-12-09
    • 2014-12-05
    • 2021-04-03
    • 2020-10-10
    • 2014-10-15
    • 1970-01-01
    • 1970-01-01
    • 2011-09-08
    相关资源
    最近更新 更多