Foros del Web » Programando para Internet » PHP »

Pregunta de if else

Estas en el tema de Pregunta de if else en el foro de PHP en Foros del Web. Código PHP: if( $ime != ""  and  $mail != ""  and  $mensaje != "" ) {  mysql_query ( "INSERT INTO formulario (ime, mail, mensaje) VALUES ('$ime', '$mail', '$mensaje')" );  }  Tengo un formulario ...
  #1 (permalink)  
Antiguo 08/04/2009, 12:59
Avatar de miros84  
Fecha de Ingreso: diciembre-2008
Mensajes: 351
Antigüedad: 15 años, 4 meses
Puntos: 4
Pregunta de if else

Código PHP:
if($ime!="" and $mail!="" and $mensaje!="")

mysql_query("INSERT INTO formulario (ime, mail, mensaje)
VALUES ('$ime', '$mail', '$mensaje')"
); 

Tengo un formulario en donde los usuarios pueden dejar opinion, pero al dar F5, si has dejado antes alguna opinion, se vuelve a insertar la misma opninion. Por eso he hecho un if-else para que no me mete datos en la tabla si no se rellenan los campos, pero es que no me funcciona. Tengo algun error?
  #2 (permalink)  
Antiguo 08/04/2009, 13:04
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Pregunta de if else

en ves de eso, evitalo desde otro punto...

cuando insertes correctamente, redirige a la misma página para borrar el post...

y siempre, comprueba que exista el POST antes de insertar/actualizar ... y sobre todo, valida todo!

