PHP-Hispano.net Comunidad hispana de desarrollo web

Contacto | #php_para_torpes | Enlázanos | ¿Quiénes somos?

20 usuarios Online (0)

Darse de alta en la web | Recuperar password   
Inicio / Foros / PHP / Problema en formulario y PHP.

Problema en formulario y PHP.

10 respuestas 422 visitas Categoría PHP

Problema en formulario y PHP.

Avatar de pako8310
* * * * * * *

(Nivel 1 - 8 posts)

#0 Offline pako8310 Usuario 30 ene 10
Hola, buenas tardes ... Tengo un problemita, no sé que tan complejo pueda ser pero me está causando dolor de cabeza por más que he buscado la solución no encuentra ninguna que me resuelva el problema.

Tengo un formulario así:

                <form class="formulario" action="guarda.php" method="POST" enctype="multipart/form-data">
                    <fieldset>
                        <legend>Agregar nuevo canto</legend>
                        <div class="registro">
                            <label for="nombre_canto">Titulo: </label>
                            <input type="text" id="nombre_canto" name="nombre_canto" maxlength="100" size="100"/>
                        </div>
                        <div class="registro">
                            <label for="archivo_canto">Archivo de sonido: </label>
                            <input type="file" id="archivo_canto" name="archivo_canto" />
                        </div>
                        <input type="hidden" name="patron" value="canto" />
                    </fieldset>
                    <center><input type="submit" class="boton" value="Agregar Canto" /></center>
                </form>

En guarda.php recibo el campo hidden "patron", ya que en ese mismo archivo hago una distinción para guardar todo en la base de datos. El problema es que no me está reconociendo con $_POST['patron'] que es el input hidden que recibo. He leído que no es posible, por el ENCTYPE del form del que viene. Alguna pista por donde poder moverme o donde tocarle al código? Gracias por su tiempo, saludos.

Problema en formulario y PHP.

Avatar de luicos
* * * * * * *

(Nivel 2 - 128 posts)

#1 Offline luicos Usuario 30 ene 10
Prueba a ponerle: <input type="hidden" name="patron" id="patron" value="canto" />

 

