Formulario interactivo Usuario/Base de Datos

A quien pueda me gustaría saber lo siguiente;
Tengo una sencilla base de datos lamada "altaalumnos$ en SQL con una sola tabla llamada "socios".
Esta tabla tiene 7 campos:
Nombre
Apellido1
Apellido2
Email
Cc
Usuario
Clave
En ella hay unos 310 registros de personas distintas, cada una de ellas tiene su usuario y clave o contraseña de fácil deducción por ellos (usuario=tres primeras letras de su nombre, clave 4 últimos dígitos de su cc (cuenta corriente).
Bien, Partiendo de esta tabla, tengo que hacer un formulario en dreamweaver p.ej, pero con la finalidad de que cada usuario pueda consultar si los datos, SOLO SUS DATOS, son correctos.. Esto son;
Nombre
Apellido1
Apellido2
Email
Cc
Es decir, que muestre sólo su registro y no otros. Puede haber varios registros iguales en Usuario; p.ej ANA pero no ocurre en clave o contraseña.
Tengo conocimientos muy vagos de SQL, supongo que habrá que hacer el formulario en Html y un archivo para la actión en PHP con conexión al localhost..
Agradecería los comandos que necesito para tal orden en PHP.
Ya sería el colmo ser capaz de que el usuario si percibiese que alguno de sus campos no es correcto, los pudiese cambiar y enviar a la base de datos.. También que pudiese modificar su usuario y contraseña preestablecidos en la base de datos.
1

1 respuesta

Respuesta
1
Tienes razón en cuanto a que lo que necesitas es hacer por una parte, un formulario en HTML y por otro un programa (en PHP u otro lenguaje) que te de los resultados.
Básicamente lo que hay que hacer es:
- Un formulario que pida el usuario y contraseña y que llame al programa en PHP.
- El programa en PHP conecta con la base de datos.
- Busca un registro que cumpla el criterio de tener el usuario y la contraseña que el usuario ha escrito en el formulario.
- Si encuentra dicho registro muestra los datos y en caso contrario muestra un error.
El programa en PHP que planteas puede ser algo así:
<?php
$dbhost = 'localhost';
$dbuser = 'usuario';
$dbpass = 'password';
$conn = mysql_connect($dbhost, $dbuser, $dbpass) or die ('Error connecting to mysql');
$dbname = 'basedatos';
mysql_select_db($dbname);
Con esto realizas la conexión, lógicamente tienes que cumplimentar $dbhost con el servidor donde esté la base de datos, $dbuser con el usuario, $dbpass con la password y $dbname con el nombre de la base de datos. No has indicado que base de datos usarás, asumo que es MySQL que suele ser lo habitual.
$usuario = $_POST["usuario"];
$clave = $_POST["clave"];
Esto lo que hace es recibir los datos que el usuario ha puesto en el formulario html, que es el que ha llamado al programa PHP
$consulta = "SELECT Nombre, Apellido1, Apellido2, email, cc, FROM socios WHERE usuario='".$usuario."' and clave='".$clave."'";
Con esto se crea la consulta SQL.
$resultado = mysql_query($consulta);
while($fila = mysql_fetch_array($result, MYSQL_ASSOC))
{
echo "Name :{$fila['Nombre']} <br>" .
"Apellido 1 : {$fila['Apellido1']} <br>" .
"Apellido 2 : {$fila['Apellido2']} <br>" .
"e-mail : {$fila['email']} <br>" .
"Nº Cuenta : {$fila['cc']} <br><br>" ;
}
Ejecutamos la consulta SQL y procesamos el resultado sacando todos los datos en pantalla, suponemos que es un solo socio, puesto que dices que la clave es única, aunque si hubiese más de uno, lo sacaría igualmente.
mysql_close($conn);
?>
Esto cerrará la conexión con la base de datos.
A partir de este programa que sería lo básico, se podrían hacer muchas mejoras, por ejemplo, cifrar las contraseñas, hacer una correcta gestión de errores, etc. Pero para eso ya necesitas un nivel un poco más avanzado.
La otra opción que planteas en tu pregunta, es decir, permitir que el usuario modifique su información, requiere conocimientos bastantes más avanzados: trabajar con sesiones, validación de la información, gestión de errores en la BD, posiblemente funciones en JavaScript, etc. No obstante, si te interesa, dímelo y te puedo recomendar algunos enlaces donde puedes aprender a usar este tipo de cosas.
He asumido bastantes cosas para no escribir aquí un tratado ;) Si tienes alguna duda con algo, ponla y te la aclararé
Gracias Fernando por tu ayuda... efectivamente es MySQL, hago las consultas en SQL y utilizo la interfac PHPmyadmin
He creado dos archivo, el primero se llama usuarios.html que es el formulario con el siguiente código
<head>
<title>Consulta de Datos</title>
<style type="text/css">
<!--
.Estilo1 {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: x-large;
color: #0000FF;
}
-->
</style>
<body>
<span class="Estilo1">Consulta tus datos personales</span>
<form action="consultadatos.php" method="post" name="usuarios" id="usuarios">
<label>Usuario
<input name="usuario" type="text" id="usuario" />
<br>
<br>
Contraseña
<input name="contrase&ntilde;a" type="password" id="contrase&ntilde;a" />
</label>
<br />
<br />
<label>
<input type="submit" name="Submit" value="Enviar" />
</label>
<br>
</form>
El segundo archivo es el PHP con los datos que me has facilitado, siendo los siguientes;
<?php
$dbhost = 'localhost';
$dbuser = 'd330861';
$dbpass = 'xxxxxxxxxxxx';
$conn = mysql_connect($dbhost, $dbuser, $dbpass) or die ('Error connecting to mysql');
$dbname = 'altaalumnos';
mysql_select_db($dbname);
$usuario = $_POST["usuario"];
$clave = $_POST["clave"];
$consulta = "SELECT Nombre, Apellido1, Apellido2, email, cc, FROM socios WHERE usuario='"$.usuario."' and clave='".$clave."'";
$resultado = mysql_query($consulta);
while($fila = mysql_fetch_array($result, MYSQL_ASSOC))
{
echo "Name :{$fila['Nombre']} <br>" .
"Apellido 1 : {$fila['Apellido1']} <br>" .
"Apellido 2 : {$fila['Apellido2']} <br>" .
"e-mail : {$fila['email']} <br>" .
"Nº Cuenta : {$fila['cc']} <br><br>" ;
}
mysql_close($conn);
?>
Quizás me haya liado con el código ya que en tu respuesta no interpreto del todo bien que va en el html y cual en el php, no he podido probarlo ya que en el sitio que estoy ahora no hay acceso al servidor.
Te pongo la clave en xxxx.. ya que no se si esto se ve por mucha más gente.. ¿lo he hecho bien? Si necesitases entrar a la base de datos.. no tendría inconveniente, me fio de personas como vosotros..
Una duda.. he puesto el nombre de la base de datos -altaalumnos- ¿Habría también que poner el nombre de la tabla -socios-?
Muchas gracias
Diego.
En principio lo veo correcto, el programa debería funcionar, intruduces los dos satos en el formulario y al pulsar el botón enviar el PHP accede a la base de datos y saca todos los socios con ese usuario y contraseña (que solo debe ser uno si los datos están bien).
En el nombre de la base de datos solo va la base de datos, el nombre de la tabla va en la consulta sql, la linea que dice SELECT Nombre, Apellido1, Apellido2, email, cc, FROM socios WHERE usuario='".$usuario."' and clave='".$clave."'", que viene a ser SELECciona los datos Nombre, Apellido1, etc de la tabla SOCIOS where (DONDE SE CUMPLA LA CONDICIÓN) que el usuario = al usuario del campo del formulario y la clave lo mismo.
Acabo de ver que ha bailado un punto en esa linea, donde pone '"$.usuario debe poner '". $usuario
Piensa que esto está hecho a lo bruto, es decir, el php debe devolver una página web por lo que antes del echo "Nombre: " deberías construir la página con
echo "<html><head><title>Datos de alumno</title></head>";
echo "<body><h1>Datos del alumno</h1><br><br>";
Luego los echo del Nombre, apellidos, etc
y luego los del fin del html: echo "</body></html>";
Con la instrucción echo, lo que estas haciendo realmente es devolver al navegador un texto que te presentará, si este texto es html, lo presentara como una página web, con todo lo que conlleva, colores, tablas, imágenes, etc.
Aunque no debería haber problemas tal y como lo tienes, funcionar funcionará seguramente, pero quedara bastante feo. De todas formas, prueba y entiende esto y luego si quieres nos metemos con los adornos, o con el sistema para cambiar datos y eso.
Este hilo es público, no lo he puesto privado ya que si alguien tiene la misma duda le resultará útil, así que tenlo en cuenta a la hora de poner usuarios, contraseñas, direcciones de servidor, etc.
Gracias Fernando, lo he probado pero me reporta esto:
-------------------------------------------------------------------------------------------
"Warning: mysql_fetch_array(): supplied argument is not a valid MySQL
result resource in /home/d330861/public_html/consultadata.php on line
12"
Eres Socio/a, estos son los datos que tenemos de ti
Nombre :
Apellido 1 :
Apellido 2 :
e-mail :
Numero de Cuenta :
----------------------------------------------------------------------------------------------
Este resultado es con independencia de meter en el formulario usuario o contraseña inventado o bien dejando los campos en blanco y pulsar el botón enviar sale lo mismo.. arriba ese posible error que reporta mysql, He comprobado que la conexión la hace, tampoco funciona con mysql_fetch_row, devolviendo este mensaje:
"Warning: Wrong parameter count for mysql_fetch_row() in
/home/d330861/public_html/consultadata.php on line 12
Te pongo todo el código:
1 <?php
2 $dbhost = 'localhost';
3 $dbuser = 'd330861';
4 $dbpass = 'XXXXXXXXXXX';
$conn = mysql_connect($dbhost, $dbuser, $dbpass) or die ('Error connecting to mysql');
6 $dbname = 'altaalumnos';
7 mysql_select_db($dbname);
8 $usuario = $_POST["usuario"];
9 $clave = $_POST["clave"];
$consulta = "SELECT Nombre, Apellido1, Apellido2, email, cc, FROM socios WHERE usuario='".$usuario."' and
clave='".$clave."'";
11 $resultado = mysql_query($consulta);
12 while($fila = mysql_fetch_array($result, MYSQL_ASSOC))
13 {
14 echo "Nombre :{$fila['Nombre']} <br>" .
"Apellido 1 : {$fila['Apellido1']} <br>" .16 "Apellido 2 : {$fila['Apellido2']} <br>" .17 "e-mail : {$fila['email']} <br>" .18 "Numero de Cuenta : {$fila['cc']} <br><br>" ;
19 }
mysql_close($conn);
21 {
22 echo "<html><head><title>tus datos</title></head>";
23 echo "<body><h1>Eres Socio/a, estos son los datos que tenemos de ti</h1><br><br>";
24 echo "Nombre :{$fila['Nombre']} <br>" .
"Apellido 1 : {$fila['Apellido1']} <br>" .26 "Apellido 2 : {$fila['Apellido2']} <br>" .27 "e-mail : {$fila['email']} <br>" .28 "Numero de Cuenta : {$fila['cc']} <br><br>" ;
29 }
echo "</body></html>";
31 ?>
¿Parece decir que mysql_fetch no es un argumento válido? Aunque creo que está bien. Desconozco cual es el problema.
Muchas gracias por tu paciencia.
Diego
Efectivamente eso es, esta buscando el registro en un conjunto de resultados no válido, es un error del código, he llamado $resultado al conjunto de datos y luego en mysql_fetch lo estoy llamando $result.
En la línea: while($fila = mysql_fetch_array($result, MYSQL_ASSOC))
cambia $result por $resultado
... Vaya.. lo cambié pero sigue saliendo el mismo error.. he utilizado tentó result como resultado u nada..¿'?
Creo que el problema es que en el formulario html el campo de la contraseña se llama "contraseña" y en el php se llama "clave", por eso al coger el valor desde el php lo coge vacío, el SQL no devuelve nada y por eso falla.
Cambia esta linea en el html
<input name="contrase&ntilde;a" type="password" id="contrase&ntilde;a" />
por esta otra
<input name="contrase&ntilde;a" type="password" id="clave" />
Creo que con esto debería funcionar.
Esto quiere decir ademas que si el usuario mete mal su nombre, la contraseña o si no existe ese usuario, el programa fallará y dará ese error, prueba primero a ver si funciona y luego nos ocupamos de controlar todas esas cosas.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas