Foros del Web » Programando para Internet » PHP »

Varias cuestiones

Estas en el tema de Varias cuestiones en el foro de PHP en Foros del Web. Hola 1- Tengo un formulario, con dos select: Código: <select name="ruta"> <option value="ruta">A</option> <option value="ruta">B</option> <option value="ruta">C</option> <option value="ruta">D</option> </select> <select name="ruta1"> <option value="ruta1">A</option> <option ...
  #1 (permalink)  
Antiguo 23/04/2006, 17:22
Avatar de bichomen  
Fecha de Ingreso: junio-2003
Ubicación: Barcelona y alrededores, España
Mensajes: 874
Antigüedad: 14 años, 6 meses
Puntos: 2
Varias cuestiones

Hola
1- Tengo un formulario, con dos select:

Código:
<select name="ruta">

	<option value="ruta">A</option>
	<option value="ruta">B</option>
	<option value="ruta">C</option>
 	<option value="ruta">D</option>
	
</select>
<select name="ruta1">

	<option value="ruta1">A</option>
	<option value="ruta1">B</option>
	<option value="ruta1">C</option>
 	<option value="ruta1">D</option>
	
</select>
Pues bien lo que quiero es cuando seleccioné por ejemplo A del primero seleccione también A del segundo y si el usuario selecciona otro que salga un aviso o no pueda enviar el formulario.

2 - Con el formulario envió imágenes y texto a una base de datos, pues quiero saber como puedo evitar al hacer el submit que esos datos se guarden en la base de datos, si por ejemplo, no se ha subido la foto, se han dejado un campo vacio o pasa lo que expongo en el punto 1, etc???

3 - Y por ultimo, cuando envió el formulario los datos se graban en la base de datos, pero si le doy a actualizar, al navegador, se duplican los datos, como puedo evitar que se envien los datos cuando hace F5 o aztualiza la página???

bichomen
__________________
"Se sabe con exactitud, con cuanta imprecisión, se sabe algo"
Linux Registered User #320332
  #2 (permalink)  
Antiguo 23/04/2006, 18:47
Avatar de atak  
Fecha de Ingreso: julio-2005
Ubicación: Huancayo
Mensajes: 490
Antigüedad: 12 años, 5 meses
Puntos: 5
De acuerdo Selects

Hola bichomen

a lo mejor la respuesta a tu problemática lo puedes encontrar en el foro de JavaScript.


Salu2
__________________
. .: El mejor Inicio :. .
  #3 (permalink)  
Antiguo 23/04/2006, 20:46
Avatar de xyyy7  
Fecha de Ingreso: enero-2004
Ubicación: Maracay.-
Mensajes: 637
Antigüedad: 13 años, 10 meses
Puntos: 5
Cita:
1- Tengo un formulario, con dos select:

Código:
<select name="ruta">

	<option value="ruta">A</option>
	<option value="ruta">B</option>
	<option value="ruta">C</option>
 	<option value="ruta">D</option>
	
</select>
<select name="ruta1">

	<option value="ruta1">A</option>
	<option value="ruta1">B</option>
	<option value="ruta1">C</option>
 	<option value="ruta1">D</option>
	
</select>
Pues bien lo que quiero es cuando seleccioné por ejemplo A del primero seleccione también A del segundo y si el usuario selecciona otro que salga un aviso o no pueda enviar el formulario.
De ser asi, entonces tienes una caja de selección de mas...

Podrías hacer lo siguiente dentro de tu código php.-
Código PHP:
<?
$ruta1
="$ruta";
?>
esto vale si los valores de ambos selects son los mismos.-
de ser diferentes podrias hacer lo siguiente :
Código PHP:
<?
if($ruta=="x cosa"){ // x cosa es el valor que tiene unos de tu opciones del select
$ruta1="valor nuevo"// asigna valor
}
?>
Cita:
2 - Con el formulario envió imágenes y texto a una base de datos, pues quiero saber como puedo evitar al hacer el submit que esos datos se guarden en la base de datos, si por ejemplo, no se ha subido la foto, se han dejado un campo vacio o pasa lo que expongo en el punto 1, etc???
para este caso seria bueno que condiciones una validación de la funcion que estés usando para copiar o subir archivos al servidor
te doy un ejemplo:

