Foros del Web » Programando para Internet » PHP »

Autorrelleno de un Formulario desde una Búsqueda Previa

Estas en el tema de Autorrelleno de un Formulario desde una Búsqueda Previa en el foro de PHP en Foros del Web. Hola a todos. Es mi primer Post y quisiera que pudieran ayudarme. Estoy realizando una web en PHP y MySQL de un Instituto y hay ...
  #1 (permalink)  
Antiguo 08/05/2010, 07:48
 
Fecha de Ingreso: mayo-2010
Mensajes: 7
Antigüedad: 13 años, 11 meses
Puntos: 0
Autorrelleno de un Formulario desde una Búsqueda Previa

Hola a todos.
Es mi primer Post y quisiera que pudieran ayudarme.

Estoy realizando una web en PHP y MySQL de un Instituto y hay algunas cosas que no comprendo.
La cosa es que desde la página de búsqueda (buscar_user.php) ingreso en el campo el nombre o dni del usuario de la base de datos en cuestión y aparece correctamente. He aplicado un link en el campo donde se muestra el nombre de usuario para que me lleve una página (actualizar_user.php) donde hay un formulario.

No se como hacer para autor rellenar ese formulario, ya he probado de todo y no se que hacer.

Como podéis ver, en (buscar_user.php) también hay un botón para mandarlo a la misma página que el link (actualizar_user.php) pero si me sirve solo el link, lo quito.

buscar_user.php
Código PHP:
<?php
    session_start
();

    include (
'../../../members.php');
    
    
$busqueda=$_POST['busqueda'];
    if(empty(
$busqueda))
        {
            echo 
"El campo está vacio<br />";
            return 
false;
        }
    
    
$conn db_connect();
    
//Seleccionamos todos los campos que queramos que puedan buscarse de la tabla.
    
$result $conn->query("SELECT * FROM alumnos WHERE nombre like '%".$busqueda."%' or dni like '%".$busqueda."%'");
    
    if (
mysqli_num_rows($result))
    {
    echo 
"<div id='encontrado_user'>";
    echo 
'<a href="../../admin.php">Regresar</a>';
    echo 
"<table border = '1'> \n"
        echo 
"<tr><td class='enc'>DNI</td><td class='enc'>NOMBRE</td><td class='enc'>TLF.</td>
        <td class='enc'>DIRECCIÓN</td><td class='enc'>LOCALIDAD</td><td class='enc'>PAÍS</td><td class='enc'>email</td></tr>"

    while (
$row mysqli_fetch_array($result)) 
    { 
        echo 
"<form action='actualizar_user.php'>";
        echo 
"<tr><td>".$row["dni"]."</td><td><a href='actualizar_user.php'>".$row["nombre"]."</a></td><td>".$row["tlf"]."</td>
        <td>"
.$row["direccion"]."</td><td>".$row["locali"]."</td><td>".$row["pais"]."</td><td>".$row["email"]."</td>
        <td><input type='submit' name='actualizar' value='Actualizar'/></td></tr>"

        echo 
"</form>";
        
$cap_id $conn->insert_id;
    }
    echo 
"</table> \n"
    echo 
"</div>";
    }
    
    else
        echo 
"¡ No se ha encontrado ningún registro !";
        
?>

<link rel="stylesheet" type="text/css" href="../../../css/estilos_cons.css" media="screen"/>
actualizar_user.php
Código PHP:
<?php
    session_start
();

include (
'../../../members.php');
include (
'../../../css/menu/menu_users.php');
$actualizar=$_POST['actualizar'];
?>
            <div id="head">
                <p id="titulo">IES</p>
                <p id="leyenda">Actualizar Usuario</p>
                <a href="../../../form_registrar.php">Regresar</a>
            </div>
<?php
    $conn 
db_connect();
    
//Seleccionamos todos los campos que queramos que puedan buscarse de la tabla.
    
