Есть ли способ передать переменную в PHP при нажатии кнопки? - PullRequest
0 голосов
/ 29 мая 2020

У меня проблема с передачей переменной в функцию PHP. Итак, что я делаю в html или на самом деле PHP, но я делаю часть моего HTML кода с PHP так:

<form action=\"\" method=\"post\">
    <textarea name=\"textarea\" rows=\"8\" cols=\"40\"></textarea>
    <button type=\"button\" class=\"button\" name=\"enterText\" value=\"".$row['Wagon_ID']."\">
        Enter
    </button>
</form>

Теперь это происходит через некоторое время l oop до тех пор, пока в массиве строк больше Wagon_ID. Что я хочу конкретно сделать, так это вызвать функцию при нажатии этой кнопки, но я должен иметь возможность передать Wagon_ID. Я могу сделать это легко, используя <input type="submit"... и сделав значение Wagon_ID, но моя проблема с этим заключается в том, что значение - это Wagon_ID, текст на кнопке также станет Wagon_ID, а текст должен оставаться введенным. Я попробовал использовать тип кнопки и установить значение Wagon_ID, но теперь функция PHP даже не вызывается. Кто-нибудь знает трюк, чтобы я мог использовать этот тип кнопки или сохранить мой текст «Ввод» на кнопке того типа, который я использовал ранее? Заранее спасибо!

Вот как я вызываю buttonclick в PHP:

if (isset($_POST['enterText'])) 
    {
        $text= $_POST['textarea'];
        $wagon=$_POST['enterText'];
        mysqli_query($_SESSION['conn'], "INSERT INTO description (Wagon_ID, textdescription) VALUES ('$wagon','$text')");
    }

1 Ответ

2 голосов
/ 29 мая 2020

Я думаю, что ключевая часть вашего вопроса здесь:

Я могу легко сделать это, используя <input type="submit "... и сделав значение Wagon_ID, но моя проблема с этим поскольку значение - это Wagon_ID, текст на кнопке также станет Wagon_ID, и текст должен оставаться вводимым.

Для этой ситуации нужны скрытые поля. Не переносите фактическую форму данные в элементе пользовательского интерфейса, например в кнопке. Попробуйте это так:

echo '<form action="" method="post">
    <textarea name="textarea" rows="8" cols="40"></textarea>
    <input type="hidden" name="wagonID" value="'.$row['Wagon_ID'].'"/>
    <input type="submit" class="button" name="enterText" value="Enter text" />
</form>';

А в PHP измените

$wagon=$_POST['enterText'];

на

$wagon = $_POST['wagonID'];

Документация на скрытых полях: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/hidden


PS Как видите, вы можете избавиться от всего беспорядочного экранирования двойных кавычек, повторив строку из PHP внутри одинарные кавычки, и он намного более читабелен и менее подвержен ошибкам.


PPS

Предупреждение: Ваш код уязвим для SQL инъекционных атак. Вы следует использовать параметризованные запросы и подготовленные операторы, чтобы предотвратить взлом злоумышленников. вашу базу данных, используя злонамеренные входные значения. http://bobby-tables.com дает объяснение рисков, а также несколько примеров того, как безопасно писать запросы с помощью PHP / mysqli. Никогда не вставляйте необработанные данные прямо в SQL. Ваш код теперь написан так, что кто-то может легко украсть, неправильно изменить или даже удалить ваши данные.

https://phpdelusions.net/mysqli также содержит хорошие примеры написания безопасного SQL с использованием mysqli. Параметризация запросов также значительно снизит риск случайных синтаксических ошибок в результате неэкранированных входных значений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...