tenemos hache tres métodos:

move_uploaded_file()
is_uploaded_file()
copy()

supongamos que estas usando move_uploaded_file(),
entonces haz lo siguiente:
Código PHP:
<?
// move_uploaded_file("$TuArchivo", $RutayNombre); 
//este es un ejemplo cualquiera, deja el que tu tienes funcionando sin tocar

//Creamos una variable que aplique la funcion que usas para subir tus archivos
$Subidas move_uploaded_file("$TuArchivo"$RutayNombre);

//Ahora validamos
if($Subidas) { // esto se produce si move_uploaded_file se realizo con éxito
//TU CODIGO PARA SUBIR DATOS A LA BASE DE DATOS AQUI//
}
else{
echo 
"Se produjo un error al intentar subir el archivo, intente de nuevo"
}
exit;
?>
De esta manera no se agregaran datos a tu Base de Datos sin no se llega a subir el archivo (foto)
Cita:
3 - Y por ultimo, cuando envió el formulario los datos se graban en la base de datos, pero si le doy a actualizar, al navegador, se duplican los datos, como puedo evitar que se envien los datos cuando hace F5 o aztualiza la página???
Para este caso yo en lo particular suelo usar esta técnica

Bueno podrías redireccionar la pagina que se encarga de los procesos hacia otra pagina de confirmación, de esta manera :
Código PHP:
<?
header
("location:http://www.tupagina.com/SuImagenFueSubida.php");
//con este ejemplo tienes que crear una pagina de confirmacion
?>
Podrías colocar el header justo después que valides la subida del archivo e introduzcas los valores de los campos a la base de datos.-

Saludos.-
__________________
Maracay Edo Aragua - Venezuela :
Mi Favorita :
http://www.MySQL.Com
  #4 (permalink)  
Antiguo 24/04/2006, 20:03
Avatar de bichomen  
Fecha de Ingreso: junio-2003
Ubicación: Barcelona y alrededores, España
Mensajes: 874
Antigüedad: 14 años, 6 meses
Puntos: 2
xyyy7

Hola, siento el retraso, ya e solucionado las dos primeras cuestiones, la primera como tu decías y la segunda, no igual pero aplicando la idea y tengo problemas con la ultima, me da este error:

Código:
Warning: Cannot modify header information - headers already sent by (output started at ...:14) in ... on line 118
Al enviar el formulario, hago que se cargue la página, para que valide el cuestionario, y eso hace de alguna manera que el header pete, como lo soluciono???

Y una ultima cuestión, si no se ha subido nada a la base de datos, por algun error, como puedo evitar que se suba la foto???

bichomen
__________________
"Se sabe con exactitud, con cuanta imprecisión, se sabe algo"
Linux Registered User #320332
  #5 (permalink)  
Antiguo 25/04/2006, 18:13
Avatar de bichomen  
Fecha de Ingreso: junio-2003
Ubicación: Barcelona y alrededores, España
Mensajes: 874
Antigüedad: 14 años, 6 meses
Puntos: 2
Haber, vuelvo a subir este tema haber si alguien me puede ayudar.


La cuestión, es que la página (crear.php) que tiene el formulario es la misma que lo valida. por eso en el form tengo:

Código:
<form action="crear.php" method="post" enctype="multipart/form-data">
Una vez enviado el form, se ha de validar, mediantes unos if() else, hasta el ultimo if() que lo da como bueno, entonces, en ese if(), envió el formulario a la base de datos, dandolo por bueno ya continuación pongo:

