【问题标题】:Checkboxes in PHP using an arrayPHP中使用数组的复选框
【发布时间】:2014-02-14 08:12:18
【问题描述】:

我有一项任务要求我创建两个模拟音乐服务,每个服务都有一个可供购买的小型歌曲库。如果我能弄清楚如何完成一项工作,那么其余的大部分应该都很简单。我设法让复选框在我的文件中工作一次,但我非常轻微地修改了一件事,现在整个事情都拒绝工作。我需要知道的是如何使用文本文件(我将其放入数组中)生成多个复选框,保存选定的选项,并将其放入新的文本文件中以供另一个 .php 事物读取。这是我目前所拥有的。

<html>
<?php
//Get contents from zmzonSongs.txt file, put into array.
$songList = explode("\n", file_get_contents('zmzonSongs.txt'));

//Print songs to be selected.
foreach($songList as $songs){
    echo "<br/><input type='checkbox' name=\'$songList[]\' value='$songs />$songs<br>";
}
?>

</html>

我需要立即帮助。任务即将到期,我正在努力完成这项工作。我需要这样做,以便在选择用户想要的任何歌曲之后,可以将数组的内容写入某个文件。

【问题讨论】:

  • .....value='$songs
  • 我刚才尝试修复它并没有解决任何问题。
  • 好吧,我刚刚设法让复选框再次工作。显然我没有更改它的权限或其他东西,但现在我需要知道如何将检查的所有内容逐行移动到文本文件中。

标签: php html checkbox


【解决方案1】:
<?php

$songs = explode("\n", trim("
Song #1
Song #2
Song #3
Song #4
Song #5
Song #6
Song #7
"));

print_r($songs);

while ($song = array_shift($songs)) {
    $song = trim(htmlentities($song));

    echo "
<input type='checkbox' name='songList[]' value='$song'/> $song
";
}

生产:

Array
(
    [0] => Song #1
    [1] => Song #2
    [2] => Song #3
    [3] => Song #4
    [4] => Song #5
    [5] => Song #6
    [6] => Song #7
)

<input type='checkbox' name='songList[]' value='Song #1'/> Song #1

<input type='checkbox' name='songList[]' value='Song #2'/> Song #2

<input type='checkbox' name='songList[]' value='Song #3'/> Song #3

<input type='checkbox' name='songList[]' value='Song #4'/> Song #4

<input type='checkbox' name='songList[]' value='Song #5'/> Song #5

<input type='checkbox' name='songList[]' value='Song #6'/> Song #6

<input type='checkbox' name='songList[]' value='Song #7'/> Song #7

http://codepad.org/fK187pfz

还有文件保存位:

http://us3.php.net/function.file-put-contents

if (is_array($_POST['songList'])
     && !empty($_POST['songList'])) {
    $songList = implode("\n", $_POST['songList']);
    $songList = filter_var($songList, FILTER_SANITIZE_STRING);

    file_put_contents($songList, '/your/path/to/directory/songList.txt');
}

如果您想删除所有歌曲,我会让您自己解决。但是,我建议您在 submit 按钮上使用 name 属性...

不过,您的讲师可能希望您执行 fopen()/fwrite()/fclose() 过程,因此我会查看 PHP 手册以了解如何执行此操作的示例。

【讨论】:

  • 我的 .txt 文件中有 10 首歌曲,如果将更多歌曲添加到文本文件中,该代码将更加通用。我该怎么做呢?
  • explode 中的字符串替换为您对file_get_contents() 的调用。键盘不允许该功能,所以我无法证明这一点。您可能还想将&lt;br&gt; 添加到echo'd 行的末尾。
  • 我可能还会在它周围使用label,这样它很容易点击:codepad.org/GkhzIzUu 请注意,我使用$song而不是$songList作为行变量,因为你得到一个@ 987654339@ 来自 songs 列表,然后选择的 checklist 是实际的 songList。正确命名变量有助于避免混淆。
【解决方案2】:

我想也许你的 name="$songList[]" 不需要 $。

在将复选框从 HTML 表单发送到 PHP 数组时,根据我的经验,它不是必需的。

foreach($songList as $songs){
    echo "<br/><input type='checkbox' name='songList[]' value='$songs' />$songs<br>";
}

【讨论】:

  • 另外,name= 周围的那些转义也是不必要的。
  • 有一次我设法让这件事发挥作用,它有逃脱的机会。之后我几乎立即尝试运行它,但页面上没有显示任何内容。
  • 双引号字符串不需要连接变量插值;单引号字符串可以。
猜你喜欢
  • 2011-08-11
  • 2012-08-16
  • 2011-09-28
  • 1970-01-01
  • 2018-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-09
相关资源
最近更新 更多