“Conocimiento Programación>Programación PHP /MySQL

¿Cómo se verifica los datos dados por el usuario con los valores de la base de datos utilizando PHP de la base de datos MySQL?

2011/6/9
Hay varias formas de verificar si los datos proporcionados por el usuario coinciden con los datos en una base de datos MySQL usando PHP. El mejor enfoque depende de lo que esté comparando y de cómo desea manejar posibles discrepancias. Aquí hay algunos ejemplos, centrándose en las mejores prácticas de seguridad:

1. Comprobación de un solo usuario (por ejemplo, inicio de sesión):

Este es el escenario más común. Verificaremos si un nombre de usuario y una contraseña coinciden con un registro en la base de datos. Crucialmente, hash la contraseña antes de compararla. ¡Nunca almacene contraseñas en texto plano!

`` `PHP

// Credenciales de la base de datos (¡reemplácelos con sus credenciales reales!)

$ servername ="Your_ServerName";

$ username ="your_username";

$ contraseña ="your_password";

$ dbname ="your_dbname";

// Entrada del usuario (desinfectar esto!)

$ usernameInput =$ _post ["Nombre de usuario"];

$ contraseñainput =$ _post ["contraseña"];

// desinfectar las entradas de los usuarios para evitar la inyección de SQL

$ usernameInput =mysqli_real_escape_string ($ conect, $ usernameInput);

$ PasswordInput =mysqli_real_escape_string ($ Conn, $ PasswordInput);

// Crear conexión

$ Conn =new MySQLI ($ ServerName, $ UserName, $ Password, $ dbname);

// verificar la conexión

if ($ conn-> Connect_error) {

die ("Conexión fallida:". $ conn-> Connect_error);

}

// Preparar y atar

$ stmt =$ conn-> preparar ("Seleccione Password_hash de usuarios donde username =?");

$ stmt-> bind_param ("s", $ usernameInput);

$ stmt-> ejecute ();

$ result =$ stmt-> get_result ();

if ($ result-> num_rows> 0) {

$ row =$ result-> fetch_assoc ();

$ HashedPassword =$ Row ["Password_hash"];

// Verifique la contraseña usando Password_verify (función de hash de contraseña incorporada de PHP)

if (contraseña_verify ($ contraseñainput, $ hashedpassword)) {

// Iniciar sesión exitoso

echo "¡Iniciar sesión exitoso!";

} demás {

// contraseña incorrecta

echo "contraseña incorrecta";

}

} demás {

// nombre de usuario no encontrado

echo "nombre de usuario no encontrado";

}

$ STMT-> Close ();

$ Conn-> Close ();

?>

`` `` ``

Explicación:

* Credenciales de la base de datos: Reemplace las credenciales del marcador de posición con los detalles reales de la base de datos MySQL.

* Entrada del usuario: Este código supone que el nombre de usuario y la contraseña se envían a través de una solicitud de publicación. Siempre desinfecte la entrada del usuario para evitar vulnerabilidades de inyección SQL. `mysqli_real_escape_string ()` es un paso básico, pero las declaraciones preparadas (utilizadas aquí) son mucho más robustas.

* Declaración preparada: Una declaración preparada evita la inyección de SQL al separar la consulta SQL de los datos proporcionados por el usuario. Es crucial para la seguridad.

* Hashing de contraseña: La base de datos debe almacenar contraseña *Hashes *, no contraseñas de texto sin formato. `contraseña_hash ()` crea un hash seguro y `contraseña_verify ()` compara la entrada del usuario con el hash almacenado.

* Manejo de errores: El código incluye el manejo básico de errores para la conexión de la base de datos y las fallas de consulta.

2. Comprobación de múltiples coincidencias (por ejemplo, buscar una tabla):

Si necesita encontrar múltiples coincidencias basadas en la entrada del usuario (como buscar productos con un nombre específico), deberá adaptar la consulta:

`` `PHP

// ... (conexión de base de datos como se indicó) ...

$ Searchterm =$ _Post ["SearchterM"];

$ Searchterm =mysqli_real_escape_string ($ Conn, $ Searchterm); // desinfectar!

$ sql ="seleccione * de productos donde el nombre como '%$ Searchterm%'"; // Ejemplo simple:¡use la declaración preparada para una mejor seguridad!

$ resultado =$ conn-> Query ($ sql);

if ($ result-> num_rows> 0) {

while ($ row =$ result-> fetch_assoc ()) {

// procesa cada fila coincidente

Echo "Producto:". $ Row ["Nombre"]. "
";

}

} demás {

Echo "No se encontraron productos";

}

// ... (Cerrar conexión) ...

?>

`` `` ``

Nota importante: El ejemplo de búsqueda anterior utiliza la concatenación de cadenas, que es vulnerable a la inyección SQL si `$ Searchterm` no se desinfecta . Para una solución segura, reescribirla utilizando declaraciones preparadas. Ejemplo:

`` `PHP

$ stmt =$ conn-> preparar ("Seleccionar * de productos donde el nombre es así?");

$ Searchterm ="%". $ Searchterm. "%"; // Agregar comodines para

$ stmt-> bind_param ("s", $ searchterm);

$ stmt-> ejecute ();

// ... el resto del código para manejar los resultados ...

`` `` ``

Recuerde reemplazar la tabla de marcadores de posición y los nombres de columnas con el esquema real de su base de datos. Siempre priorice la seguridad mediante el uso de declaraciones preparadas y la desinfección de entrada adecuada para evitar ataques de inyección de SQL. Considere usar consultas parametrizadas para cualquier interacción con la entrada del usuario y su base de datos. Para escenarios más complejos o grandes conjuntos de datos, es posible que desee explorar técnicas más avanzadas como los procedimientos almacenados.

Programación PHP /MySQL
Cómo configurar un simple PHP SoapServer Con un archivo de función
Tutorial para la creación de una tabla mediante Wamp 2.0 MySQL
Cómo ejecutar un comando de secuencias de comandos SQL
Cómo insertar PHP en CSS
¿Cómo resolver el código de error 1046 y la base de datos no seleccionada en MySQL?
Cómo anular la configuración Encabezados en PHP
Cómo crear un servidor MySQL en CentOS 2010
Cómo mostrar un documento de Word con PHP
Conocimiento de la computadora © http://www.ordenador.online