【问题标题】:PHP multiple checkbox to databasePHP多个复选框到数据库
【发布时间】:2014-06-23 20:31:33
【问题描述】:

您好,我一直在尝试使用多个复选框将信息输入到数据库中,我使用 [] 并带有复选框名称,但“数组”已保存到数据库。我应该在哪里输入什么代码才能正常工作?谢谢!

这是我的表单代码:

<?php
require_once('connection.php');

if(isset($_GET['process']))

    {
    $query = "Insert INTO `lista_precios` (Marca) values('$_POST[Marca]')";
    //echo $query; exit;
    $result = mysql_query($query) or die(mysql_error());
    if(!$result)
    {
       $msg = "not Inserted";
       }
       else
       {
       $msg = "Inserted";
       header("location:form.php?m=".$msg);
    }
   }
?>

<method="post" action="form.php?process">
<p>MARCA: <br><br>
<input type="checkbox" name="Marca" value="ACER">ACER     
<input type="checkbox" name="Marca" value="AOC">AOC 
<input type="checkbox" name="Marca" value="APPLE">APPLE

<input type="submit" name="Submit" value="Submit" />


</form>

这是我的连接:

<?php


$link=mysql_connect("xxxx","xxxx","xxxx");
  $database='xxxxxxx';             
  if (!$link)
  die('Failed to connect to Server'.mysql_error());
  $db=mysql_select_db($database, $link);
  session_start();
  if(!$db)
  die('Failed to select Data Base '.mysql_error());


?>

【问题讨论】:

  • 是否要将所有复选框值保存在单行中。然后这样做代替 POST implode(", ", $_POST['Marca'])
  • 我把它放在代码的什么地方?感谢您的回复
  • 内爆将把 post 数组中的所有三个值用逗号分隔,这样你就会得到像 val1,val2,val3 这样的值

标签: php mysql database checkbox database-connection


【解决方案1】:

首先,您需要设置您的checkboxes names 并将其转为name=Marca[]

<form method="post" action="form.php?process">
    <p>MARCA: <br><br>
    <input type="checkbox" name="Marca[]" value="ACER">ACER
    <input type="checkbox" name="Marca[]" value="AOC">AOC
    <input type="checkbox" name="Marca[]" value="APPLE">APPLE

    <input type="submit" name="Submit" value="Submit" />
</form>

然后在您的form.php 上处理这些值:

注意:你必须明白,你不能只是把$_POST['Marca'] 连接到字符串中,你必须获取每个值并构建插入查询。

if(isset($_GET['process'])) {
    $marca = isset($_POST['Marca']) ? $_POST['Marca'] : null;
    if(count($marca) < 3) {
        // your validation that no checkboxes were selected
        $msg = 'You need to select at least 3 values';
        header("Location: form.php?m=".$msg);
    }

    $values = implode(',', $marca);
    $statement = "INSERT INTO `lista_precios` (`Marca`) VALUES ('$values');";
    // should result into
    // INSERT INTO `lista_precios` (`Marca`) VALUES ('ACER,AOC,APPLE');
    // then continue on your query code
    $query = mysql_query($statement);
    $msg = ($query && mysql_affected_rows() > 0) ? 'Inserted' : 'Not Inserted';
    header("Location: form.php?m=".$msg);
}

【讨论】:

  • 感谢您的回复!对不起,我没有很好地解释自己。我想要的是,如果所有 3 个都选中,它们将保存在同一块的 db 上。 MARCA:同一Id下的ACER、AOC、APPLE
  • @user3610477 如果需要将它们插入到'ACER,AOC,APPLE 之类的格式中,则需要使用implode() 函数。关于检查 3 个值,只需在数组上使用 count() 看看它是否确实是 3. 检查编辑
  • 哇。非常感谢...现在我有了一些想法。对不起,我一直在做的是观看 youtube 视频。对此,我真的非常感激。如果我需要你的帮助,我会发表评论!
  • 如果添加另一组复选框但不添加 MARCA,代码将如何更改。让我们将它们命名为 COLOR 只是向我展示 php 不需要表单。 tks
  • 如果您想在同一个语句中添加另一个复选框插入,您可以重复使用相同的方法,并将其附加到查询中,例如:INSERT INTO yourtable (Marca, Color) VALUES ('ACER,AOC,APPLE', 'yourcolors')
