【问题标题】:Error when submitting checkbox to MySQL向 MySQL 提交复选框时出错
【发布时间】:2014-06-12 02:25:41
【问题描述】:

我有以下用于将表单提交到数据库的 php 代码,唯一的问题是复选框...在提交表单时会出现这种情况

警告:join() [function.join]:第 16 行 /srv/disk6/1662822/www/website.co.nf/connect-mysql.php 中传递的参数无效

<?php
    $host="host.com" ;
    $username="1662822_db1" ;
    $password="awesomepassword" ;
    $db_name="1662822_db1" ;
    $tbl_name="courses" ;
        $dbcon = mysqli_connect("$host","$username","$password","$db_name") ;           

        if (!$dbcon) {
        die('error connecting to database'); }

        echo 'Courses successfully registerd , ' ;  

    // escape variables for security
    $studentid = mysqli_real_escape_string($dbcon, $_POST['studentid']); echo $studentid;
    **$ckb = join (', ', $_POST['ckb']);** 


    **$sql="INSERT INTO courses (studentid, ckb)
    VALUES ('$studentid', '$ckb')";**

    if (!mysqli_query($dbcon,$sql)) {
    die('Error: ' . mysqli_error($dbcon));
}
echo "  Thank you for using IME Virtual Registeration  ";   
        mysqli_close($dbcon);
?>

错误是 警告: join() [function.join]:第 16 行 /srv/disk6/1662822/www/website.com/connect-mysql.php 中传递的参数无效

我明白它与 join 函数有关(显然),但我不明白它是什么......

复选框的 HTML 代码

<input type="checkbox" name="ckb" value="strenthofmaterials";>
<label for="StrengthofMaterials"> Strength Of Materials </label>
<input type="checkbox" name="ckb" value="dynamics";>
<label for="StrengthofMaterials"> dynamics </label>

它适用于所有其他选择,只需更改每个复选框的值

另一条信息,mysql数据库中的ckb字段类型为tinyint,默认值为0 ...我猜它不是我要找的类型..?

【问题讨论】:

  • $_POST['ckb'] 可能不是数组 .. 试试 var_dump($_POST['ckb']); 并在此处检查或发布。
  • 以确保我得到你......表单本身的数组对吗? name=ckb[] 而不仅仅是 name=ckb ?
  • 我不知道您的 &lt;form&gt; 的结构。您需要发布它,以便任何人都可以轻松地帮助您。
  • 就像这样 所有其他选择仅更改值..
  • @ShankarDamodaran I trid var_dump($_POST['ckb']);但它没有工作

标签: php html sql forms checkbox


【解决方案1】:

您的复选框应该是数组的形式...

<input type="checkbox" name="ckb[]" value="strenthofmaterials";>
<label for="StrengthofMaterials"> Strength Of Materials </label>
<input type="checkbox" name="ckb[]" value="dynamics";>
<label for="StrengthofMaterials"> dynamics </label>

注意:它是ckb[] 而不仅仅是ckb

【讨论】:

  • 已修复,但仍然出现相同的错误“课程已成功注册,2012025060string(6)“fluid2”警告:join() [function.join]:/srv/disk6/1662822/ 中传递的参数无效www/imejo.co.nf/connect-mysql.php 第 16 行 感谢您使用 IME 虚拟注册”
  • @Azizi, 将 tinyint 类型改为varchar(100)
  • 仍然给出相同的消息,我注意到它总是最后一个选中的复选框出现在错误的开头,例如,如果我选择动态、强度和流体 2 ...消息出现 string(6)"流体 2" .. 等等,用于不同的选择
【解决方案2】:
$ckb = array();
foreach($_POST['checkbox'] as $val){
    $ckb[] = (int) $val;
}
$ckb = implode(',', $ckb);

试试这个。 $ckb 应该是一个数组。 出于安全目的,$val 被转换为整数。

【讨论】:

  • 仍然给出同样的错误信息 Courses successful registered , 2012025060string(6) "fluid2" 警告:join() [function.join]: Invalid arguments pass in /srv/disk6/1662822/www/imejo第16行.co.nf/connect-mysql.php 感谢您使用IME虚拟注册
  • 取决于我选择的内容,它会给出 sting(6)"fluid2" string(8)"fluidlab" 我定义的类型是否错误?...等
  • @Azizi 使用此代码,您将获得“join()”。?当我运行该代码时它工作正常
  • @Azizi 把$ids改成$ckb,然后用print_r($ckb);出口;并检查您是否在其中获得了价值,并且您是否按照 Shankar 的建议进行了更改。?
  • 完成,仍然报同样的错误...这是另一个屏幕截图...i.imgur.com/R0VaApN.png
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-06
  • 1970-01-01
  • 2013-01-21
  • 2014-09-20
  • 2014-05-31
  • 2012-05-23
相关资源
最近更新 更多