Foros del Web » Programando para Internet » PHP »

enviar datos mediante POST

Estas en el tema de enviar datos mediante POST en el foro de PHP en Foros del Web. Hola a todos! Tengo una página con este formulario para llenar: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código HTML: Ver original < form id = "form1" name = "form1" ...
  #1 (permalink)  
Antiguo 07/12/2010, 09:08
Avatar de Garot  
Fecha de Ingreso: marzo-2010
Ubicación: Mar de Dirac
Mensajes: 121
Antigüedad: 14 años, 2 meses
Puntos: 7
enviar datos mediante POST

Hola a todos!

Tengo una página con este formulario para llenar:

Código HTML:
Ver original
  1. <form id="form1" name="form1" method="post" action="funcao_categorias.php?funcao=novo&id_sec=<?php echo $id_sec ?>" enctype="multipart/form-data">
  2.  
  3.    
  4.   <p>
  5.     <label>T&iacute;tulo:</label>
  6.     <input name="titulo" type="text" id="titulo" size="30" value="" />
  7.    
  8.     <label>Link:</label>
  9.     <input name="link" type="text" id="link" value="" size="30"  />
  10.    
  11.     <label>Descri&ccedil;&atilde;o:</label>
  12.     <textarea name="descripcion" id="descripcion" cols="45" rows="5"></textarea>
  13.    
  14.     <label>Conte&uacute;do:</label>
  15.     <textarea name="conteudo" id="conteudo2" cols="30" rows="5"></textarea>
  16.    
  17.       <input type="submit" name="button" id="button" value="Salvar" />
  18.      
  19.   </p>
  20.  
  21.   </form>

de ahi los datos se envian a un archivo php que procesa el formulario e inserta estos en la base de datos

Código PHP:
<?php 
include "config.php";

$pg = ( isset( $_GET['pg'] )) ? $_GET['pg'] : null;
$id_cat = ( isset( $_GET['id'] )) ? $_GET['id'] : null;
$id_sec = ( isset( $_GET['id_sec'] )) ? $_GET['id_sec'] : null;
$titulo = ( isset( $_POST['titulo'] )) ? $_POST['titulo'] : null;
$description = ( isset( $_POST['descripcion'] )) ? $_POST['descripcion'] : null;
$conteudo = ( isset( $_POST['conteudo'] )) ? $_POST['conteudo'] : null;
$link = ( isset( $_POST['link'] )) ? $_POST['link'] : null;


if(
$_GET['funcao'] == "novo"){
    
    
    
$sql mysql_query("INSERT INTO categorias (id_sec ,titulo ,descripcion ,contenido ,link) VALUES ('$id_sec' ,'$titulo' ,'$description' ,'$conteudo' ,'$link')");
        
header("Location: index.php?pg=servicos&id=$id_sec");
    
}
esto funciona bien, ahora quiero hacer una script dentro de la pagina del formulario que procese los datos (que revise campos obligatorios y que en caso de error me muestre los mensajes y no borre lo escrito en los otros campos del formulario) antes de enviarlos al archivo php que inserta los datos en la BD

Yo tengo un ejemplo script que va en la misma pagina del formulario pero es para enviar e-mails y queria adaptarlo para enviar los datos una vez procesados via POST para el archivo php que grava los datos en la BD

Este es el script que quiero adaptar

