Проверка значения Datasbase и действие, если это так, PHP
Всем привет,
У меня есть вопрос, у меня есть PHP-код для создания уникального идентификатора, но я хочу быть уверен, что он уникален. Если нет, то он должен выполнить действие: создать новый идентификатор, который еще не существует.
Это мой код.:
<?php function random_strings($length_of_string) { $str_result = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'; return substr(str_shuffle($str_result), 0, $length_of_string); } ob_start(); echo random_strings(10); $Output = ob_get_contents(); ob_end_clean(); $conn = mysqli_connect("localhost", "probleem_uniqid", "Password", "DBname"); if($conn === false){ die("ERROR: Could not connect. " . mysqli_connect_error()); } $Name = $_POST['Name']; $Email = $_POST['Email']; $Phone = $_POST['Phone']; $Problem = $_POST['Problem']; if ($stmt = mysqli_prepare($conn, "INSERT INTO ID (Id, Name, Email, Phone, Problem) VALUES (?, ?, ?, ?, ?)")) { mysqli_stmt_bind_param($stmt, "sssss", $Output, $Name, $Email, $Phone, $Problem); if (mysqli_stmt_execute($stmt)) { echo ' '; echo "<div id=\"PHP-output\"> Succesvol Verstuurd </div>"; } else{ echo ' '; echo "<div id=\"PHP-output\"> Sorry, Het kon niet worden verstuurd, probeer het later nog eens of neem contact op met de klantenservice. $sql. </div>" . mysqli_error($conn); } } mysqli_close($conn); ?>
Что я уже пробовал:
Я не очень много знаю о PHP, но я пытался следовать учебникам yt или веб-учебникам, но я не могу выйти на него.
Richard Deeming
Ваш код уязвим для SQL-инъекция[^]. НИКОГДА используйте конкатенацию строк для построения SQL-запроса. ВСЕГДА используйте параметризованный запрос.
PHP: SQL-инъекция - руководство пользователя[^]
РНР: Подготовленные инструкции и хранимые процедуры - руководство пользователя[^]
Sam Vorst
Как вы это делаете?
Извините за мою неопытность...
Richard Deeming
В документации есть много примеров:
PHP: mysqli::подготовка[^]
РНР: mysqli_stmt::bind_param[^]
Например:
if ($stmt = mysqli_prepare($conn, "INSERT INTO ID (Id, Name, Email, Phone, Problem) VALUES (?, ?, ?, ?, ?)")) { mysqli_stmt_bind_param($stmt, "sssss", $Output, $Name, $Email, $Phone, $Problem); if (mysqli_stmt_execute($stmt)) { ... } }
Sam Vorst
Что будет, если я этого не сделаю? Это небезопасно или что-то в этом роде?
Richard Deeming
Крайне неуверенно.
Хакер может легко прочитать и изменить любые данные в вашей базе данных, минуя любые проверки разрешений, которые вы можете иметь в своем коде.
Они могли бы добавить скрипт "crytominer" в нижней части каждой записи, так что каждый раз, когда ваши пользователи загружают страницу, скрипт использует их компьютер для майнинга биткойнов и отправки их злоумышленнику.
Или они могли бы внедрить скрипт для перенаправления ваших пользователей на фишинговую страницу, или порно-сайт, или что-нибудь еще, что они хотели.
Все, что вы хотели знать о SQL-инъекции (но боялись спросить) | Трой Хант[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? | Обмен Стеками Информационной Безопасности[^]
Sam Vorst
Спасибо, но как применить это в моем коде, или код, который вы отправили, уже был таким?
Richard Deeming
Это был код, который я уже отправил - используйте mysqli_prepare
, mysqli_stmt_bind_param
и mysqli_stmt_execute
для передачи значений параметров отдельно от запроса.
Sam Vorst
Хорошо ли это сейчас? Проверьте мое решение.
Richard Deeming
Выглядит нормально, но вы не должны были публиковать это как решение (если только это действительно не решило вашу проблему).
Нажмите на зеленую ссылку "улучшить вопрос" и обновите свой вопрос вместо этого.
Sam Vorst
О, Извините, я новичок, спасибо за совет
Sam Vorst
Вы знаете ответ на мой первоначальный вопрос? В любом случае спасибо за всю помощь до сих пор!