Procesar datos de formulario con Mysqli_real_escape_string
- Configurar un servidor local
- Crear una base de datos y una tabla
- Crear el formulario HTML
- Datos del formulario de proceso
-
Causas de un Error en
Mysqli_real_escape_string
Este artículo le enseñará a procesar datos de formulario usando mysqli_real_escape_string
.
Primero, configuraremos una base de datos de muestra y una tabla. Luego, crearemos un formulario HTML que aceptará la entrada del usuario.
Luego, en PHP, explicaremos cómo usar mysqli_real_escape_string
sin que cause un error.
Configurar un servidor local
Todo el código de este artículo funcionará en un servidor. Entonces, si tiene acceso a un servidor en vivo, puede omitir esta sección y pasar a la siguiente.
De lo contrario, instale un servidor local como XAMPP de Apache Friends. Una vez que XAMPP esté instalado, busque la carpeta htdocs
y cree una carpeta.
Esta carpeta almacenará todo el código de este artículo.
Crear una base de datos y una tabla
En XAMPP, puedes crear una base de datos usando phpMyAdmin
o la línea de comando. Si está en la línea de comando, inicie sesión en MySQL usando el siguiente comando:
#login to mysql
mysql -u root -p
Cuando haya iniciado sesión en MySQL, cree una base de datos. Para este artículo, llamaremos a la base de datos my_details
.
CREATE database my_details
Con la base de datos creada, cree una tabla con el siguiente código SQL. La tabla contendrá los datos de nuestro proyecto de muestra.
CREATE TABLE bio_data (
id INT NOT NULL AUTO_INCREMENT,
first_name VARCHAR(50) NOT NULL,
last_name VARCHAR(50) NOT NULL,
PRIMARY KEY (id)) ENGINE = InnoDB;
Crear el formulario HTML
El formulario HTML tendrá dos entradas de formulario. El primero recoge el nombre del usuario, mientras que el segundo es para el apellido.
<head>
<meta charset="utf-8">
<title>Process Form With mysqli_real_escape_string</title>
<style>
body {
display: grid;
justify-content: center;
align-items: center;
height: 100vh;
}
</style>
</head>
<body>
<main>
<form action="process_form.php" method="post">
<label id="first_name">First Name</label>
<input id="first_name" type="text" name="first_name" required>
<label id="last_name">Last Name</label>
<input id="last_name" type="text" name="last_name" required>
<input type="submit" name="submit_form" value="Submit Form">
</form>
</main>
</body>
Producción:
Datos del formulario de proceso
Durante el procesamiento del formulario, usamos mysqli_real_escape_string
para escapar de las entradas del formulario. Además, la conexión a la base de datos debería ser el primer argumento de mysqli_real_escape_string
.
Entonces, hemos usado mysqli_real_escape_string
en el nombre y apellido a continuación. Para usar el código, guárdelo como process_form.php
.
<?php
if (isset($_POST['submit_form']) && isset($_POST["first_name"]) && isset($_POST["last_name"])) {
// Set up a database connection.
// Here, our password is empty
$connection_string = new mysqli("localhost", "root", "", "my_details");
// Escape the first name and last name using
// mysqli_real_escape_string function. Meanwhile,
// the first parameter to the function should
// be the database connection. If you omit, the
// database connection, you'll get an error.
$first_name = mysqli_real_escape_string($connection_string, trim(htmlentities($_POST['first_name'])));
$last_name = mysqli_real_escape_string($connection_string, trim(htmlentities($_POST['last_name'])));
// If there is a connection error, notify
// the user, and Kill the script.
if ($connection_string->connect_error) {
echo "Failed to connect to Database. Please, check your connection details.";
exit();
}
// Check string length, empty strings and
// non-alphanumeric characters.
if ( $first_name === "" || !ctype_alnum($first_name) ||
strlen($first_name) <= 3
) {
echo "Your first name is invalid.";
exit();
}
if ( $last_name === "" || !ctype_alnum($last_name) ||
strlen($last_name) < 2
) {
echo "Your last name is invalid.";
exit();
}
// Insert the record into the database
$query = "INSERT into bio_data (first_name, last_name) VALUES ('$first_name', '$last_name')";
$stmt = $connection_string->prepare($query);
$stmt->execute();
if ($stmt->affected_rows === 1) {
echo "Data inserted successfully";
}
} else {
// User manipulated the HTML form or accessed
// the script directly. Kill the script.
echo "An unexpected error occurred. Please, try again later.";
exit();
}
?>
Salida (si el procesamiento fue exitoso):
Causas de un Error en Mysqli_real_escape_string
Obtendrá un error si omite la conexión a la base de datos en mysqli_real_escape_string
. Entonces, en el siguiente código, hemos modificado process_form.php
.
Mientras tanto, esta versión no tiene la conexión a la base de datos en mysqli_real_escape_string
. Como resultado, obtendrá un error cuando desee insertar datos en la base de datos.
<?php
if (isset($_POST['submit_form']) && isset($_POST["first_name"]) && isset($_POST["last_name"])) {
$connection_string = new mysqli("localhost", "root", "", "my_details");
// We've omitted the connection string
$first_name = mysqli_real_escape_string(trim(htmlentities($_POST['first_name'])));
$last_name = mysqli_real_escape_string(trim(htmlentities($_POST['last_name'])));
if ($connection_string->connect_error) {
echo "Failed to connect to Database. Please, check your connection details.";
exit();
}
if ( $first_name === "" || !ctype_alnum($first_name) ||
strlen($first_name) <= 3
) {
echo "Your first name is invalid.";
exit();
}
if ( $last_name === "" || !ctype_alnum($last_name) ||
strlen($last_name) < 2
) {
echo "Your last name is invalid.";
exit();
}
$query = "INSERT into bio_data (first_name, last_name) VALUES ('$first_name', '$last_name')";
$stmt = $connection_string->prepare($query);
$stmt->execute();
if ($stmt->affected_rows === 1) {
echo "Data inserted successfully";
}
} else {
echo "An unexpected error occurred. Please, try again later.";
exit();
}
?>
Ejemplo de mensaje de error:
Fatal error: Uncaught ArgumentCountError: mysqli_real_escape_string() expects exactly 2 arguments, 1 given in C:\xampp\htdocs\processformmysqli\process_form.php:12 Stack trace: #0 C:\xampp\htdocs\processformmysqli\process_form.php(12): mysqli_real_escape_string('Johnson') #1 {main} thrown in C:\xampp\htdocs\processformmysqli\process_form.php on line 12
Habdul Hazeez is a technical writer with amazing research skills. He can connect the dots, and make sense of data that are scattered across different media.
LinkedIn