Código PHP:
<?php if (array_key_exists ('enviar'$_POST)) {
    
    
//scrip para procesar el e-mail
    
$para='emaildedestino.com';
    
//Lista de archivos que se esperan
    
$esperado = array('asunto''nombre''empresa''pais''estado');
    
//Configurar archivos obligatorios
    
$obligatorio = array('assunto''nome''nome_empresa');
    
//Crear un array vacio para cualquier archivo perdido
    
$perdido = array();
    
    
//Asume que no hay nada sospechoso
    
$sospechoso false;
    
//Crear un patron para localizar frases sospechosas
    
$patron '/Content-Type:|BCC:|CC:/i';
    
     
// function para comprobar frases sospechosas
  
function esSospechoso($val$patron, &$sospechoso) {
    
// si la variable es un array, loop a través de cada elemento
    // y pasarlo recursivamente de vuelta a la misma función
    
if (is_array($val)) {
      foreach (
$val as $item) {
        
esSospechoso($item$patron$sospechoso);
        }
      }
    else {
      
// si es encontrada una de las frases sospechosas, configurar Boolean a true
      
if (preg_match($patron$val)) {
        
$sospechoso true;
        }
      }
    }
    
    
//Comprobar el array $_POST y todos los subarrays buscando contenido sospechoso
    
esSospechoso($_POST$patron$sospechoso);
    
    
    if (
$sospechoso) {
        
$enviarMail false;
        unset(
$perdido);
    }
    else {
        
    
//Procesar las variables $_POST
    
foreach ($_POST as $key => $value) {
    
//asignar a variable temporalmente y vacía espacio blanco si no un
    
$temp is_array($value) ? $value trim($value);
    
//si vacío y obligatorio, añadir a array $perdido
    
if (empty($temp) && in_array($key$obligatorio)) {
        
array_push($perdido$key);
    }
    
//En otro caso, asignar a una variable del mismo nombre
    
elseif (in_array($key$esperado)) {
        ${
$key} = $temp;
    }
    }
    }
    
    
//Validar la dirección email
    
if (!empty($email_usuario)) {
    
// expresión regular para identificar caracteres ilegales en direccion email
    
$checkEmail '/^[^@]+@[^\s\r\n\'";,@%]+$/';
    
//rechazar la dirección email si no cumple la expresión regular
    
if (!preg_match($checkEmail$email_usuario)) {
        
$sospechoso true;
        
$enviarMail false;
        unset(
$perdido);
    }
    }
    
    
//Seguir sólo si todos los campos requeridos están ok
    
if (!$sospechoso && empty($perdido)) {

    
//Estoy recibiendo el formulario, compongo el cuerpo
    
$cuerpo "<h1>Mensagem enviada desde formul&aacute;rio do site</h1>";
    
$cuerpo .= "Empresa: $empresa<br />"
    
$cuerpo .= "Nombre do cliente: $nombre <br />"
    
$cuerpo .= "E-mail: $email_usuario <br />";
    
$cuerpo .= "Pais: $pais <br />";
    
$cuerpo .= "Estado: $estado <br />";

    
    
//Limitar tamaño de línea a 70 caracteres
    
$cuerpo wordwrap($cuerpo70);
    
    
    
//Enviar el correo...
    
$enviarMail mail($para,$asunto,$cuerpo,"MIME-Version: 1.0\nContent-type: text/html; charset=UTF-8\nFrom: Usuario do site <$email_usuario>");
    
    if (
$enviarMail) {
        
//perdido deja de ser necesario si el email es enviado, asi que lo destruimos
        
unset($perdido);
    }
    }
    }
Este script esta buenisimo, me da la posibilidad de revisar si un campo obligatorio no se lleno y enviar errores y poder rescatar lo que esta escrito en cada campo.

El problema es que no se como enviar los datos una vez verificados nuevamente mediante POST para el php que grava los mismos en la BD.

En este último tiempo e aprendido muchas cosas sobre PHP y MySQL sobre todo porque me estoy animando mas a hacer (menos teoria y mas accion )seguramente me queda mucho tiempo para aprender y perfeccionarme.......entonces muchas vezes me encuentro con cosas como estas que talvez sean facil de solucionar y yo no lo veo. Entonces sepan disculpar errores groseros, código desprolijo o falta de vision en la resolucion del problema.

Desde ya muchas gracias
  #2 (permalink)  
Antiguo 07/12/2010, 09:15
 
Fecha de Ingreso: diciembre-2010
Ubicación: Rosario, Santa Fe
Mensajes: 326
Antigüedad: 13 años, 5 meses
Puntos: 13
Respuesta: enviar datos mediante POST

Acá no hacemos código, simplemente solucionamos errores, te podemos guiar pero no hacerte el trabajo y como a muchos de acá me molesta el copy paste.

La cosa sería asi:

Código PHP:
if(isset($_POST['titulo'])) {
   
   
$errores false;

   
//COMPROBAR TODAS LAS VALIDACIONES
   
if(!isset($_POST['titulo']) || empty($_POST['titulo'])) {
      
//FALLA ENTONCES MOSTRAMOS CARTEL
      
$errores true;
      echo 
"INGRESE TITULO";
   }

   
//VALIDAMOS TODO LO NECESARIO

   
if(!$errores) {
      
//PROCESAMOS LOS DATOS SIN ERRORES
   
}

}

