За последние 24 часа нас посетили 37344 программиста и 7916 роботов. Сейчас ищут 1858 программистов ...

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

Тема в разделе "PHP для новичков", создана пользователем zantal, 4 окт 2023.

  1. zantal

    zantal Новичок

    С нами с:
    22 июн 2022
    Сообщения:
    7
    Симпатии:
    0
    Уважаемые коллеги! Задача стояла следующая: из некого текстового 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. ?>
     

    Вложения:

    • 1 (2).jpg
      1 (2).jpg
      Размер файла:
      30,6 КБ
      Просмотров:
      2
    • 2 (2).jpg
      2 (2).jpg
      Размер файла:
      28,3 КБ
      Просмотров:
      3
    • 3.jpg
      3.jpg
      Размер файла:
      37,9 КБ
      Просмотров:
      2
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.874
    Симпатии:
    753
    Адрес:
    Татарстан
    просто посмотрите print_r($_POST); и станет ясно что интерпретатор php тут не при чем....
    не все можно и нужно использовать в качестве имен полей в форме...

    собирайте не имена а значения -
    PHP:
    1. array_push($values_for_delete, $value);
     
    zantal нравится это.
  3. zantal

    zantal Новичок

    С нами с:
    22 июн 2022
    Сообщения:
    7
    Симпатии:
    0
    Но ведь значения в форме "checkbox" это "on". Вроде такого key1 => on, key2 => on и тд
     
  4. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.874
    Симпатии:
    753
    Адрес:
    Татарстан
    zantal нравится это.
  5. zantal

    zantal Новичок

    С нами с:
    22 июн 2022
    Сообщения:
    7
    Симпатии:
    0
  6. Drunkenmunky

    Drunkenmunky Старожил

    С нами с:
    12 авг 2020
    Сообщения:
    1.511
    Симпатии:
    284
    Так и передавайте только номера строк
    Код (Text):
    1. <input type='checkbox' name="name[]" value="234"
     
  7. Vladimir Kheifets

    Vladimir Kheifets Новичок

    С нами с:
    23 сен 2023
    Сообщения:
    485
    Симпатии:
    97
    Адрес:
    Бавария, Германия
    Добрый день!
    Попробуйте сделать так:
    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>
    Удачи!