no me va :(

Avatar de pako8310
* * * * * * *

(Nivel 1 - 8 posts)

#2 Offline pako8310 Usuario 31 ene 10
Amigo, antes que nada muchas gracias por contestar. Pero desafortunadamente no me va, en guarda.php recibo por POST y hago un switch para guardar "algo" en la BD, dependiendo del origen de este parámetro, y siemper termina entrando al "default" pues no consigo leer el valor del atributo hidden llamado "patron".

Alguna otra idea? Gracias nuevamente ...

Re: Problema en formulario y PHP.

Avatar de Eloy8857
* * * * * * *

(Nivel 4 - 445 posts)

#3 Offline Eloy8857 Usuario 01 feb 10
Pon el código del guarda.php porque ese formulario está bien. Debes tener algún fallo en el switch.

Saludos.

Restless Souls Online: se viene un gran MMORPG

Codigo de guarda.php

Avatar de pako8310
* * * * * * *

(Nivel 1 - 8 posts)

#4 Offline pako8310 Usuario 01 feb 10
Gracias por contestar, el código de guarda.php es este:

<?php
    require_once("funciones/config.php");
    require_once("funciones/funciones.php");
    session_start();
    if (!isset($_SESSION['status']))
        Header("Location: ../index.php");
    $conn = new conexion($servidor, $usuario, $pass, $db);
    $conn->conectar();
    $conn->db();
    switch ($_POST['patron']) {
        case "link":
            $sql="insert into links (titulo, descripcion, url) values ('".$_POST['titulo']."', '".$_POST['descripcion']."', '".$_POST['url']."')";
            if (mysql_query($sql))
                Header ("Location: links.php");
            break;
        case "descarga":
            $sql="insert into descargas (nombre, links_descarga) values ('".$_POST['nombre']."','".$_POST['links']."')";
            if (mysql_query($sql))
                Header ("Location: descargas.php");
            break;
        case "canto":
            $nombre_archivo=$_FILES["archivo_canto"]['name'];
            $prefijo = substr(md5(uniqid(rand())),0,6);
            $nombre_archivo = "cantos/".$prefijo."_".$nombre_archivo;
            $sql = "insert into cantos(nombre, archivo) values ('".$_POST['nombre_canto']."','".$nombre_archivo."')";
            if (mysql_query($sql) && move_uploaded_file($_FILES["archivo_canto"]['tmp_name'], "../".$nombre_archivo))
                Header ("Location: cantos.php");
            else
                echo "Ha ocurrido un error al intentar subir el archivo, háblale a Pako.";
            break;
        case "post":
            $sql="insert into posts (titulo, contenido, fecha) values ('".$_POST['titulo']."','".$_POST['contenido']."', now())";
            if (mysql_query($sql))
                Header ("Location: posts.php?accion=ver");
            break;
        default:
            echo "Es necesario venir desde un formulario, seguramente no lo estás realizando bien ..";
            echo $_POST['patron'];
            break;
    }
?>


En todos los case del switch funciona bien viniendo de formularios que contienen el campo hidden llamado patron, excepto para el value "canto", supuse yo que sería por el ENCTYPE del formulario del que viene. Puse un ECHO solo para saber que valor traería, y resulta que viene en blanco :( 

Muchas gracias por su ayuda, saludos.

Re: Problema en formulario y PHP.

Avatar de bruno
* * * * * * *

(Nivel 3 - 171 posts)

#5 Offline bruno Usuario 01 feb 10
Hola<a href="http://www.php-hispano.net/perfiles/pako8310" title="Ver perfil
de pako8310"> pako831</a>
Hace esta prueba en el archivo  guarda.php :

 echo $_POST['patron'] , porq me parece q no entra por ningun case porq no tiene ningun valor coincidente que llega del form, fijate q esos CASE "nombre" tiene q coincidir con algun dato que llega del form mediante $_POST , y ami me parece q no coincide ninguno .. 

Bruno M. Tenaglia - Analista Programador
http://www.bmtblog.com

Segpun yo, si viene :S

Avatar de pako8310
* * * * * * *

(Nivel 1 - 8 posts)

#6 Offline pako8310 Usuario 01 feb 10
Hola amigo, buenas tardes...

Según yo si viene, lo indico en el primer código que puse y hago la referencia está en:

<input type="hidden" name="patron" value="canto" />

por name=patron debería ingresar al case respectivo del swtich. En todos los case funciona, excepto para "canto" que lo único raro que le veo, es que viene de un form con enctype="multipart/form-data" en todo lo demás son iguales!!

Gracias también a tu tiempo y respuesta.

Re: Problema en formulario y PHP.

Avatar de Eloy8857
* * * * * * *

(Nivel 4 - 445 posts)

#7 Offline Eloy8857 Usuario 01 feb 10
Ese código recibe bien el formulario. Vamos, he hecho copiar y pegar y comentar las funciones y entra por el case "canto" sin problemas.

Revisa la configuración del apache, a ver qué tipo de cabeceras se reciben. Para eso el addon/plugin livehttpheaders de firefox viene bien.

Saludos.

Restless Souls Online: se viene un gran MMORPG

Resultados de Live HTTP Headers

Avatar de pako8310
* * * * * * *

(Nivel 1 - 8 posts)

#8 Offline pako8310 Usuario 02 feb 10
Gracias Eloy8857, realmente entiendo poco de lo que me comentaste, pero los resultados que me muestra el addon son:

----------------------------------------------------------
http://localhost/jornadas/admin/guarda.php

POST /jornadas/admin/guarda.php HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; es-MX; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: es-MX,es;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://localhost/jornadas/admin/cantos.php
Cookie: fontSize=80; PHPSESSID=d97d9d14d6564e835bf6b54eb7d3f6e7
Content-Type: multipart/form-data; boundary=---------------------------41184676334
Content-Length: 9929485
-----------------------------41184676334
Content-Disposition: form-data; name="nombre_canto"

a
-----------------------------41184676334
Content-Disposition: form-data; name="archivo_canto"; filename="03-Bone Thugs N Harmony Ft. Kayne West-I Ain't Goin' Nowhere.mp3"
Content-Type: audio/mpeg

ID3
HTTP/1.x 200 OK
Date: Tue, 02 Feb 2010 04:05:29 GMT
Server: Apache/2.2.4 (Win32) PHP/5.2.3
X-Powered-By: PHP/5.2.3
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-Length: 82
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html
----------------------------------------------------------
Realmente no sé como interpretarlo, agradezco mucho su ayuda que me han brindado, y cualquiera que me puedan seguir brindando. Saludos.

Re: Problema en formulario y PHP.

Avatar de Eloy8857
* * * * * * *

(Nivel 4 - 445 posts)

#9 Offline Eloy8857 Usuario 02 feb 10
Lo que interesa de las cabeceras es el Accept que te da el Apache, y como hay un */* se ve que no hay problema. Esas cabeceras es parácticamente lo mismo que me da a mí al probarlo. Si te fijas, en el segundo content enviado por POST se corta la información tras el ID3, y es porque son datos binarios. Si subieras un archivo de texto plano verías después el próximo contenido que sería el hidden, pero aunque no aparezca sí que se envía.

Yo lo he probado con:

Formulario:


<form class="formulario" action="guarda.php" method="POST" enctype="multipart/form-data">
<fieldset>
    <legend>Agregar nuevo canto</legend>
    <div class="registro">
        <label for="nombre_canto">Titulo: </label>
        <input type="text" id="nombre_canto" name="nombre_canto" maxlength="100" size="100"/>
    </div>
    <div class="registro">
        <label for="archivo_canto">Archivo de sonido: </label>
        <input type="file" id="archivo_canto" name="archivo_canto" />
    </div>
    <input type="hidden" name="patron" value="canto" />
</fieldset>
<center><input type="submit" class="boton" value="Agregar Canto" /></center>
</form>



guarda.php:


<?php
//require_once("funciones/config.php");
//require_once("funciones/funciones.php");
session_start();

/*if (!isset($_SESSION['status']))
    Header("Location: ../index.php");

$conn = new conexion($servidor, $usuario, $pass, $db);
$conn->conectar();
$conn->db();*/

switch ($_POST['patron']) {
    case 
"link":
        echo 
'link';
        
/*$sql="insert into links (titulo, descripcion, url) values ('".$_POST['titulo']."', '".$_POST['descripcion']."', '".$_POST['url']."')";
        if (mysql_query($sql))
            Header ("Location: links.php");*/
    
break;
    case 
"descarga":
        echo 
'descarga';
        
/*$sql="insert into descargas (nombre, links_descarga) values ('".$_POST['nombre']."','".$_POST['links']."')";
        if (mysql_query($sql))
            Header ("Location: descargas.php");*/
    
break;
    case 
"canto":
        echo 
'canto';
        
/*$nombre_archivo=$_FILES["archivo_canto"]['name'];
        $prefijo = substr(md5(uniqid(rand())),0,6);
        $nombre_archivo = "cantos/".$prefijo."_".$nombre_archivo;
        $sql = "insert into cantos(nombre, archivo) values ('".$_POST['nombre_canto']."','".$nombre_archivo."')";
        if (mysql_query($sql) && move_uploaded_file($_FILES["archivo_canto"]['tmp_name'], "../".$nombre_archivo))
            Header ("Location: cantos.php");
        else
            echo "Ha ocurrido un error al intentar subir el archivo, háblale a Pako.";*/
    
break;
    case 
"post":
        echo 
'post';
        
/*$sql="insert into posts (titulo, contenido, fecha) values ('".$_POST['titulo']."','".$_POST['contenido']."', now())";
        if (mysql_query($sql))
            Header ("Location: posts.php?accion=ver");*/
    
break;
    default:
        echo 
"Es necesario venir desde un formulario, seguramente no lo estás realizando bien ..";
        echo 
$_POST['patron'];
    break;
}
?>



Prueba a hacer eso y verás como te aparece "canto" en la página. De modo que tienes que tener algún tipo de fallo que se te está pasando por alto... ¿qué ocurre exactamente cuando lo haces con el código que has puesto antes?

Por cierto, header no termina la ejecución del script: establece una cabecera que se enviará al navegador cuando termine la ejecución del script. Esto te lo digo porque haces un header en caso de que no esté definida la vairable de sesión "status" pero el resto de código se seguirá evaluando (yo pondría el resto de código metido un else).

Saludos.

Restless Souls Online: se viene un gran MMORPG

Re: Problema en formulario y PHP.

Avatar de pako8310
* * * * * * *

(Nivel 1 - 8 posts)

#10 Offline pako8310 Usuario 05 feb 10
Con el código que les comenté al principio, nunca entra al case "canto", como si no encontrara esa variable. Y de hecho por esa razón coloqué el y me percaté de que no me imprime nada, como si no reconociera esa variable que estoy pasando por post. Y en la otra parte tienes toda la razón, debería ponerlo en un else pues, sino tengo declarada la variable de session llamada "status" siempre pedirá iniciarla regresando mediante Header a index.php.

Probaré lo que me has comentado y ya te avisaré los resultados. Lo raro es que utilizo distintos formularios para este mismo switch, y en todos funciona de manera correcta. 

Gracias por su apoyo, saludos.

Responder mensaje

Para poder participar debes estar registrado e identificado. Si no estás registrado como usuario de PHP-Hispano, :: Registrar ::
Login / Password   

php-hispano.net 2002 - 2010 | XHTML 1.0
Datos Legales | Webmaster