Código:
header("location: http://www.dominio.com/ruta/relativa/resultado.php"); (ruta relativa respecto al dominio)
exit;
Donde resultado.php es una página donde se muestra los datos introducidos y esto es lo que falla, me devuelve:

Código:
Warning: Cannot modify header information - headers already sent by (output started at /ruta/absoluta/crear.php:16) in /ruta/absoluta/crear.php on line 119
en la cabecera de la página crear.php, tengo:

Código:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
   "http://www.w3.org/TR/html4/strict.dtd">

<head>

<meta http-equiv="content-type" content="text/html; charset=utf-8" />
Haber si alguien, me puede guiar un poco, gracias

bichomen
__________________
"Se sabe con exactitud, con cuanta imprecisión, se sabe algo"
Linux Registered User #320332
  #6 (permalink)  
Antiguo 26/04/2006, 07:30
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Pues bien lo que quiero es cuando seleccioné por ejemplo A del primero seleccione también A del segundo y si el usuario selecciona otro que salga un aviso o no pueda enviar el formulario.
Eso lo debes resolver con javascript.

Cita:
2 - Con el formulario envió imágenes y texto a una base de datos, pues quiero saber como puedo evitar al hacer el submit que esos datos se guarden en la base de datos, si por ejemplo, no se ha subido la foto, se han dejado un campo vacio o pasa lo que expongo en el punto 1, etc???
Simplemente con "IF()" a las variables que necesites .. y usando empty() para ver si tiene valor o no .. Por lo menos esto es efectivo para tus variables del formulario normales.

Código PHP:
<?
if (emtpy($_POST['ruta'])){
// No hay dato en ruta ...
} else {
// procesas el Upload (con move_upload_file() y los $_FILES ....
}
La del campo "file" mejor usar is_uploaded_file() o aplicar el If() a move_uploaded_file() por qué dicha función devuelve "true" si el archivo se pudo mover a su destino definitivo.

Cita:
3 - Y por ultimo, cuando envió el formulario los datos se graban en la base de datos, pero si le doy a actualizar, al navegador, se duplican los datos, como puedo evitar que se envien los datos cuando hace F5 o aztualiza la página???
Redirecciona al terminar tu proceso. En consecuencia tu script de proceso (el que gestiona el ingreso de esos datos a tu BBDD .. etc) NO debe de tener NADA!!!! de HTML por médio .. ni un Echo "su archivo subió bien o mal" .. NADA.

Para redireccionar usas (como ya lo haces):

header("Location: dondetengasqueir.php");
exit;

Cita:
Warning: Cannot modify header information - headers already sent by (output started at /ruta/absoluta/crear.php:16) in /ruta/absoluta/crear.php on line 119
Presta atención al mensaje de error .. Te está diciciendo en que scritp (crear.php) y en que línea (16) del mismo tienes el problema .. Concretamente es ese "HTML" o algún mensaje (echo "algo") .. o un simple espacio o salto de línea antes de <? .. o despues de un ?>. Eso se considera "salida" y es lo que no se puede originar si usas header() (que envia "cabeceras HTTP" al cliente).

Como ya te comenté .. en ese script de -proceso- NO corresponde nada de mensajes ni HTML por médio. SÓLO es de proceso.

Cita:
en la cabecera de la página crear.php, tengo:


Código:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">

<head>

<meta http-equiv="content-type" content="text/html; charset=utf-8" />
Fijate bien que va hacer tu script. Según el condicional se cumpla o no (esos "if()" de tus validaciones y demás) vas a "redireccionar" .. es decir NUNCA vas a generar una página HTML en ese caso (al menos) .. siempre de alguna forma u otra vas a "Redireccinar" .. Por ende NO corresponde cabeceeras ni nada más por médio NO se va a entregar esa página a tu navegador .. lo que le envias es una directiva (cabecera HTTP) que dice "cambia la página que está por otra .. ". Y estas "cabeceras" (enviadas con PHP por header()) se procesan -antes- de cualquier otro HTML por médio que puedas enviar.

