Проблема с обработкой форм PHP

99
13 октября 2019, 08:00

Создал скрипт который должен реагировать на нажатие кнопки (с произвольным именем из 1 символа), однако при выполнении ничего не происходит и возвращается ошибка:

Notice: Undefined index: name in /var/ex/index.php on line 5.

Код:

<form action="" method="POST">
  <p><button type="submit" name="1" class="btn">1</button></p>
</form>
<?php
if ( isset ( $_POST[((preg_match('(.)',$_POST['name'])))] ) )
    {
        echo 'Кнопка нажата!';
    }
?>
Answer 1
  1. Давать название кнопкам лучше логическое, так как у вас может быть 10 кнопок+модальные окна и прочее.. Например:

<button type="submit" name="testClick" class="btn">Проверка нажатия</button>

  1. Вы кнопке объявили name="1", а на сервере проверяете приход неведомой кнопки или поля $_POST['name']!

  2. Это вообще сказка)

    if ( isset ( $_POST[((preg_match('(.)',$_POST['name'])))] ) ) 
    

    Error: There is 1 predefined variables that should be treated as an ['array']:

Если вы так будите проверять 20 полей, то вскоре сами запутаетесь что делаете. Универсальная проверка:

if ( isset ( $_POST['testClick'] ) ) {
    # do something, for example:
    echo 'Ура! Кнопка нажата!';
}

UPD решение вашей задачи (сохраните как index.php):

<?php
ini_set('error_reporting', E_ALL);
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
mb_internal_encoding("UTF-8");
if ( isset ( $_POST['testClick'] ) ) {
    # do something, for example:
    echo 'Ура! Кнопка нажата!';
    echo $_POST['testClick'];
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <form action="" method="post">
        <button type="submit" name="testClick" class="btn" value="1"> Кнопка 1</button>
    </form>
</body>
</html>

Если вам надо много кнопок, то каждой кнопке вешаем класс и пишем скрипт который меняет значение кнопки в форме:

$('body').on('click', '.check', function(e){ 
   e.preventDefault(); 
   $('button[name="testClick"]').val( $(this).val() ); 
});
<?php 
ini_set('error_reporting', E_ALL); 
ini_set('display_errors', 1); 
ini_set('display_startup_errors', 1); 
mb_internal_encoding("UTF-8"); 
 
if ( isset ( $_POST['testClick'] ) ) { 
    # do something, for example: 
    echo 'Ура! Кнопка нажата!'; 
    echo $_POST['testClick']; 
 
} 
 
?> 
 
<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <meta name="viewport" content="width=device-width, initial-scale=1.0"> 
    <meta http-equiv="X-UA-Compatible" content="ie=edge"> 
    <title>Document</title> 
</head> 
<body> 
 
    <button type="submit" name="check1" class="btn check" value="1"> Кнопка 1</button> 
    <button type="submit" name="check2" class="btn check" value="2"> Кнопка 2</button> 
    <button type="submit" name="check3" class="btn check" value="3"> Кнопка 3</button> 
    <button type="submit" name="check4" class="btn check" value="4"> Кнопка 4</button> 
 
    <form action="" method="post"> 
        <button type="submit" name="testClick" class="btn" value=""> Кнопка 1</button> 
    </form> 
 
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> 
 
</body> 
</html>

Answer 2

Имя у вашего button -> "1" а вы пытаетесь его получить как "name", value вообще не указан

и лучше уж использовать чем пытаться получить value из button

READ ALSO
Вывод контента с разных страниц на PHP [закрыт]

Вывод контента с разных страниц на PHP [закрыт]

Всем привет, имеется данный код на PHP, который парсит контент с одной страницыА как вывести например, контент с разных страниц

107
Проблема с поиском в глубину

Проблема с поиском в глубину

написал рекурсивную реализацию поиска в глубину, которая отлично работает:

127