Foros del Web » Programando para Internet » PHP »

Pasar valores entre varios formularios

Estas en el tema de Pasar valores entre varios formularios en el foro de PHP en Foros del Web. Hola, Foros del Web! Es como la 5ta vez que empiezo a redactar todo de nuevo, no se como explicarlo bien. La idea es subir ...
  #1 (permalink)  
Antiguo 06/02/2014, 15:59
 
Fecha de Ingreso: octubre-2011
Mensajes: 7
Antigüedad: 12 años, 6 meses
Puntos: 0
Pregunta Pasar valores entre varios formularios

Hola, Foros del Web!

Es como la 5ta vez que empiezo a redactar todo de nuevo, no se como explicarlo bien.

La idea es subir curriculum, con nombre y apellido y que se vean en la web.

Tengo lo siguiente:

1.php

Código HTML:
<form method="post" action="2.php"> 
                Nombre<br> 
				<input type="text" name="nombre"><br> 
                Apellido<br> 
                <input type="text" name="apellido"><br> 
                D.N.I<br>
				<input type="text" name="dni"><br> 
                Titulo obtenido<br> 
				<input type="text" name="titulo"><br> 
                
                <select size="1" name="sexo"> 
                <option value="masculino">Masculino</option> 
                <option value="femenino">Femenino</option>
				</select><br><input type="submit" value="Enviar datos" name="enviar">
</form> 
2.php

Código PHP:
<?php
    
include ("../funciones.php");
    
conectar();
    
$apellido=$_POST['apellido'];
$nombre=$_POST['nombre'];
$titulo=$_POST['titulo'];
$sexo=$_POST['sexo'];
$dni=$_POST['dni'];
$enviar=$_POST['enviar'];