if(!isset(
$errores) || $errores) {
  
//AQUI VA EL FORMULARIO 

  #3 (permalink)  
Antiguo 07/12/2010, 10:29
Avatar de Garot  
Fecha de Ingreso: marzo-2010
Ubicación: Mar de Dirac
Mensajes: 121
Antigüedad: 14 años, 2 meses
Puntos: 7
Respuesta: enviar datos mediante POST

Hola Areslepra

Parece que me exprese mal

No quiero que me hagan las cosas ni mucho menos, como te dije estoy aprendiendo y se que tengo mucho para aprender.

Esto lo estoy haciendo para aprender y son proyectos para mi.

Soy lo suficientemente responsable como para no estar vendiendo esto para nadie. Asi que no te preocupes que no le estas regalando nada a nadie.

Voy a resumir el problema...

Yo ya se como desviar los mensajes de errores en cada caso y mostrarlos.....ese no es el drama.....

El problema es que despues de validarlos no se como enviarlos nuevamente via POST para el archivo funciones.php que se encarga de gravar los datos en la Base de datos.

Es simplemente eso.

No se si existe una función especial o que método puedo utilizar, es por eso que estoy pidiendo ayuda, calculo que para alguien mas experiente en PHP sea algo básico de hacer, pero la verdad es que no me cae la ficha de como se hace.

Gracias de nuevo
  #4 (permalink)  
Antiguo 07/12/2010, 10:37
 
Fecha de Ingreso: diciembre-2010
Ubicación: Rosario, Santa Fe
Mensajes: 326
Antigüedad: 13 años, 5 meses
Puntos: 13
Respuesta: enviar datos mediante POST

Pido perdón yo también por mi modo de expresión, es que muchos tienen mal el concepto de como funcionan las cosas en el foro, dicho esto procedo a ayudarte.

La forma de enviar desde PHP información por POST a otra es mediante una librería llamada cURL, pero para este caso es como matar un mosquito con un cañon y más si uno esta aprendiendo.

En el código que hice en puse este comentario:

//PROCESAMOS LOS DATOS SIN ERRORES

La idea es que ahí hagas todo el proceso sin reenviar a otra página. Puede hacerlo de varias maneras así que te doy alguna posibilidades y tu ya veras cual te conviene.
Una es colocar el código directamente ahí.
Otra es incluir un archivo PHP que haga esa rutina.
Sino la mas óptima para mí, llamar a una función que se encarge de eso.
  #5 (permalink)  
Antiguo 07/12/2010, 11:15
Avatar de Garot  
Fecha de Ingreso: marzo-2010
Ubicación: Mar de Dirac
Mensajes: 121
Antigüedad: 14 años, 2 meses
Puntos: 7
Respuesta: enviar datos mediante POST

Todo bien Areslepra , te entiendo perfectamente.

En cuanto a la respuesta, muchas gracias eso es lo que queria, una vision de alguien mas experiente, ahora ire aprofundizar en esas opciones que me diste para ver cual se aplica mejor a mi proyecto.

Gracias y hasta la próxima.
  #6 (permalink)  
Antiguo 07/12/2010, 11:37
 
Fecha de Ingreso: diciembre-2008
Mensajes: 190
Antigüedad: 15 años, 4 meses
Puntos: 6
Respuesta: enviar datos mediante POST

Estimado Garot, volver a envíar los datos no es correcto, mejor dicho no es óptimo.
Como soluciones tienes varias:

1- Enviar por post a la misma pagina entonces :
(supongo q se envia un variable hidden llamada envio e igual a T - puede hacerse con cualquier otra variable q se envie obligatoriamente - )

Código PHP:
include('procesos.php');

  if (
$_POST['envio']=='T'){
         if (
validarEsteForm(&$errors))
            
$respuesta procesarEsteForm();
         else {
              
$respuesta false;
              echo 
$errors;
}
  
        
}


en procesos.php tienes las funciones 

function validarEsteForm($errors){
    if (empty(
$_POST['var']))
        
$errors " ERROR ;VARIABLE VACIA";
return (
$errors=="")


function 
procesarEsteForm(){

  
//SI INSERTA/UPDATE EN MYSQL RETURN TRUE SINO FALSE


2- Procesar y validar todo en esa mismo archivo o en el q se envíe...


Saludos
  #7 (permalink)  
Antiguo 07/12/2010, 12:51
Avatar de Garot  
Fecha de Ingreso: marzo-2010
Ubicación: Mar de Dirac
Mensajes: 121
Antigüedad: 14 años, 2 meses
Puntos: 7
Respuesta: enviar datos mediante POST

Hola Turfeano!

Voy a probar tu código sin duda, parece bastante claro.
Cualquier duda te aviso.

Gracias por el aporte.

Etiquetas: enviar, post
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 05:21.