Los mensajes de error/exito que puedas necesitar mostrar DEBES hacerlos en el scritp que redireccionas (a donde llegas). Para eso te puedes ayudar de una variable de control que indique que mensaje debes mostrar:
Código PHP:
<?
header 
("Location: nose.php?msg=1");
exit;
y donde llegues al redireccionar .. filtras esa variable y la procesas:

Código PHP:
<?
if (!empty($_GET['msg'])){
echo 
"El mensaje es el código: ".$_GET['msg'];
}
Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #7 (permalink)  
Antiguo 26/04/2006, 10:19
Avatar de xyyy7  
Fecha de Ingreso: enero-2004
Ubicación: Maracay.-
Mensajes: 637
Antigüedad: 13 años, 10 meses
Puntos: 5
Código:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
   "http://www.w3.org/TR/html4/strict.dtd">

<head>

<meta http-equiv="content-type" content="text/html; charset=utf-8" />
Amigo haz una cosa... pon tus codigos php antes de cualquier printer de html en tu documento,

Ejem :
crear.php
Código PHP:
<?
//TU CODIGO PHP
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
   "http://www.w3.org/TR/html4/strict.dtd">

<head>

<meta http-equiv="content-type" content="text/html; charset=utf-8" />
una ves cumplida todas las condiciones o no cumplidas haz la redireccion manera header como te lo indico cluster

Cita:
Iniciado por Cluster
Los mensajes de error/exito que puedas necesitar mostrar DEBES hacerlos en el scritp que redireccionas (a donde llegas). Para eso te puedes ayudar de una variable de control que indique que mensaje debes mostrar:
Código PHP:
<?
header 
("Location: nose.php?msg=1");
exit;
y donde llegues al redireccionar .. filtras esa variable y la procesas:

Código PHP:
<?
if (!empty($_GET['msg'])){
echo 
"El mensaje es el código: ".$_GET['msg'];
}
...y listo de esta manera no tendras errores , esos errores que te marca es simplemente por que tienes alguna salida de etiquetas html, css, javascrtis,.. antes del uso del header.. solo asegurate que no tengas salidas de htlms antes de redireccional de esa manera.-

Saludos.-
__________________
Maracay Edo Aragua - Venezuela :
Mi Favorita :
http://www.MySQL.Com
  #8 (permalink)  
Antiguo 26/04/2006, 15:05
Avatar de bichomen  
Fecha de Ingreso: junio-2003
Ubicación: Barcelona y alrededores, España
Mensajes: 874
Antigüedad: 14 años, 6 meses
Puntos: 2
Es verdad, al poner delante el codigo php, funciona a la perfeción, lo que tengo un problema y es que algunas variables que uso en crear.php y luego las pongo en resultado.php, no las muestra, esto debe ser pq no las e declarado globals, ahora me pondre haber como hace y una cosa que no entendi bien, es esto:

Código PHP:
<?
header 
("Location: nose.php?msg=1");
exit;
Código PHP:
?
if (!empty(
$_GET['msg'])){
echo 
"El mensaje es el código: ".$_GET['msg'];

que es msg???


bichomen
__________________
"Se sabe con exactitud, con cuanta imprecisión, se sabe algo"
Linux Registered User #320332
  #9 (permalink)  
Antiguo 26/04/2006, 15:47
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
msg es una simple variable de "control" .. para que la uses para indicar ahí un mensaje .. de error o de exito. Exactamente las mismas frases que usas en tu actual código y que NO debes usar en el script de proceso que gestiona el código actual.

Por ejemplo .. en lugar de:
Código PHP:
<?
$Subidas 
move_uploaded_file("$TuArchivo"$RutayNombre); 

//Ahora validamos 
if($Subidas) { // esto se produce si move_uploaded_file se realizo con éxito 
//TU CODIGO PARA SUBIR DATOS A LA BASE DE DATOS AQUI// 

else{ 
echo 
"Se produjo un error al intentar subir el archivo, intente de nuevo" 

exit;
harías:

Código PHP:
<?
$Subidas 
move_uploaded_file("$TuArchivo"$RutayNombre); 

//Ahora validamos 
if($Subidas) { // esto se produce si move_uploaded_file se realizo con éxito 
//TU CODIGO PARA SUBIR DATOS A LA BASE DE DATOS AQUI// 

else{ 
 
header ("Location: nose.php?msg=1");
exit; 
}
Y en "nose.php" (scritp donde redireccionas al terminar tu proceso de upload) .. procesas esa variable .. por ejemplo como un indice de un array:

Código PHP:
<?
$mensajes
[1]="Hay un error balbalballa";
$mensajes[2]="Otro mensaje ...";
$msg=$_GET['msg'];
echo 
$mensajes[$msg];
Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #10 (permalink)  
Antiguo 26/04/2006, 15:54
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
lo que tengo un problema y es que algunas variables que uso en crear.php y luego las pongo en resultado.php,

No entendí lo que comentas .. pero el caso es que tienes que tener presente que se "redirecciona" ... NO se trata de definir una variable como "global" (que no serviría si "redireccionas") .. O propagas esas variables (tuyas) en el URL (y te llegaran al siguiente scritp por GET ..) o bien gestionas cookies o variables de sesión para tal fin .. El objetivo es el mismo, "propagar" de alguna manera esa variables tuyas.

Si no entendistes, expón el código completo de tus scritps para que veamos como los llamas unos a otros.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #11 (permalink)  
Antiguo 26/04/2006, 16:01
Avatar de bichomen  
Fecha de Ingreso: junio-2003
Ubicación: Barcelona y alrededores, España
Mensajes: 874
Antigüedad: 14 años, 6 meses
Puntos: 2
Ok, pero ahora tengo problemas al pasar variables, quiero pasar dos variables de crear.php a resultado.php

En crear php, declaro las variables y les asigno un valor:

Código PHP:
$variable1 una cosa;
$variable2 otra cosa cosa
con el header, las paso:

Código PHP:
header("location: http://www.dominio.com/ruta/resultado.php?$variable1&$variable2"); 
Hasta aqui bien, envia por get el resultado (aunque me gustaria hacerlo por post, para que sea mas transparente para el usuario), pero cuando intento mostrar el valor de las variables en resultado.php, no muestra nada, e probado:

Código PHP:
variable1 = ($_GET['variable1']);
variable2 = ($_GET['variable2']);

echo 
variable1;
echo 
variable2
pero nada

Que estoy haciendo mal??

bichomen
__________________
"Se sabe con exactitud, con cuanta imprecisión, se sabe algo"
Linux Registered User #320332

Última edición por bichomen; 26/04/2006 a las 17:51
  #12 (permalink)  
Antiguo 26/04/2006, 19:04
Avatar de bichomen  
Fecha de Ingreso: junio-2003
Ubicación: Barcelona y alrededores, España
Mensajes: 874
Antigüedad: 14 años, 6 meses
Puntos: 2
Al final el problema estaba en el header:

Código PHP:
header("location: http://www.dominio.com/ruta/resultado.php?$variable1&$variable2"); 
Lo correcto es:

Código PHP:
header("location: http://www.dominio.com/ruta/resultado.php?variable1=$variable1&variable2=$variable2"); 
También aplique la idea del control errores, que los agrupe en errores.php y los redirecciono con header.

Con todo esto ya conseguido solo me queda una duda y es como evitar subir la foto si por algún error no se han registrado los datos en la base de datos??
__________________
"Se sabe con exactitud, con cuanta imprecisión, se sabe algo"
Linux Registered User #320332
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:43.