$result $conn->query("SELECT nombre FROM alumnos WHERE num_matricula LIKE '%".$actualizar."%'");
    
    if (
mysqli_num_rows($result))
    {
    while (
$row mysqli_fetch_array($result))
    {
    echo 
"<div id='contenedor'>";
            echo 
"<div id='username'>";
            echo 
"<form action='actualizar_user.php'>";
            echo 
"<table>";
            echo 
"<tr>
                        <td width='100'><p>Nombre</p></td>
                        <td><input type='text' name='nombre' class='nombre' size='30' maxlength='30' value='"
.$row["nombre"]."'</td>
                        <td width='100'><p>Teléfono</p></td>
                        <td><input type='text' name='tlf' class='tlf' size='10' maxlength='11' value='"
.$row["tlf"]."'</td>
                    </tr>
                    <tr>
                        <td width='100'><p>D.N.I.</p></td>
                        <td><input type='text' name='dni' class='dni' size='10' maxlength='9' value='"
.$row["dni"]."'</td>
                        <td width='100'><p>email</p></td>
                        <td><input type='text' name='email' class='email' size='30' maxlength='30' value='"
.$row["email"]."'</td>
                    </tr>
                    <tr>
                        <td width='100'><p>Localidad</p></td>
                        <td><input type='text' name='locali' class='locali' size='19' maxlength='20' value='"
.$row["locali"]."'</td>
                        <td width='100'><p>Provincia</p></td>
                        <td><input type='text' name='provi' class='provi' size='19' maxlength='20' value='"
.$row["provi"]."'</td>
                    </tr>
                    <tr>
                        <td width='100'><p>País</p></td>
                        <td><input type='text' name='pais' class='pais' size='10' maxlength='9' value='"
.$row["pais"]."'</td>
                        <td width='100'><p>Dirección</p></td>
                        <td><input type='text' name='direccion' class='direccion' size='49' maxlength='50' value='"
.$row["direccion"]."'</td>
                    </tr>"

            echo 
"</form>";
        echo 
"</table> \n"
        echo 
"</div>";
echo 
"</div>";
}
}
?>
<link rel="stylesheet" type="text/css" href="../../../css/estilos_reg.css" media="screen"/>
Como veis, en esta última está recogida con $row(" "), también lo he intentado con echo $variable, se que tiene que estar lleno de fallos, pero no se que más hacer, si pudierais echarme una mano...

Gracias.

Salu2.
  #2 (permalink)  
Antiguo 08/05/2010, 17:02
 
Fecha de Ingreso: abril-2010
Ubicación: Chile
Mensajes: 76
Antigüedad: 14 años
Puntos: 3
Respuesta: Autorrelleno de un Formulario desde una Búsqueda Previa

que tal si todos esos campos que muestras en tablas (en buscar_user.php) los colocas en un input disabled (osea que el usuario no lo pueda modificar) y tal como esta en un formulario, luego cuando el usuario coloca submit se envian los valores de estos inputs como si fuera un formulario normal y los captas con actualizar_user.php.

Para evitar SQL Injection, hace las consultas de esta forma

mysql_query('
SELECT *
FROM datos
WHERE palabra LIKE \'%'.mysql_real_escape_string($_POST['busqueda'].'%\'
LIMIT 0, 30
', $handle);

(que quede claro que es un ejemplo, no es tu consulta en si, es para que te guies)

y para evitar XSS utiliza este ejemplo

<?php
$valor = htmlspecialchars($_GET['valor'], ENT_QUOTES);
echo '<input type="text" value="'.$valor.'" />';
?>
  #3 (permalink)  
Antiguo 09/05/2010, 11:12
 
Fecha de Ingreso: mayo-2010
Mensajes: 7
Antigüedad: 13 años, 11 meses
Puntos: 0
Respuesta: Autorrelleno de un Formulario desde una Búsqueda Previa

Hola KaozC9.

Gracias por responderme y perdona por no haber contestado antes.
Voy a ver si he logrado entenderte y si soy capaz de aplicarlo.

Gracias de nuevo.

Salu2.
  #4 (permalink)  
Antiguo 09/05/2010, 12:31
 
Fecha de Ingreso: mayo-2010
Mensajes: 7
Antigüedad: 13 años, 11 meses
Puntos: 0
Respuesta: Autorrelleno de un Formulario desde una Búsqueda Previa

Creo que no me he explicado muy bien antes.

El resultado de la búsqueda es una simple tabla con colores que muestra el resultado de lo que he puesto, por ejemplo, pongo tal nombre (manolo) y me muestra ese usuario con sus datos, no se pueden modificar, por eso no te entiendo cuando dices que lo ponga en un input disable, si no pretengo que se modifiquen, solo se muestran en la tabla, que es lo que pretendo.

He estado aplicando tu código y no hay manera.

Esta es la mía:
$result = $conn->query("SELECT * FROM alumnos WHERE nombre like '%".$busqueda."%' or dni like '%".$busqueda."%'");

Y esta la tuya:
mysql_query('SELECT * FROM alumnos WHERE nombre LIKE \'%'.mysql_real_escape_string($_POST['busqueda'].'%\'LIMIT 0, 30', $handle);

Lo he sustituido y no hay manera de que funcione, supongo que es por la sintaxis, manera de conectar con la base de datos o por las comillas, no se.

Otra cosa, he puesto en actualizar_user.php esto:

$nombre = htmlspecialchars($_GET['nombre'], ENT_QUOTES);
echo "<input type='text' value='".$nombre."' />";

y no recoge los valores de la tabla anterior, me muestra el campo vacío.

He supuesto que en actualizar_user.php ya no me vale ni la consulta, puesto que viene de buscar_user.php, ni los $row().

Me estoy haciendo un lío de 3 pares de cohones.
Podrías ser tan amable de especificare un poco más, por favor.

Gracias de nuevo.

Salu2.
  #5 (permalink)  
Antiguo 09/05/2010, 12:56
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 3 meses
Puntos: 126
Respuesta: Autorrelleno de un Formulario desde una Búsqueda Previa

Hola

No hay ningún campo (hidden) con el valor del campo num_matricula
El formulario no tiene método echo "<form action='actualizar_user.php'>";
El link solo te lleva a actualizar_user.php <a href='actualizar_user.php'>".$row["nombre"]."</a>

Suerte
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />
  #6 (permalink)  
Antiguo 09/05/2010, 13:20
 
Fecha de Ingreso: mayo-2010
Mensajes: 7
Antigüedad: 13 años, 11 meses
Puntos: 0
Respuesta: Autorrelleno de un Formulario desde una Búsqueda Previa

Hola Alder.

Gracias por responder, pero sigo sin entenderos.
Voy a intentar se más explicito.

Tengo una pagina que se llama buscar.php con un campo text y otro submit que me lleva al pulsarlo a buscar_user.php.
Éste buscar_user.php me hace esto:

Código PHP:
$result $conn->query("SELECT * FROM alumnos WHERE nombre like '%".$busqueda."%' or dni like '%".$busqueda."%'"); 
     
    if (
mysqli_num_rows($result)) 
    { 
    echo 
"<div id='encontrado_user'>"
    echo 
'<a href="../../admin.php">Regresar</a>'
    echo 
"<table border = '1'> \n";  
        echo 
"<tr><td class='enc'>DNI</td><td class='enc'>NOMBRE</td><td class='enc'>TLF.</td> 
        <td class='enc'>DIRECCIÓN</td><td class='enc'>LOCALIDAD</td><td class='enc'>PAÍS</td><td class='enc'>email</td></tr>"
;  
    while (
$row mysqli_fetch_array($result))  
    {  
        echo 
"<form action='actualizar_user.php'>"
        echo 
"<tr><td>".$row["dni"]."</td><td><a href='actualizar_user.php'>".$row["nombre"]."</a></td><td>".$row["tlf"]."</td> 
        <td>"
.$row["direccion"]."</td><td>".$row["locali"]."</td><td>".$row["pais"]."</td><td>".$row["email"]."</td> 
        <td><input type='submit' name='actualizar' value='Actualizar'/></td></tr>"
;  
        echo 
"</form>"
        
$cap_id $conn->insert_id
    } 
    echo 
"</table> \n";  
    echo 
"</div>"
    } 
     
    else 
        echo 
"¡ No se ha encontrado ningún registro !"
con lo cual, me muestra el usuario que le he metido en el campo text, ya que estoy comparándolo con el "nombre" de usuario de la base de datos.
Cada campo ".$row["lo_que_sea"]." me muestra en la tabla todos los datos de ese usuario correctamente.
Pues bien, bajo el while hay un pequño form con:
Código PHP:
echo "<form action='actualizar_user.php'>"
y un
Código PHP:
<input type='submit' name='actualizar' value='Actualizar'/> 
El usuario encontrado tiene a su derecha el botón Actualizar y también un enlace en el propio nombre.
Cuando se pulsa en el Botón o en el enlace nos lleva a actualizar_user.php

Estais diciendome que forzosamente tengo que mostrar al usuario encontrado en inputs y no en tablas o no???

Está correctamente la consulta de actualizar_user.php con su????
Código PHP:
 $result $conn->query("SELECT nombre FROM alumnos WHERE num_matricula LIKE '%".$actualizar."%'");
if (
mysqli_num_rows($result)) 
    { 
    while (
$row mysqli_fetch_array($result)) 
    { 
O es que eso no tiene que estar ahí???

He puesto incluso el código que me mandó KaozC9
Código PHP:
$valor htmlspecialchars($_GET['valor'], ENT_QUOTES);
echo 
'<input type="text" value="'.$valor.'" />'
pero cambiando "valor" por "nombre".

En fin, no tengo ni más remota idea de como pasar el usuario mostrado a los campos vacíos de actualizar_user.php.

Gracias de nuevo a los 2 y disculpadme si parezco brusco o desagradecido, pero no es para nada mi intención.

Salu2.
  #7 (permalink)  
Antiguo 10/05/2010, 05:02
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 3 meses
Puntos: 126
Respuesta: Autorrelleno de un Formulario desde una Búsqueda Previa

Hola

Cita:
echo "<form action='actualizar_user.php'>";
echo "<tr><td>".$row["dni"]."</td><td><a href='actualizar_user.php'>".$row["nombre"]."</a></td><td>".$row["tlf"]."</td>
<td>".$row["direccion"]."</td><td>".$row["locali"]."</td><td>".$row["pais"]."</td><td>".$row["email"]."</td>
<td><input type='submit' name='actualizar' value='Actualizar'/></td></tr>";
echo "</form>";
A groso modo es esto, cuando sumitas el formulario, no envías nada, ya que no hay ningún campo que enviar.
Podría meter un campo hidden con el valor que quieres enviar
Código PHP:
Ver original
  1. <input type="hidden" value=".$row['num_matricula']." name="num" />

Además no le has indicado la manera de enviar los datos (get, post).
Cita:
<form action='actualizar_user.php' method='post'>
Con respecto al link estás en la misma situación, tendrías que hacer esto
Cita:
<a href='actualizar_user.php?num='.$row['num_matricula'].">".$row["nombre"]."</a>
pero como estás recibiendo los datos en actualizar_user.php con post
Cita:
$actualizar=$_POST['actualizar'];
nunca lograrás recoger la variable.

Cuando recepcionas los valores
Cita:
$actualizar=$_POST['actualizar'];
Añade esto
if($actualizar == 'actualizar');

Con respecto al SQL no hace falta que uses el operador LIKE ya que estás buscado un registro en particular, no uno aproximado. Por lo demás puedes seguir lo mencionado por @KaozC9

Suerte
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />

Última edición por Adler; 10/05/2010 a las 07:29 Razón: había cambiado los name
  #8 (permalink)  
Antiguo 10/05/2010, 11:53
 
Fecha de Ingreso: mayo-2010
Mensajes: 7
Antigüedad: 13 años, 11 meses
Puntos: 0
Respuesta: Autorrelleno de un Formulario desde una Búsqueda Previa

Muchas gracias.

Me ha servido de mucho todo lo que me habéis dicho. Lo único que no logro es lo de SQL Injection, pero sigo intentándolo.

Salu2.

Etiquetas: previa, formulario
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:06.