【解决方案2】:

你可以试试这个……

<?php
require_once('connection.php');

if(isset($_GET['process']))
$marc = implode(", ", $_POST['Marca']); <== add this


    {
    $query = "Insert INTO `lista_precios` (Marca) values('" . $marc . "')"; <== change this
    //echo $query; exit;
    $result = mysql_query($query) or die(mysql_error());
    if(!$result)
    {
       $msg = "not Inserted";
       }
       else
       {
       $msg = "Inserted";
       header("location:form.php?m=".$msg);
    }
   }
?>

<method="post" action="form.php?process">
<p>MARCA: <br><br>
<input type="checkbox" name="Marca[]" value="ACER">ACER <==change this     
<input type="checkbox" name="Marca[]" value="AOC">AOC  <==change this
<input type="checkbox" name="Marca[]" value="APPLE">APPLE <==change this

<input type="submit" name="Submit" value="Submit" />


</form>

【讨论】:

  • 泰。但更改后页面甚至无法加载。
【解决方案3】:

至少使用 MySQLi 而不是已弃用的 MySQL。试试这个:

connection.php

<?php

$con=mysqli_connect("YourHost","YourUsername","YourPassword","YourDatabase");

if(mysqli_connect_errno()){

echo "Error".mysqli_connect_error();
}

?>

您的文件:

<html>
<body>

<?php

include('connection.php');

if(isset($_POST['Submit'])){ /* IF FORM IS SUBMITTED */

        if(!empty($_POST['Marca'][0])){ /* IF THE SUBMITTED CHECKBOX IS SELECTED */

        $acer=mysqli_real_escape_string($con,$_POST['Marca'][0]); /* ESCAPE STRING */

        } /* END OF IF NOT EMPTY MARCA 0 */

        else { $acer=""; }

        if(!empty($_POST['Marca'][1])){ /* IF THE SUBMITTED CHECKBOX IS SELECTED */

        $aoc=mysqli_real_escape_string($con,$_POST['Marca'][1]); /* ESCAPE STRING */

        } /* END OF IF NOT EMPTY MARCA 1 */

        else { $aoc=""; }

        if(!empty($_POST['Marca'][2])){ /* IF THE SUBMITTED CHECKBOX IS SELECTED */

        $apple=mysqli_real_escape_string($con,$_POST['Marca'][2]); /* ESCAPE STRING */

        } /* END OF IF NOT EMPTY MARCA 2 */

        else { $apple=""; }

    $overalldata=$acer.", ".$aoc.", ".$apple;

    $query = "INSERT INTO lista_precios (Marca) VALUES ('$overalldata')"; 
    $result = mysqli_query($con,$query); /* INSERT QUERY */
    echo "Inserted data properly.<br>";

} /* END OF ISSET SUBMIT */

?>

<form method="POST" action=""> <?php /* SUBMIT PAGE ON ITSELF */ ?>
<p>MARCA: <br><br>

<?php
echo "<input type='checkbox' name='Marca[0]' value='ACER'>ACER";
echo "<input type='checkbox' name='Marca[1]' value='AOC'>AOC";
echo "<input type='checkbox' name='Marca[2]' value='APPLE'>APPLE";
?>

<input type="submit" name="Submit" value="Submit" />


</form>

</body>
</html>

【讨论】:

  • 感谢您的回复!对不起,我没有很好地解释自己。我想要的是,如果所有 3 个都选中,它们将保存在同一块的 db 上。 MARCA:同一Id下的ACER、AOC、APPLE
猜你喜欢
  • 2020-02-20
  • 1970-01-01
  • 2014-04-18
  • 1970-01-01
  • 2018-05-08
  • 2021-12-07
  • 1970-01-01
  • 1970-01-01
  • 2013-06-07
相关资源
最近更新 更多