Преобразования имен переменных в PHP

Уважаемые коллеги! Задача стояла следующая: из некого текстового txt файла получить информацию и представить её в браузере в форме списка с возможностью выбора одного или нескольких значений. После выбора ряда пунктов и нажатия клавиши отправить программа должна скорректировать исходный текстовый txt файл, удалив из него отмеченные пользователем строки.

Ниже представлен мой код. Проблема заключается в том, что при преобразовании имён переменных (например в $_POST) интерпретатор добавляет вместо пробелов, точек и ещё ряда элементов знак подчеркивания «_» и тем самым мой код записывает с txt файл отличную от исходной информацию. Подскажите, пожалуйста, есть ли в PHP некий инструмент (например функция), позволяющий не добавлять нижние подчеркивания «_»

PHP:
  1. <!DOCTYPE html>
  2. <html lang=»ru»>
  3.     <head>
  4.         <title>Создание списка строк из файла</title>
  5.         <meta charset=»utf-8″>
  6.     </head>
  7. <body>
  8.     <?php
  9.        $list_array = file(‘list.txt’);
  10. //       echo ‘<pre>’;
  11. //       print_r($list_array);
  12. //       echo ‘</pre>’;
  13.     ?>
  14.         <form method=’post’ action=’handler.php’>
  15.         <?php
  16.             for ($i = 0; $i < count($list_array); $i++) {
  17.                 echo «<input type=»checkbox» name=»$list_array[$i]»>»;
  18.                 echo «$list_array[$i]<br />»;
  19.             };
  20.             echo «<input type=»submit» value=»Отправить»>»;
  21.         ?>
  22.         </form>
  23. </body>
  24. </html>

Обработчик:

PHP:
  1. <?php
  2.  
  3. if (!empty($_POST)) {
  4.     $new_list_array = file(‘list.txt’);
  5.     $values_for_delete = array();
  6.     foreach ($_POST as $key=>$value) {
  7.     //    $key_mod = str_replace(array(«_», «.»), » «, $key);
  8.         array_push($values_for_delete, $key);
  9.     };
  10.  
  11.     echo ‘<pre>’;
  12.     print_r($new_list_array);
  13.     echo ‘</pre>’;
  14.  
  15.     echo ‘<pre>’;
  16.     print_r($values_for_delete);
  17.     echo ‘</pre>’;
  18.    
  19.     $result_array = array_diff($new_list_array, $values_for_delete);
  20.     file_put_contents(‘list.txt’, «»);
  21.     foreach ($result_array as $key=>$value) {
  22.         file_put_contents(‘list.txt’, $value, FILE_APPEND);
  23.     };
  24. } else {
  25.     echo ‘Выберите хотя бы один вариант’;
  26. };
  27.  
  28. ?>
 

просто посмотрите print_r($_POST); и станет ясно что интерпретатор php тут не при чем….
не все можно и нужно использовать в качестве имен полей в форме…

собирайте не имена а значения —

PHP:
  1. array_push($values_for_delete, $value);
 

Но ведь значения в форме «checkbox» это «on». Вроде такого key1 => on, key2 => on и тд

 

Так и передавайте только номера строк

Код (Text):
  1. <input type=»checkbox» name=»name[]» value=»234″
 

Добрый день!
Попробуйте сделать так:

PHP:
  1. <?php
  2. $fileName = ‘list.txt’;
  3. $fileNameBac = ‘list.bac’;
  4. if(isset($_POST[‘return’]))
  5. {
  6.     copy($fileNameBac, $fileName);
  7. }
  8. $list_array = file($fileName);
  9. $error = »;
  10. $del = false;
  11. if(isset($_POST[‘send’]))
  12. {
  13.     if(empty($_POST[‘key’]))
  14.         $error = ‘Выберите хотя бы одну строку’;
  15.     else
  16.     {
  17.         copy($fileName, $fileNameBac);
  18.         foreach ($_POST[‘key’] as $i)
  19.             unset($list_array[$i]);    
  20.         file_put_contents($fileName, implode(«», $list_array));
  21.         $del = true;
  22.     }
  23. }
  24. ?>
  25. <!DOCTYPE html>
  26. <html lang=»ru»>
  27. <head>
  28.     <title>Создание списка строк и их удаление из файла</title>
  29.     <meta charset=»utf-8″>
  30. </head>
  31. <body>
  32. <form method=’post’ action=»>
  33. <?php
  34. $return = » <input type=»submit» name=»return» value=»Вернуть удалённые строки»>»;
  35. if(!empty($list_array))
  36. {
  37.     foreach($list_array as $i=>$line)
  38.         echo «<input type=»checkbox» name=»key[]» value=»$i«> $line<br>»;
  39.     echo «$error<br>»;
  40.     echo «<input type=»submit» name=»send» value=»Удалить строки»>»;
  41.     if($del)
  42.         echo $return;
  43. }
  44. else
  45. {
  46.     echo «В файле $fileName все строки удалены<br>»;
  47.     echo $return;
  48. }
  49. ?>
  50. </form>
  51. </body>
  52. </html>

Удачи!

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *