Я добавляю функцию регистрации в личный проект PHP, однако при вставке данных в базу данных MySQL она записывает фамилию в виде массива, а не строки. Столбец в базе данных показывает слово «Массив» вместо настоящего имени, а echo mysqli_info($conn); возвращает «Преобразование массива в строку в…». Есть ли способ решить эту проблему? или я что то не так делаю?
Структура базы данных Структура базы данных
Форма введите описание изображения здесь
Результат базы данных введите описание изображения здесь
HTML
<form action = "includes/signup-handler.php" method = "post" class = "signup-form">
<div class = "form-group">
<input type = "text" name = "firstName" id = "firstName" class = "form-control" placeholder = "first name">
</div>
<div class = "form-group">
<input type = "text" name = "lastName" id = "lastName" class = "form-control" placeholder = "last name">
</div>
<div class = "form-group">
<input type = "email" name = "email" id = "email" class = "form-control" placeholder = "email address">
</div>
<div class = "form-group">
<input type = "password" name = "password" id = "password" class = "form-control" placeholder = "password">
</div>
<div class = "form-group">
<input type = "password" name = "repeatPassword" id = "password" class = "form-control" placeholder = "confirm password">
</div>
<button type = "submit" class = "btn btn-success" name = "submit">Sign up</button>
</form>И обработчик PHP;
if (isset($_POST['submit'])){
require 'connection.php';
$firstName = $_POST['firstName'];
$lastName = $_POST['lastName'];
$email = $_POST['email'];
//Check for validation
} elseif (!filter_var($email, FILTER_VALIDATE_EMAIL) && filter_var($email, FILTER_SANITIZE_EMAIL)){
header("Location: ../register.php?error=invalidemail");
exit();
}
elseif (!preg_match("/^[a-zA-Z0-9]*$/", $firstName, $lastName)) {
header("Location: ../register.php?error=invalidname&email = ".$email);
exit();
}
//Create prepared statements for validation
else {
$selectQuery = "SELECT * FROM users WHERE email=?";
$statement = mysqli_stmt_init($conn);
if (!mysqli_stmt_prepare($statement, $selectQuery)){
header("Location: ../register.php?error=sqlerror");
exit();
}else{
mysqli_stmt_bind_param($statement, "s", $email);
mysqli_stmt_execute($statement);
mysqli_stmt_store_result($statement);
$resultCheck = mysqli_stmt_num_rows($statement);
if ($resultCheck > 0) {
header("Location: ../register.php?error=usertaken&firstName = ".$firstName."&lastName = ".$lastName."&email = ".$email);
exit();
}else{
$insertQuery = "INSERT INTO users (firstName, lastName, email) VALUES (?, ?, ?);";
$statement = mysqli_stmt_init($conn);
if (!mysqli_stmt_prepare($statement, $insertQuery)){
header("Location: ../register.php?error=sqlerror");
exit();
}else {
mysqli_stmt_bind_param($statement, 'sss', $firstName, $lastName , $email);
mysqli_stmt_execute($statement);
header("Location: ../register.php?error=success");
//echo mysqli_info($conn);
// var_dump($lastName);
exit();
}
}
}
}
mysqli_stmt_close($statement);
mysqli_close($conn);
}else{
header("Location: ../register.php");
exit();
}
@solarc - Хороший улов. Вы должны написать это как ответ.
о мой! Большое спасибо @solarc; Я разделил их и добавил новый elseif для $lastname. Это работает отлично. Если есть лучший способ сделать это, я открыт для предложений
Думаю, мне стоит сначала прочитать комментарии, лол.






Третий аргумент функции
preg_match— это массив, который заполняется результатами поиска. Вы передаете ему$lastName, чтобы он преобразовал его в массив.