Problema en formulario PHP

Estado
No está abierto para más respuestas.
Mensajes
399
Puntuación de reacción
2
Hola,
tengo un problema con un formulario que genera texto sobre una imagen. El código es el siguiente:

PHP:
<?php 

if (!isset($_POST) OR empty($_POST["juego"]) OR empty($_POST["nombre"]) OR empty($_POST["pueblo"])
OR empty($_POST["codigo"]) OR empty($_POST["estacion"]) OR empty($_POST["personaje"]) OR empty($_POST["frutas"])
OR empty($_POST["correo"])
){ 

    echo '<form name="frm" action="islatropical.php" method="post">Animal Crossing: 
    <input type="text" maxlength="35" name="juego"></input> <br/>Nombre: 
    <input type="text" maxlength="35" name="nombre"></input> <br/>Pueblo: 
    <input type="text" maxlength="35" name="pueblo"></input> <br/>Código de amigo: 
    <input type="text" maxlength="35" name="codigo"></input> <br/>Estación favorita: 
    <input type="text" maxlength="35" name="estacion"></input> <br/>Personaje favorito: 
    <input type="text" maxlength="35" name="personaje"></input> <br/>Frutas en tu pueblo:
    <input type="text" maxlength="35" name="frutas"></input> <br/>Correo electrónico:
    <input type="text" maxlength="35" name="correo"></input> <br/>
    <input type="submit" value="Obtener tarjeta"/></form>'; 
}else{ 

    header("Content-type: image/jpeg"); contenido de la pagina 
    $ju = trim($_POST["juego"]); 
    $no = trim($_POST["nombre"]);
    $pu = trim($_POST["pueblo"]); 
    $co = trim($_POST["codigo"]); 
    $es = trim($_POST["estacion"]); 
    $pe = trim($_POST["personaje"]); 
    $fr = trim($_POST["frutas"]); 
    $cr = trim($_POST["correo"]); 
    $im = imagecreatefromjpeg("./islatropical.jpg");
    $blanco = imagecolorallocate($im, 255, 255, 255); // 
    $negro = imagecolorallocate($im, 0, 0, 0); // 
    imagestring($im,5,50,20,"Animal Crossing: ".$ju,$blanco); // 
    imagestring($im,5,50,40,"Nombre: ".$no,$blanco); //  
    imagestring($im,5,50,60,"Pueblo: ".$pu,$blanco); //  
    imagestring($im,5,50,80,"Código de amigo: ".$co,$blanco); //  
    imagestring($im,5,50,100,"Estación favorita: ".$es,$blanco); // 
    imagestring($im,5,50,120,"Personaje favorito: ".$pe,$blanco); //  
    imagestring($im,5,50,140,"Frutas en el pueblo: ".$fr,$blanco); // 
    imagestring($im,5,50,160,"Correo electrónico: ".$no,$blanco); //  
    imagepng($im); 
    imagedestroy($im);
} 
?>

Está todo bien, menos esta línea:

PHP:
echo <form name="frm" action="islatropical.php" method="post">

La imagen se genera, al igual que el formulario, en "islatropical.php" (con index.php sí iba, pero como ahora el index es para la presentación, pues he tenido que hacer el formulario en otra página).
El problema viene dado por la imagen, ya que no se crea al tener en el action el "islatropical.php" (si pongo index.php sí va)

¿Hay alguna posibilidad de poder poner el action y que no sea en index?
 
Última edición:

Bleed

Diamante
Usuario de Bronce
Mensajes
2,408
Puntuación de reacción
1
Si usas imagecreatefromjpeg para crear la imagen, para volcarla no puedes usar imagepng. El action del formulario puede apuntar donde tu quieras.

PD: Hay que tener cuidado al enviar datos por post y usarlos sin tratar. La función trim() elimina los posibles espacios que pueda haber al principio o final del texto, pero sin tener en cuenta su longitud ni su contenido.
 
Última edición:
Mensajes
399
Puntuación de reacción
2
Pues no, parece ser que esa no es la solución :( (además, antes tenía imagepng para obtener la imagen y sí me salía).
 
Mensajes
12
Puntuación de reacción
0
el imagepng es solo para generarla, y si dejas el action vacio ?

Así se envía el post en la misma url
 
Mensajes
399
Puntuación de reacción
2
He eliminado el action, he puesto imagejpeg y sigue sin funcionar...
 
Mensajes
200
Puntuación de reacción
0
Hola,
tengo un problema con un formulario que genera texto sobre una imagen. El código es el siguiente:

La imagen se genera, al igual que el formulario, en "islatropical.php" (con index.php sí iba, pero como ahora el index es para la presentación, pues he tenido que hacer el formulario en otra página).
El problema viene dado por la imagen, ya que no se crea al tener en el action el "islatropical.php" (si pongo index.php sí va)

¿Hay alguna posibilidad de poder poner el action y que no sea en index?

Tienes que mover el código que recibe las variables $_POST y ejecuta el proceso a islatropical.php.
 

Bleed

Diamante
Usuario de Bronce
Mensajes
2,408
Puntuación de reacción
1
A ver, es mucho más simple que todo eso: añades un select al formulario para seleccionar el fondo y ya está. Y no puedes quitar el action como te han sugerido, siempre tiene que apuntar a la página de destino donde vayas a recibir los datos.

Te comentaba lo de la seguridad porque si no tratas correctamente los datos que recibas, alguien podría pasar código php a través de un campo y ejecutarlo en tu servidor sin tu conocimiento.

Si cambias la configuración de PHP para que muestre todos los errores del script verás que a veces las cosas "funcionan" como tu quieres, pero no correctamente.

Te animo a que explores un poco más el mundo del php. Es un código bonito, "fácil" de aprender, muy bien documentado y que sirve para muchas más cosas de las que la gente piensa, no sólo para webs. Ademas, te ayudará a entender mejor otros lenguajes de programación. Si necesitas documentación dilo. ;)

