Код ниже очень прост.PHP использует POST для сбора строки из формы, которую я затем собираюсь обрезать и запустить функцию preg_replace, которая удалит любые специальные символы, кроме одинарных кавычек или дефиса.Имейте в виду, что весь код работает нормально без использования кавычек или дефиса в выражении регулярного выражения.
preg_replace("/[^\w\s'-]/", '', $raw_lemurName);
Эти чистые переменные затем вставляются в базу данных.Apache / 2.4.37.MariaDB.
Когда я задаю lemurName строку типа «Diademed Sifaka <>!», Она работает и возвращает «Diademed Sifaka».
Когда я делаю строку, содержащую одну кавычку,однако, как и «Sifaka Coquerel», операция не завершается, и никакая информация не вставляется.
Я протестировал выражение regex самостоятельно и он работает нормально, кажется, что когда вы начинаете использовать SQL и базы данныхчто он перестает работать.
Стоит отметить:
- с использованием phpMyAdmin.Если я вставлю туда строку, она будет работать нормально, поэтому моя база данных сможет хранить эти значения.
- Пробовал использовать mysqli_real_escape_string () в разных местах, но не повезло, возможно, сделал это неправильно.
- Читая вокруг, я думаю, что это как-то связано с тем, что SQL не позволяет вставлять строки с одинарными кавычками и что сервер автоматически экранирует одинарные кавычки в методе post.
Есть идеи?
Очень признателен.
$raw_lemurName = isset($_POST['lemurName']) ? $_POST['lemurName'] : null;
$raw_lemurLat = isset($_POST['lemurLat']) ? $_POST['lemurLat'] : null;
$raw_family = isset($_POST['family']) ? $_POST['family'] : null;
// выражение, приведенное ниже, кажется, что-то напутало
$c_lemurName = trim(preg_replace("/[^\w\s'-]/", '', $raw_lemurName));
$c_lemurLat = strtolower(trim(preg_replace('/[^\w\s]/', '', $raw_lemurLat)));
$c_family = trim(preg_replace('/[^\w\s]/', '', $raw_family));
if (isset($_POST['submit'])) {
$query1 = "INSERT INTO `lemurs` (`id`, `lemur`, `latin`, `family`) VALUES (NULL, '$c_lemurName','$c_lemurLat','$c_family')";
$run_query = mysqli_query($connection, $query1);
if($run_query){
echo "Data has been inserted";
} else {
echo "Operation Unsuccessful";
}
header("location: index.php");
return;
}