【问题标题】:How do I insert multiple checkbox values into a txt database?如何将多个复选框值插入 txt 数据库?
【发布时间】:2017-05-09 16:58:48
【问题描述】:

我正在制作一个将值写入 TXT 数据库的 php 表单。 在表单中有多个复选框 (Zona),可以在更多选项中进行选择。如何将所有选定的值写入数据库?

我的代码:

表格:

<html>
<body>
    <form enctype="multipart/form-data" action="action.php" method="post">  
    <label for="guasto">Guasto</label>  
        <input type="text" id="guasto" name="guasto" />  
   <input type="checkbox" name="zona" value="zona 1"> zona 1<br>
  <input type="checkbox" name="zona" value="Zona 2" > zona 2<br>
  <input type="checkbox" name="zona" value="Zona 3" > zona 2<br>
    <label for="causa">Causa Guasto</label>  
        <input type="text" id="causa" name="causa" />  
    <label for="risoluzione">Tempi di risoluzione</label>  
        <input type="text" id="risoluzione" name="risoluzione" />  

        <input type="submit" name="Salva" value="Salva" />  
    </form>  
</form>
</body>
</html>

Action.php

include("setting.php");



/*************************
SAVE
**************************/
if(isset($_POST['Salva']))
    {
    if(!is_writable($my_database_txt)){
        exit("The file does not have write permissions!");
        }
    // 
    $bad_char = array("|", "\r\n", "\r", "\n");
        $guasto = str_replace($bad_char, "", $_POST['guasto']);  
        $zona = str_replace($bad_char, "",$_POST['zona']);  
        $causa = str_replace($bad_char, "", $_POST['causa']);  
        $risoluzione = str_replace($bad_char, "", $_POST['risoluzione']);
    // 
    $open = fopen($my_database_txt, "a+");
    // scriviamo i dati separati dal carattere separatore
    fwrite($open, $guasto."|".$zona."|".$causa."|".$risoluzione."\r\n"); 
    //   

    fclose($open);

    // 
    header("location: vista.php");
    exit;
    }

如何保存多个复选框数组?

【问题讨论】:

  • 您可以使用 foreach 循环遍历所有 $_POST 变量。如果您首先使用 print_r($_POST); 来查看 $_POST 有什么,它将对您有很大帮助。 foreach 的示例foreach($_POST as $currentData){ fwrite($open, $currentData . "\r\n") }
  • 你需要name="zona[]"

标签: php arrays database checkbox


【解决方案1】:

当您处理多个checkbox 时,请始终牢记一件事。要么给它们不同的名称,要么名称必须是一个数组,以便它可以在其中保存多个值。在你的情况下:

<input type="checkbox" name="zona" value="zona 1"> zona 1<br>
<input type="checkbox" name="zona" value="Zona 2" > zona 2<br>
<input type="checkbox" name="zona" value="Zona 3" > zona 2<br>

这 3 个复选框具有相同的名称。当所有这三个都被选中时,最后一个选择会覆盖之前的选择值。

所以要么将它们的名称更改为不同的名称,要么将名称设为数组,如:

<input type="checkbox" name="zona[]" value="zona 1"> zona 1<br>
<input type="checkbox" name="zona[]" value="Zona 2" > zona 2<br>
<input type="checkbox" name="zona[]" value="Zona 3" > zona 2<br>

您可以在表单提交时获得它的值,例如:

$zona = $_POST['zona'];

这里$zona 是一个数组,使用foreach() 来获取它的各个元素。

【讨论】:

    【解决方案2】:

    您需要使用 zona[] 作为复选框名称,以便它将值以数组形式存储。否则, $_POST 将始终返回您最后检查的项目。下面是完整的修改

    <html>
    <body>
        <form enctype="multipart/form-data" action="action.php" method="post">  
        <label for="guasto">Guasto</label>  
            <input type="text" id="guasto" name="guasto" />  
       <input type="checkbox" name="zona[]" value="zona 1"> zona 1<br>
      <input type="checkbox" name="zona[]" value="Zona 2" > zona 2<br>
      <input type="checkbox" name="zona[]" value="Zona 3" > zona 2<br>
        <label for="causa">Causa Guasto</label>  
            <input type="text" id="causa" name="causa" />  
        <label for="risoluzione">Tempi di risoluzione</label>  
            <input type="text" id="risoluzione" name="risoluzione" />  
    
            <input type="submit" name="Salva" value="Salva" />  
        </form>  
    </form>
    </body>
    </html>
    

    对于 Action.php 文件,我使用 implode 函数来使用逗号粘合 zona。无论如何,您可以修改它以满足您的要求。

    /*************************
    SAVE
    **************************/
    if(isset($_POST['Salva']))
        {
        if(!is_writable($my_database_txt)){
            exit("The file does not have write permissions!");
            }
        // 
        $bad_char = array("|", "\r\n", "\r", "\n");
            $guasto = str_replace($bad_char, "", $_POST['guasto']);  
    
            //Note: glue the array using comma through implode function
            $zona = str_replace($bad_char, "",implode(",", $_POST['zona']);  
            $causa = str_replace($bad_char, "", $_POST['causa']);  
            $risoluzione = str_replace($bad_char, "", $_POST['risoluzione']);
        // 
        $open = fopen($my_database_txt, "a+");
        // scriviamo i dati separati dal carattere separatore
        fwrite($open, $guasto."|".$zona."|".$causa."|".$risoluzione."\r\n"); 
        //   
    
        fclose($open);
    
        // 
        header("location: vista.php");
        exit;
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-07-28
      • 1970-01-01
      • 1970-01-01
      • 2014-12-15
      • 1970-01-01
      • 2017-10-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多