Enviado desde mi LG-P700 usando Tapatalk 2
 
Mensajes
399
Puntuación de reacción
2
He visto ya bastante webs que hablan sobre PHP y hasta he visto tutoriales cortos, pero en este caso no sé cómo hacer para que funcione de una vez el formulario... Llevo días intentándolo.
Si sois tan amables, ¿podríais ponerme el código correcto?
Disculpad las molestias, pero es que por mucho que lo intento no consigo solucionar el error...
 
Mensajes
232
Puntuación de reacción
0
acabo de probar el codigo q proporcionas y me sale correctamente.

cosas q pueden hacer q falle:
- no tner la libreria GD instalada
- la ubicacion de la imagen, si la pones en la misma carpeta q el script no debe de fallar.
 

Bleed

Diamante
Usuario de Bronce
Mensajes
2,408
Puntuación de reacción
1
Yo no he podido probarlo, pero si el script funciona, es posible que el fallo sea de la imagen. Comprueba que tiene el nombre y tipo correcto, no la subas a traves de los webftp y asegúrate que la ruta sea la correcta.

Enviado desde mi LG-P700 usando Tapatalk 2
 
Mensajes
399
Puntuación de reacción
2
- La imagen está en la misma carpeta que el script.
- Tiene el mismo nombre y los tipos también.
- Subido con FileZilla.
- Yo no he instalado nada de GD, me venía ya (creo). Y si la instalo, ¿los demás usuarios también tienen que hacerlo para poder hacer sus tarjetas?

Por cierto, podéis probar aquí la prueba, haciendo clic en el 2º fondo (el de la isla tropical, que es donde estoy haciendo las pruebas): Tarjetas Animal Crossing
 
Mensajes
232
Puntuación de reacción
0
la imagen no sale, comprueba si la imagen esta en el servidor toda en minusculas y al leerla en el script tambien, sino podria dar error por una simple Mayuscula

sino ni idea
 
Mensajes
399
Puntuación de reacción
2
Sí, está en todo en minúscula.
Lo de la librería GD yo no he instalado nada...
 

Bleed

Diamante
Usuario de Bronce
Mensajes
2,408
Puntuación de reacción
1
revisando vi



tienes eso asi? sin las dobles / ? // contenido de la pagina
sino da un fallo

La doble barra invertida se utiliza para comentar una línea y no influye lo más mínimo en la ejecución del script. También se puede usar # y /* */.

Cuando llegue a casa lo pruebo, pero vamos, que el primer código que te puse funciona correctamente.

Enviado desde mi LG-P700 usando Tapatalk 2
 
Mensajes
232
Puntuación de reacción
0
Bleed pero al no tener las // de comentario da un warning y por eso puede fallar
aun asi a mi ese codigo tal y como esta me funciona en un servidor local con instalacion minima
 

Bleed

Diamante
Usuario de Bronce
Mensajes
2,408
Puntuación de reacción
1
PHP:
<?php
if (!isset($_POST) OR empty($_POST["nombre"]) OR empty($_POST["ciudad"])){
    // Aqui ponemos un formulario para recoger los datos
    echo '<form name="frm" action="index.php" method="post">Imagen:
	<select name="imagen">
  <option value="scr_01_03.jpg">Imagen 1</option>
  <option value="scr_01_02.jpg">Imagen 2</option>
</select> 
<br/>Nombre:
    <input type="text" maxlength="25" name="nombre"></input> <br/>Ciudad:
    <input type="text" maxlength="35" name="ciudad"></input>
    <input type="submit" value="Enviar"/></form>';
}else{
    // Aqui recibimos los datos y creamos la imagen
    header("Content-type: image/jpeg"); // Cabecera header para señalar contenido de la pagina
    $nm = trim($_POST["nombre"]); // Quitamos posibles espacios
    $cd = trim($_POST["ciudad"]);
    $im = imagecreatefromjpeg("./".$_POST["imagen"].""); // Cogemos la plantilla vacia seleccionada en el <select></select>. La imagen tiene que existir (se puede y debe comprobar primero)
    $blanco = imagecolorallocate($im, 255, 255, 255); // Definimos el color blanco...
    $negro = imagecolorallocate($im, 0, 0, 0); // ...y el negro
    imagestring($im,5,50,50,"Nombre : ".$nm,$negro); // Escribimos en la imagen vacia
    imagestring($im,5,133,210,"Ciudad : ".$cd,$blanco); //  Volvemos a escribir mas texto
    imagejpeg($im); // Mostramos la imagen
    imagedestroy($im); // La liberamos de la memoria
}
?>

Ese codigo funciona perfectamente, aunque es muy mejorable. :mola:
 
Estado
No está abierto para más respuestas.
Arriba