【问题标题】:Checkbox with PHP and MYSQL带有 PHP 和 MYSQL 的复选框
【发布时间】:2015-04-16 16:02:27
【问题描述】:

我有两个复选框

<form action="" method="post" enctype="multipart/form-data">
<input type="checkbox" name="file_type" value="1"> Filer<br />
<input type="checkbox" name="file_type" value="1"> Statistik
</form>

我的数据库表 das_custermer_files 上有两行。

第 1 行 = 文件 第 2 行 = 统计数据

我如何检查其中一个并将值放入我的行中。

我已尝试使用此代码

if($_POST['file_type'] == 1){
            mysql_query("INSERT INTO das_custermer_files (url, das_file_categories_id, das_custermers_id, name) 
                         VALUE('$fileurl', 1, $user_custermers_id, '$name')"
                    ) or die(mysql_error());
            }

            elseif($_POST['statistik_type'] == 1){
                mysql_query("INSERT INTO das_custermer_files (url, das_custermer_upload_id, das_custermers_id, name) 
                         VALUE('$fileurl', 1, $user_custermers_id, '$name')"
                    ) or die(mysql_error());
            }
            else{
                echo "no choices";
            }

但如果我只检查其中一个,它仍然会在我的两行中输入值 1。

希望人们理解。如果不。问


我已经做到了。

细码:

html

<form action="" method="post" enctype="multipart/form-data">
    <input type="radio" name="file_type" value="1"> Filer<br />
    <input type="radio" name="file_type" value="2"> Statistik
</form>

PHP

$field = false;

            switch($_POST['file_type'])
            {
                case 1:
                    $field = 'das_file_categories_id'; 
                break;
                case 2:
                    $field = 'das_custermer_upload_id'; 
                break;
                default:
                $field = false;
            }
            if($field)
            {
               mysql_query("INSERT INTO das_custermer_files (url, $field, das_custermers_id, name) 
                         VALUE('$fileurl', 1, $user_custermers_id, '$name')"
                    ) or die(mysql_error());
            }

【问题讨论】:

  • 如果他们都打勾会怎样?也许使用单选按钮来代替
  • 你能告诉我怎么做吗
  • 我在下面添加了我的答案

标签: php mysql checkbox


【解决方案1】:

我的做法是这样的:

我会改用radio 按钮,以确保选择了一种类型。

表格位:

    <input type="radio" name="file_type" value="0" checked="checked"> None<br />
    <input type="radio" name="file_type" value="1"> Filer<br />
    <input type="radio" name="file_type" value="2"> Statistik

PHP 位:

$field = false;

 // set the field name based on the file type selected in the form
switch($_POST['file_type'])
{
    case 1:
        $field = '`das_file_categories_id`';
    break;
    case 2:
        $field = '`das_custermer_upload_id`'; 
    break;
    default:
    $field = false;
}

// if a field has been set ( i.e file_type != 0 ) then build and run the query
if($field)
{

    $query  =   "INSERT INTO `das_custermer_files` (`url`, " . $field . ", `das_custermers_id`, `name`) ";
    $query .=   "VALUES ('" . $fileurl . "', 1, " . $user_custermers_id . ", '" . $name . "')";
    mysql_query($query);
    echo "Inserting to db: " . $query;
} else {
    echo "No field set: ";
    print_r($_POST);
}

值得注意的事情

  • 您正在使用已过时的mysql_query,请参阅此处:http://php.net/manual/en/function.mysql-query.php
  • 即使您使用的是$fileurl$user_custermers_id$name,我也看不到这些设置,所以我假设它们设置在文件中更高的位置

【讨论】:

  • 我的数据库中没有任何内容。但我喜欢单选按钮
  • 我添加了一些 echo 来看看它在做什么......所以运行它并查看输出是什么,它可能有助于诊断问题
【解决方案2】:

您的check_box 名称应该不同。你的也一样。

<input type="checkbox" name="file_type" value="1"> Filer<br />
<input type="checkbox" name="file_type" value="1"> Statistik

