我正在创建一个将值写入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;
}
如何保存多个复选框数组?
答案 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;
}