if(
$enviar)
{

$sql='insert into edin (apellido,nombre,titulo,sexo,dni) 
        values("'
.$apellido.'","'.$nombre.'","'.$titulo.'","'.$sexo.'","'.$dni.'")' or die(mysql_error());

$resmysql_query($sql) or die(mysql_error()); 
}

?>

<html>
<head>
</head>

<body>
<h2>Informacion agregada, ahora ingrese el curriculum de <?php echo $nombre?></h2>
<br>
<br>
<br>

<form action="3.php" method="post" enctype="multipart/form-data">
  <input name="archivo" type="file" size="350000" />
  <input name="enviar" type="submit" value="Upload File" />
  <input name="action" type="hidden" value="upload" />  
  <input name="name" type="hidden" value="<?php echo $nombre?>" />  
</form>
                
                
</body>
</html>
3.php

Código PHP:
$status "";
if (
$_POST["action"] == "upload") {
    
// obtenemos los datos del archivo
    
$name=$_FILES['file'];
    
$tamano $_FILES["archivo"]['size'];
    
$tipo $_FILES["archivo"]['type'];
    
$archivo $_FILES["archivo"]['name'];
    
$prefijo substr(md5(uniqid(rand())),0,6);
   
    if (
$archivo != "") {
        
// guardamos el archivo a la carpeta files
        
$destino =  "files/".$prefijo."_".$archivo;
        if (
copy($_FILES['archivo']['tmp_name'],$destino)) {
            
$status "Archivo subido: <b>".$archivo."</b>";
            
            
$sql='insert into edin (file) 
        values("'
.$prefijo.'_'.$archivo.'")' or die(mysql_error());
        } else {
            
$status "Error al subir el archivo";
        }
    } else {
        
$status "Error al subir archivo";
    }

Problemas:

No llega a 3.php la variable $nombre que viene de 1.php (la necesita para insertar la informacion $prefijo_$archivo con WHERE $nombre)

Ya revise en el FAQ el siguiente link: [URL="http://www.forosdelweb.com/wiki/PHP:%C2%BFC%C3%B3mo_paso_valores_entre_varios_form ularios%3F"]Como paso valores entre varios formularios[/URL]

Y por alguna razón no anda. (en el segundo formulario me escribe $variable {echo };)

Preguntas
Es posible hacer todo con un solo formulario? y guardar en DB? (el curriculum que se guarde en files/)

Disculpen la desprolijidad.

Espero que me entiendan :)
  #2 (permalink)  
Antiguo 06/02/2014, 16:18
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Pasar valores entre varios formularios

Revisa en tu navegador (2.php) el código HTML generado del formulario, ¿aparece ahí el valor en el campo hidden?

Cita:
Es posible hacer todo con un solo formulario? y guardar en DB? (el curriculum que se guarde en files/)
Claro que sí, ¿lo has intentado?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 06/02/2014, 18:58
lolainas
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Pasar valores entre varios formularios

Supuesta tabla:
Código SQL:
Ver original
  1. CREATE TABLE IF NOT EXISTS `persona` (
  2.   `dni` VARCHAR(8) NOT NULL,
  3.   `nombre` VARCHAR(32) NOT NULL,
  4.   `apellido` VARCHAR(32) NOT NULL,
  5.   `sexo` VARCHAR(16) NOT NULL,
  6.   `titulo` VARCHAR(32) NOT NULL,
  7.   `cv` VARCHAR(128) NOT NULL,
  8.   PRIMARY KEY (`dni`)
  9. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

db.php
Código PHP:
<?php

$driver   
'mysql';
$host     'localhost';
$database 'tests';
$user     'root';
$password null;

return new 
PDO("$driver:host=$host;dbname=$database"$user$password);
form.html
Código HTML:
<style>
    label { display: block; }
</style>
<form method="post" action="index.php" enctype="multipart/form-data">
    <h1>Datos</h1>
    <fieldset>
        <label for="dni">DNI</label>
        <input id="dni" name="dni" type="text" required />
        <label for="nombre">Nombre</label>
        <input id="nombre" name="nombre" type="text" required />
        <label for="apellido">Apellido</label>
        <input id="apellido" name="apellido" type="text" required />
        <label for="sexo">Sexo</label>
        <select id="sexo" name="sexo">
            <option value="femenino">Femenino</option>
            <option value="masculino">Masculino</option>
        </select>
        <label for="titulo">Titulo</label>
        <input id="titulo" name="titulo" type="text" required />
        <label for="cv">Curriculum</label>
        <input id="cv" name="cv" type="file" required />
    </fieldset>
    <button type="submit">Enviar</button>
</form> 
index.php
Código PHP:
<?php

if ($_POST && $_FILES) {
    if (
copy($_FILES['cv']['tmp_name'], $file "cv/{$_FILES['cv']['name']}")) {
        
$db = include 'db.php';
        
$st $db->prepare('INSERT INTO persona VALUES(?, ?, ?, ?, ?, ?)');
        
$st->execute(array_values($_POST + [$file]));
    }
    else echo 
'Ha ocurrido un error subiendo el Curriculum!';
}
else include 
'form.php';
Espero te sirva, te recomiendo no sólo copiar y pegar el código, sino también aprovechar de las buenas prácticas que te estoy proporcionando, la mas importante en este ejemplo la separación de la lógica (index.php) de la presentación de los datos (form.php), incluso el acceso a esos datos (db.php).

Saludos.
  #4 (permalink)  
Antiguo 08/02/2014, 08:38
 
Fecha de Ingreso: octubre-2011
Mensajes: 7
Antigüedad: 12 años, 6 meses
Puntos: 0
Respuesta: Pasar valores entre varios formularios

Cita:
Iniciado por pateketrueke Ver Mensaje
Revisa en tu navegador (2.php) el código HTML generado del formulario, ¿aparece ahí el valor en el campo hidden?


Claro que sí, ¿lo has intentado?
No, no llegaba el hidden.
Si, lo habia intentado
Entre tantas cosas que habia intentado y mi escaso conocimiento no podria decirte ahora que error tiraba o porque no funcionaba. Gracias igual.

Cita:
Iniciado por lolainas Ver Mensaje

Espero te sirva, te recomiendo no sólo copiar y pegar el código, sino también aprovechar de las buenas prácticas que te estoy proporcionando, la mas importante en este ejemplo la separación de la lógica (index.php) de la presentación de los datos (form.php), incluso el acceso a esos datos (db.php).

Saludos.
Asi como me lo entregas funciona, pero no se porque...

No entiendo desde el PDO de db.php hasta el index.php completo...

Pense que era necesario pasar $nombre=$_POST['nombre'] y después decirle donde ubicarse en lugar de ponerle ?,?,?,?

Y bueno, la parte de $_FILE la tengo en pañales... espero que el manual de PHP que tienen en la pagina me saque todas estas dudas.


Ante todo, MUCHAS GRACIAS A AMBOS, se puede dar como solucionado, aunque no sepa porque.
  #5 (permalink)  
Antiguo 08/02/2014, 09:04
lolainas
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Pasar valores entre varios formularios

Encantado amigo, pero quizás el error que estás cometiendo es darlo por solucionado tan pronto, quizás tu objetivo no es que funcione, sino comprender por qué funciona, lo que te ayudará en futuros proyectos a saber manejarte mejor y crear un entorno agradable para tí.

Tengo un rato y me gustaría explicarte, por que por más que la solución sea válida, lo bonito está en todo eso que no se entiende.

1 (form.html). Doy por hecho que comprendes el fichero form.html, no contiene ninguna lógica desde el momento que no es php.

2 (db.php). Sobre PDO:
[URL="http://www.forosdelweb.com/f18/anuncio-extension-mysql-considera-obsoleta-1008145/"]Anuncio del foro sobre la extensión mysql de php[/URL]
Te recomiendo siempre que utilices una herramienta consultes única y exclusivamente su documentación oficial, lo que no significa que el resto no sea válida, pero tendrás la garantía de saber como funciona concretamente esa tecnología con la que estás desarrollando y estar al día de sus últimas actualizaciones.
[URL="http://es.php.net/pdo"]Aquí tienes el manual oficial de PDO.[/URL] a partir de este momento, leyendo esa documentación empezarás a comprender mejor como funciona PDO.

Lo que hago en el fichero db.php es devolver un objeto PDO, es decir un enlace a la base de datos como el que me devolvía el antiguo mysql_connect.

3 (index.php).
a) ¿Porqué '?,?,?,?,...'? [URL="http://es.php.net/manual/es/pdo.prepare.php"]PDO::prepare[/URL]
b) ¿Porqué if($_POST && $_FILES)? Porque necesito que haya post y haya algún fichero en $_FILES antes de hacer nada, en caso de que no se reciban ni POST ni FILES significa que la solicitud ha sido por GET, con lo cual debo mostrar el formulario y no procesarlo aún.
c) El resto es funcionamiento de PDO y una validación antes de insertar el registro en la base de datos, por que en el caso de que no se pueda subir el fichero, sería inútil agregar algo a la base de datos.