Código PHP:
if ( ! empty($_POST))
{
  
$id = ! empty($_POST['id'])? $_POST['id']: '';
  
$msg = ! empty($_POST['msg'])? $_POST['msg']: '';

  if ( ! empty(
$id) && ! empty($msg))
  {
    
// ...

    
$sql 'INSERT ...';

    
header("Location: $_SERVER[PHP_SELF]");
  }

espero comprendas, suerte!
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 08/04/2009, 13:13
Avatar de miros84  
Fecha de Ingreso: diciembre-2008
Mensajes: 351
Antigüedad: 15 años, 4 meses
Puntos: 4
Respuesta: Pregunta de if else

Código PHP:
<?php 
ini_set
('error_reporting'E_ALL);
$self=$_SERVER['PHP_SELF'];
$con mysql_connect("456","web","dfgdfgdfg");
if (!
$con)
  {
  die(
'Could not connect: ' mysql_error());
  }

mysql_select_db("mitabla"$con);


if(isset(
$_POST["ime"])) {$ime=addslashes(trim($_POST["ime"]));}
if(isset(
$_POST["mail"])) {$mail=addslashes(trim($_POST["mail"]));}
if(isset(
$_POST["mensaje"])) {$mensaje=addslashes(trim($_POST["mensaje"]));}
if(isset(
$_POST["spam"])) {$spam=addslashes(trim($_POST["spam"]));}


if(
$ime!="" and $mail!="" and $mensaje!="")

if(
$spam==78){ 
mysql_query("INSERT INTO formulario (ime, mail, mensaje)
VALUES ('$ime', '$mail', '$mensaje')"
); 



$result mysql_query("SELECT * FROM formulario");
while(
$row mysql_fetch_array($result))
{
aqui va el texto de la tabla
}
?>

Echa un vistazo si tengo la suficiente seguridad.
La linea if($spam==78){} es porque tengo in input con antispam pregunta, donde si respondes con 78 se inserta, si no, no se inserta nada. Donde meteria el codigo que tu me proporcionaste?
  #4 (permalink)  
Antiguo 08/04/2009, 13:16
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Pregunta de if else

no lo tienes que meter en ningún lado !!!

es solo un ejemplo, analizalo... y aplicalo a tu propio script.....


suerte!
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 08/04/2009, 13:22
Avatar de miros84  
Fecha de Ingreso: diciembre-2008
Mensajes: 351
Antigüedad: 15 años, 4 meses
Puntos: 4
Respuesta: Pregunta de if else

Es que se me hace mas complejo de lo que yo llego. Algo mas sencillo es imposible? La manera que yo utilizé deberia funcionar, no? No veo el error...
  #6 (permalink)  
Antiguo 08/04/2009, 14:21
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: Pregunta de if else

El ejemplo que te proporciono pateketrueke solo revisa si las variables están vacías etc ...

Pero, básicamente... para redireccionar lo que tienes que hacer es:
header("Location: $_SERVER[PHP_SELF]");

Nota, no puedes imprimir nada ante de enviar cabeceras al navegador
  #7 (permalink)  
Antiguo 08/04/2009, 15:29
Avatar de acoevil  
Fecha de Ingreso: julio-2008
Ubicación: localhost/colombia/sevillaValle.php
Mensajes: 1.123
Antigüedad: 15 años, 8 meses
Puntos: 32
Respuesta: Pregunta de if else

Basicamente lo que te estan diciendo es que revices los valores que te llegan para insertarlos en tu base de datos

por ejemplo

$resultado=mysql_query("INSERT INTO formulario (ime, mail, mensaje)
VALUES ('$ime', '$mail', '$mensaje')");

Entonces colocas asi

if($resultado) // si los datos se insertan correctamente
{
header("Location: $_SERVER[PHP_SELF]");

}
else
{
...
}

Salu2
  #8 (permalink)  
Antiguo 09/04/2009, 03:53
Avatar de miros84  
Fecha de Ingreso: diciembre-2008
Mensajes: 351
Antigüedad: 15 años, 4 meses
Puntos: 4
Respuesta: Pregunta de if else

pero no se trata de insertar los datos corectamente. No me entendeis? Os dejo el enlace. http://www.ley-dominical.websphp.com/
Alguien deja una opinion, luego refresca con F5 y esa misma opninion se inserta otra vez. He dejado el codigo de como lo hago mas arriba. Abajo de todo he hecho un echo($ime); echo($mail); echo($mensaje);
y he visto que se me mantienen los valores de las varibales.
  #9 (permalink)  
Antiguo 09/04/2009, 08:42
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Pregunta de if else

Es por eso que como te decia pateketrueke, tienes que usar un header() para redireccionar al final para limpiar los datos que vienen por $_POST y así evitar la doble inserción.

Saludos.
  #10 (permalink)  
Antiguo 09/04/2009, 12:59
Avatar de miros84  
Fecha de Ingreso: diciembre-2008
Mensajes: 351
Antigüedad: 15 años, 4 meses
Puntos: 4
Respuesta: Pregunta de if else

Vale. Esta claro. Lo unico que no entiendo es como poner un header()
Se que tiene que ir al principio de todo para que no me de error, pero yo lo nececito poner despues del "Mysql query insert into"
Como lo hago?
  #11 (permalink)  
Antiguo 09/04/2009, 14:04
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: Pregunta de if else

Cita:
Se que tiene que ir al principio de todo para que no me de error, pero yo lo nececito poner despues del "Mysql query insert into"
No al principio de TODO, sino antes de cualquier salida.

Código PHP:
<?php
echo "Hola mundo";
header("Location: hola.html"); //da error
?>
Código PHP:
<?php
mysql_query
(/* ... */);
header("Location: hola.html"); //no da error, porque no hemos impreso nada aun
?>
  #12 (permalink)  
Antiguo 09/04/2009, 14:09
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Pregunta de if else

No, no tiene que ir al principio de todo, tiene que ir antes de cualquier salida de texto, por lo que perfectamente lo puedes poner después de un mysql_query, solo verifica que no haya ninguna salida de texto antes para que no te salga error.

Saludos.
  #13 (permalink)  
Antiguo 09/04/2009, 14:52
Avatar de miros84  
Fecha de Ingreso: diciembre-2008
Mensajes: 351
Antigüedad: 15 años, 4 meses
Puntos: 4
Respuesta: Pregunta de if else

Lo he puesto asi:

Código PHP:
mysql_query("INSERT INTO form(ime, mail, mensaje)
VALUES ('$ime', '$mail', '$mensaje')"
); 
}
$result mysql_query("SELECT * FROM form");
if(
$result)
{
header("Location:http://ley-dominical.websphp.com/");}
while(
$row mysql_fetch_array($result)) 
Y me da este error:
Cannot modify header information - headers already sent by (output started at /../../../ley-dominical/index.php:6) in /../../../ley-dominical/index.php on line 129

las primeras 10 lineas son:

Código PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<
html xmlns="http://www.w3.org/1999/xhtml">
<
head>
<
meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<
title>LEY DOMINICAL</title>
<
style type="text/css">
<!--
.
tr54 {
    
text-aligncenter;
    
color#006; 
Es decir en linea 6 tengo <style type="text/css">
No entiendo este problema.
  #14 (permalink)  
Antiguo 09/04/2009, 14:56
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Pregunta de if else

No puedes enviar nada, nada de contenido de texto antes de poder enviar un header() en este caso todo tu HTML es texto, por eso tienes que mover el proceso a antes:
Código PHP:
<?php
if( hay_datos_post() ) {
      
// compruebas todos los datos
      
insertar_bdd();
      if( 
insertar_exito() ) {
              
redirigir();
      } 
}
// a partir de aqui todo tu HTML
?>
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
Saludos.
  #15 (permalink)  
Antiguo 09/04/2009, 15:15
Avatar de miros84  
Fecha de Ingreso: diciembre-2008
Mensajes: 351
Antigüedad: 15 años, 4 meses
Puntos: 4
No consigo que me vaya

Última edición por miros84; 14/04/2009 a las 07:30
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 13:14.