Уважаемые коллеги! Задача стояла следующая: из некого текстового txt файла получить информацию и представить её в браузере в форме списка с возможностью выбора одного или нескольких значений. После выбора ряда пунктов и нажатия клавиши отправить программа должна скорректировать исходный текстовый txt файл, удалив из него отмеченные пользователем строки. Ниже представлен мой код. Проблема заключается в том, что при преобразовании имён переменных (например в $_POST) интерпретатор добавляет вместо пробелов, точек и ещё ряда элементов знак подчеркивания "_" и тем самым мой код записывает с txt файл отличную от исходной информацию. Подскажите, пожалуйста, есть ли в PHP некий инструмент (например функция), позволяющий не добавлять нижние подчеркивания "_" PHP: <!DOCTYPE html> <html lang="ru"> <head> <title>Создание списка строк из файла</title> <meta charset='utf-8'> </head> <body> <?php $list_array = file('list.txt'); // echo '<pre>'; // print_r($list_array); // echo '</pre>'; ?> <form method='post' action='handler.php'> <?php for ($i = 0; $i < count($list_array); $i++) { echo "<input type='checkbox' name='$list_array[$i]'>"; echo "$list_array[$i]<br />"; }; echo "<input type='submit' value='Отправить'>"; ?> </form> </body> </html> Обработчик: PHP: <?php if (!empty($_POST)) { $new_list_array = file('list.txt'); $values_for_delete = array(); foreach ($_POST as $key=>$value) { // $key_mod = str_replace(array("_", "."), " ", $key); array_push($values_for_delete, $key); }; echo '<pre>'; print_r($new_list_array); echo '</pre>'; echo '<pre>'; print_r($values_for_delete); echo '</pre>'; $result_array = array_diff($new_list_array, $values_for_delete); file_put_contents('list.txt', ""); foreach ($result_array as $key=>$value) { file_put_contents('list.txt', $value, FILE_APPEND); }; } else { echo 'Выберите хотя бы один вариант'; }; ?>
просто посмотрите print_r($_POST); и станет ясно что интерпретатор php тут не при чем.... не все можно и нужно использовать в качестве имен полей в форме... собирайте не имена а значения - PHP: array_push($values_for_delete, $value);
не обязательно, задайте их явно просто HTML: <input type='checkbox' name="name" value="value" https://htmlbook.ru/samhtml5/formy/flazhki?ysclid=lnbisl16d7574251216
Добрый день! Попробуйте сделать так: PHP: <?php $fileName = 'list.txt'; $fileNameBac = 'list.bac'; if(isset($_POST['return'])) { copy($fileNameBac, $fileName); } $list_array = file($fileName); $error = ''; $del = false; if(isset($_POST['send'])) { if(empty($_POST['key'])) $error = 'Выберите хотя бы одну строку'; else { copy($fileName, $fileNameBac); foreach ($_POST['key'] as $i) unset($list_array[$i]); file_put_contents($fileName, implode("", $list_array)); $del = true; } } ?> <!DOCTYPE html> <html lang="ru"> <head> <title>Создание списка строк и их удаление из файла</title> <meta charset='utf-8'> </head> <body> <form method='post' action=''> <?php $return = " <input type='submit' name = 'return' value='Вернуть удалённые строки'>"; if(!empty($list_array)) { foreach($list_array as $i=>$line) echo "<input type='checkbox' name='key[]' value='$i'> $line<br>"; echo "$error<br>"; echo "<input type='submit' name = 'send' value='Удалить строки'>"; if($del) echo $return; } else { echo "В файле $fileName все строки удалены<br>"; echo $return; } ?> </form> </body> </html> Удачи!