Amigo, espero resolver tus dudas. Saludos.

EDICIÓN:
Haz un var_dump($_POST + [$file]); antes de la llamada a $st->execute y sabrás porqué funciona. Los símbolos de pregunta se alimentan de los valores del array que recibe execute en el mismo orden que están creados.

Utiliza mucho var_dump en tus proyectos, te ayudará a depurar mejor tus aplicaciones.

Última edición por lolainas; 08/02/2014 a las 09:18
  #6 (permalink)  
Antiguo 12/02/2014, 10:09
 
Fecha de Ingreso: octubre-2011
Mensajes: 7
Antigüedad: 12 años, 6 meses
Puntos: 0
Respuesta: Pasar valores entre varios formularios

Gracias por la info, junto con el manual de esta web sigo el de php.net, pero ese es mas difícil de entender y aveces (la mayoría) esta en ingles, asi que prefiero practicar un poco antes de meterme con ellos :P

El código completo anda bien en mi pc, pero no en el host.

A que se puede deber?

Fatal error: Call to a member function prepare() on a non-object in /public_html/Secure/index.php on line 6

Última edición por SpamKiller; 12/02/2014 a las 12:56
  #7 (permalink)  
Antiguo 12/02/2014, 16:03
lolainas
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Pasar valores entre varios formularios

Cita:
Iniciado por SpamKiller Ver Mensaje
Fatal error: Call to a member function prepare() on a non-object in /public_html/Secure/index.php on line 6
No se ha creado el objeto PDO, hazlo así:

Código PHP:
 <?php

if ($_POST && $_FILES) {
    if (
copy($_FILES['cv']['tmp_name'], $file "cv/{$_FILES['cv']['name']}")) {
        
$db = new PDO('mysql:host=TU_HOST;dbname=TU_BASE_DE_DATOS;''TU_USUARIO''TU_PASSWORD');
        
$st $db->prepare('INSERT INTO persona VALUES(?, ?, ?, ?, ?, ?)');
        
$st->execute(array_values($_POST + [$file]));
    }
    else echo 
'Ha ocurrido un error subiendo el Curriculum!';
}
else include 
'form.php';

Etiquetas: formulario, formularios, html, mysql, select, sql, variable
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 14:33.