如何 - 如果满足条件,则将选择写入文件

时间:2012-05-30 14:55:51

标签: php forms file conditional-statements

我有以下PHP代码,用于检查选中单选按钮中的哪个选项,然后写入同名文件。

例如,来自名为“乐器”的单选按钮组,其中4个选项是

  1. 字符串
  2. 打击乐
  3. 声乐
  4. 如果用户选择“风”,则会创建并写入名为“ wind_instrument.txt ”的文件。如果选择“strings”,它将创建文件“string_instrument.txt”,依此类推。

    这是我的PHP代码:

    if ($_POST['instrument'] == "wind")
    {
    
    
    $lines = file('wind_instrument.txt');
    $fopen = fopen("wind_instrument.txt", "w+");
    
    }
    
    elseif ($_POST['instrument'] == "strings")
    {
    
    $lines = file('strings_instrument.txt');
    $fopen = fopen("strings_instrument.txt", "w+");
    
    }
    
    elseif ($_POST['instrument'] == "percussion")
    {
    
    $lines = file('percussion_instrument.txt');
    $fopen = fopen("percussion_instrument.txt", "w+");
    
    }
    
    elseif ($_POST['instrument'] == "vocal")
    {
    
    $lines = file('vocal_instrument.txt');
    $fopen = fopen("vocal_instrument.txt", "w+");
    
    }
    

    现在,如果满足其中一个条件,则会继续执行我的代码中的下一步:

    fwrite($fopen, ("Instrument: ")."");
    fwrite($fopen, $_POST["instrument"]."\n");
    fwrite($fopen, ("<br>")."\n");
    

    我遇到的问题是,它没有创建文件,我确实设置了权限。

    非常感谢任何帮助,谢谢。

2 个答案:

答案 0 :(得分:3)

你实际上可以做一些重构,以便更容易维护,但这不是你的问题,但我会尽力帮助你。

<?php
  $instruments = array('wind', 'strings', 'percussion', 'vocal');

  if (in_array($_POST['instrument'], $instruments))
  {
    $instrument = $_POST['instrument'];
    $file_handle = fopen($instrument.'_instrument.txt', 'a+');
    $line = 'Instrument: '.$instrument."\n";
    fwrite($file_handle, $line);
  }
?>

重要要知道的是我打开文件的方式。我使用模式 a + 。文档说

  

开放阅读和写作;将文件指针放在文件的末尾。如果该文件不存在,请尝试创建它。

希望有所帮助。

答案 1 :(得分:2)

如果您已经验证您有权打开和写入文件,那么基于条件执行它应该没有问题。我建议您检查$_POST的内容并确保instrument存在且符合您的某个条件。或者,您可以添加else子句,如果未收到有效的工具,则会将提交写入错误文件。如果可行,它将确认问题是POSTed变量,而不是fopen / fwrite。

如果您在项目符号列表中提供的选项是单选按钮的文字值,那么问题在于它们是大写的,而您在if语句中测试的值则不是。要么一致地将它们大写,要么在比较之前使用strtolower()将所有内容转换为一致的大小写。