1

所以,我有一个基于用户输入将数据写入文件的代码。基本上用户选择提交时写入文件的日期和锻炼。当我尝试设置它以检查文件中是否已存在字符串(日期)时,我无法使其工作以替换现有行。

将用户输入写入文件的当前代码:

<?php
   include 'index.php';
   $pickdate = $_POST['date'];
   $workout = $_POST['workout'];
   $date = '   \''.$pickdate .'\' : \'<a href="../routines/'.$workout.'" target="_blank"><span>'.basename($workout,'.txt').'</span></a>\',' .PHP_EOL;
   $file = 'test.js';

   // Open the file to get existing content
   $current = file_get_contents($file);

   // Append a new workout to the file
   $current .= $date;
   $current = preg_replace('/};/', "", $current);
   $current = $current.'};';

   // Write the contents back to the file
   file_put_contents($file, $current);
   header("location:index.php");
?>

我的尝试是使用 if 语句,但我再次无法编写将用 if 存在替换该行的代码。这就是我所拥有的:

<?php
   include 'index.php';
   $pickdate = $_POST['date'];
   $workout = $_POST['workout'];
   $date = '   \''.$pickdate .'\' : \'<a href="../routines/'.$workout.'" target="_blank"><span>'.basename($workout,'.txt').'</span></a>\',' .PHP_EOL;
   $file = 'test.js';

   // Open the file to get existing content
   $current = file_get_contents($file);

   if (strpos($current, '   \''.$pickdate .'\'') ) {
     #here is where I struggle#
   }
   else {
    // Append a new workout to the file
   $current .= $date;
   $current = preg_replace('/};/', "", $current);
   $current = $current.'};';

   // Write the contents back to the file
   file_put_contents($file, $current);
   }
  header("location:index.php");
?>

目前它正在这样做

08-04-2014 : Chest
08-05-2014 : Legs
08-04-2014 : Back

我要这个

现在,当用户再次选择 8 月 4 日时,该行将被替换为新的/相同的锻炼选择,具体取决于用户选择的内容。

08-04-2014 : Back
08-05-2014 : Legs

有人可以帮助我努力完成这项工作的部分。非常感谢你。

4

1 回答 1

0

正如 Barmar 在评论中解释的那样:

$current = trim(file_get_contents($file));
$current_lines = explode(PHP_EOL, $current);

/* saved already */
$saved = false;

foreach($current_lines as $line_num => $line) {
    /* either regex or explode, we explode easier on the brain xD */
    list($date_line, $workout_line) = explode(' : ', $line);
    echo "$date_line -> $workout_line \n";

    if($date == $date_line) {
        /* rewrite */
        $current_lines[$line_num] = "$date : $workout";
        $saved = true;
        /* end loop */
        break;
    }        
}

/* append to the end */
if(!$saved) {
    $current_lines[] = "$date : $workout";
}

file_put_contents($file, implode(PHP_EOL, $current_lines));

所以,你分解文件,逐行遍历它,如果找到覆盖该行,如果没有将它附加到数组的末尾,然后将它粘在一起并放回文件中。

你会明白的。

希望能帮助到你。

于 2014-08-04T17:51:12.977 回答