Ver Mensaje Individual
  #1 (permalink)  
Antiguo 07/12/2010, 09:08
Avatar de Garot
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