如何在txt数据库中插入多个复选框值?

时间:2017-05-09 07:50:00

标签: php arrays database checkbox

我正在创建一个将值写入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;
    }

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

2 个答案:

答案 0 :(得分: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()来获取其各自的元素。

答案 1 :(得分:0)

您需要使用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;
    }