【讨论】:

    【解决方案3】:

    HTML代码:

    <form action="test.php" method = 'post'>
    <input type="checkbox" name="file_type[]" value="1"> Filer<br />
    <input type="checkbox" name="file_type[]" value="2"> Statistik
    <input type="submit" value="submit" />
    

    复选框将在数组 $_POST['file_type'] 中包含其值 你可以将它的值传递给 db 如下:-

    if(isset($_POST['file_type'])){
     foreach($_POST['file_type'] as $keys)
       {     
         mysql_query("INSERT INTO das_custermer_files (url, das_file_categories_id,     das_custermers_id, name) 
                     VALUE('$fileurl', $keys, $user_custermers_id, '$name')"
                ) or die(mysql_error());
        }
     }
        else if(isset($_POST['statistik_type'])){
            mysql_query("INSERT INTO das_custermer_files (url, das_custermer_upload_id, das_custermers_id, name) 
                     VALUE('$fileurl', 1, $user_custermers_id, '$name')"
                ) or die(mysql_error());
        }
        else{
            echo "no choices";
        }
    

    这可能是您的要求...

    【讨论】:

      【解决方案4】:

      试试这个。应该可以。

       if(isset($_POST['file_type'])){
              mysql_query("INSERT INTO das_custermer_files (url, das_file_categories_id, das_custermers_id, name) 
                           VALUE('$fileurl', 1, $user_custermers_id, '$name')"
                      ) or die(mysql_error());
              }
      
              else if(isset($_POST['statistik_type'])){
                  mysql_query("INSERT INTO das_custermer_files (url, das_custermer_upload_id, das_custermers_id, name) 
                           VALUE('$fileurl', 1, $user_custermers_id, '$name')"
                      ) or die(mysql_error());
              }
              else{
                  echo "no choices";
              }
      

      【讨论】:

      • 您为两个复选框使用相同的名称。这是错误的。请使用唯一名称
      【解决方案5】:

      你的做法是完全错误的。你应该遵循这个结构

      <form action="test.php" method = 'post'>
          <input type="checkbox" name="file_type" value="1"> Filer<br />
          <input type="checkbox" name="file_type" value="2"> Statistik
          <input type="submit" value="submit" />
      </form>
      

      现在使用 php

      $query  =   '';
      if($_POST['file_type'] == 1){
          $query  =   "INSERT INTO das_custermer_files 
                      (url, das_file_categories_id, das_custermers_id, name) 
                      VALUE
                      ('$fileurl', 1, $user_custermers_id, '$name')";
      }else if($_POST['file_type'] == 2){
          $query  =   "INSERT INTO das_custermer_files 
                      (url, das_custermer_upload_id, das_custermers_id, name) 
                      VALUE
                      ('$fileurl', 1, $user_custermers_id, '$name')";
      }
      
      mysqli_query($query);
      

      【讨论】:

        【解决方案6】:

        你可能忘了&lt;form action = "..." method = "POST"&gt; &lt;/form&gt;

        第一步,你应该做测试:

        print_r($_POST);
        

        你通过这个测试得到了什么? 如果第一步正确(不是空数组),我们可以完成:

        if (isset($_POST['file_type'])) { 
           ... 
        };
        
        // OR use alternative
        if ($_POST['file_type'] == 1) { 
           ... 
        };
        

        【讨论】:

          【解决方案7】:

          单击复选框不会更改 value 属性,但会在圆顶中添加“已选中”,如下所示:

          <input type="checkbox" name="file_type" value="1" checked> Filer<br />
          

          所以复选框的提交值将永远保持在“1”

          编辑

          当你用字符串替换值时,你可以在 php 中检查它。

          HTML

          <form action="" method="post" enctype="multipart/form-data">
          <input type="checkbox" name="file_type" value="Filer"> Filer<br />
          <input type="checkbox" name="file_type" value="Statistik"> Statistik
          </form>
          

          PHP

          if($_POST['file_type'] == "Filer"){
                      mysql_query("INSERT INTO das_custermer_files (url, das_file_categories_id, das_custermers_id, name) 
                                   VALUE('$fileurl', 1, $user_custermers_id, '$name')"
                              ) or die(mysql_error());
                      }
          
                      elseif($_POST['file_type'] == "Statistik"){
                          mysql_query("INSERT INTO das_custermer_files (url, das_custermer_upload_id, das_custermers_id, name) 
                                   VALUE('$fileurl', 1, $user_custermers_id, '$name')"
                              ) or die(mysql_error());
                      }
                      else{
                          echo "no choices";
                      }
          

          【讨论】:

          • 我按照你的意愿做了,并试图让你的代码几乎不受影响。
          • 能否请您替换 echo "no selections"; echo "没有选择 - 提交的值:".$_POST['file_type']; 告诉我它说了什么?
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-04-30
          • 1970-01-01
          • 2014-05-16
          • 1970-01-01
          • 1970-01-01
          • 2012-12-01
          • 1970-01-01
          相关资源
          最近更新 更多