对不起,如果已在某处回答过;我不太确定如何解决问题甚至寻求帮助。
无论如何,我有一个带有三个文本输入框的表单,用户将输入三个歌曲标题。我有简单的PHP设置将这些输入框视为一个数组(因为我可能想要,比如说,将来有100首歌曲)并将歌曲标题写入另一个文档。
<form method="post">
<input type="text" name="songs[]" value="" />
<input type="text" name="songs[]" value="" />
<input type="text" name="songs[]" value="" />
<button type="submit" name="submit" value="submit">Submit</button>
</form>
<?php
if (isset($_POST['submit'])) {
$open = fopen("test.html", "w");
if(empty($_POST['songs'])) { }
else {
$songs = $_POST['songs'];
foreach($songs as $song) {
fwrite($open, $song."<br />");
};
};
};
?>
这可以正确地将歌曲标题写入外部文件。但是,即使输入框为空,外部文件仍将被写入(仅使用<br />
)。我假设if
语句会确保如果方框是空白的,就不会发生任何事情,但事实显然并非如此。
我猜这个阵列并不像我想象的那样空洞,但我不确定它会带来什么影响。知道我做错了吗?
(再说一次,对于PHP来说,我是无能为力的,所以请原谅我,如果我之前已经回答了一百万次,如果我描述的那么可怕,等等。)
答案 0 :(得分:1)
你应该检查每个条目:
<?php
if (isset($_POST['submit'])) {
$open = fopen("test.html", "w");
foreach($_POST['songs'] as $song) {
if(!empty($song)) {
fwrite($open, $song."<br />");
};
};
};
?>
答案 1 :(得分:1)
确实$ _POST ['songs']不是一个空数组,它是一个包含3个空字符串的数组。 您可以使用以下内容清除所有空值:
$song_titles = array_filter($_POST['songs'], function($title) {return (bool) trim($title);});
您还可以对该回调函数进行一些其他检查(白名单仅包括字母数字和其他一些字符(空格,短划线等))。
如果您的PHP版本低于5.3,则必须单独定义回调函数,请参阅http://us2.php.net/manual/en/function.array-filter.php