Pregunta

Tengo un archivo PHP que contiene un formulario HTML, luego Logic Php, luego un pie de página HTML ... en ese orden.

Estoy tratando de obtener los valores del formulario en alguna lógica de validación de PHP en el bottton de la página (pero antes del pie de página) usando <?php VALIDATION LOGIC HERE ?>.

El problema es que cuando la validación encuentra un error, la lógica PHP morirá () y, por lo tanto, mi pie de página HTML no se ejecutará.

¿Hay alguna manera de ejecutar mi pie de página HTML a pesar de mi die Php ();? ... ¿O hay una mejor forma general de integrar mi HTML y PHP? ¡Gracias! De todos modos sería muy apreciada.


Editar: en realidad tengo die () casi en todas partes en mi código donde estoy a punto de conectarme a una base de datos. Si las credenciales del usuario son correctas, se conectan ... si las credenciales están equivocadas, entonces morirá () ..

¿Es esta buena práctica y uso de die ()? Parece que la solución a mi problema es usar return () en lugar de morir () ... para continuar procesando el pie de página HTML.

Además, tengo situaciones como mysql_connect () o die (). ¿Cómo puedo continuar procesando la página HTML restante cuando Die () se ejecuta antes de que se procese el HTML? .. no creo que mysql_connect () ni return; ¿Es la buena práctica, verdad?

¡Muchas gracias de nuevo por adelantado! ¡Los comentarios han sido muy útiles!

¿Fue útil?

Solución

Como otros estados, debe tener múltiples archivos; Header.php, index.php, footer.php, formvalidator.php. En su archivo index.php, debe incluir header.php y footer.php. En la etiqueta de formulario, Action está configurado para cargar formvalidator.php

En el script de validador de formulario, podría tener algo como esto:

  // All form fields are identified by '[id]_[name]', where 'id' is the 
  // identifier of the form type.
  // The field identifier we want to return is just the name and not the id.
  public function getFormData() {
    $formData = array();
    foreach ($_POST as $key => $value) 
    {
      // Remove [id]_ 
      $name = preg_replace('!.*_!', '', $key);

      if (is_array($value)) {
        $formData[$name] = implode(',', $value);
      } else {
        $formData[$name] = $value;
      }
    }
    return $formData;
  } 

Ahora puede recorrer la matriz y validar cada campo. Si encuentra un error, hace eco de un mensaje de error, de lo contrario procesa el formulario.

Actualizar
Responda a su actualización.

Deberías "nunca" usar die (). En su lugar, salga de la función en la que se encuentra y devuelve un mensaje de error. Si simplemente mueres (), nunca sabes qué salió mal.

No es posible hacer la validación del servidor de un formulario a menos que haga clic en el botón Enviar. Puede poner el código que le di en el mismo archivo php que el formulario, y cuando envía, simplemente recarga la misma página (solo establezca action="<?= $_SERVER['PHP_SELF'] ?>")

Si desea validar los campos antes de enviarlo, debe a esto usando JavaScript, como por ejemplo jQuery.Validate.

Hmm ... parece que necesitas más conocimiento de cómo mezclar PHP con HTML. Mira esto Guía para principiantes Sobre cómo trabajar con formularios en PHP.

Otros consejos

Usaría un archivo externo para el procesamiento y la validación de formulario, luego redirigiría a la página del formulario por error/éxito, mostrando un mensaje de error/éxito.

Solo hago un archivo de encabezado.php y un archivo footer.php. Si hay un error, simplemente regrese en lugar de morir.

De esta manera, en la parte superior de su página, puede poner:

<?php include('header.php');?>

///put in whatever html there may be


<?php 
/// put your form and processing info here
///just return if you need to prevent further processing
?>

///put in whatever html there may be
<?php include('footer.php');?>

Hay muchas formas mejores de hacer lo que está haciendo. Pero para responder a su primera pregunta, puede crear una función llamada pie de página que devuelve una cadena con HTML que se necesita mostrar en el pie de página y llamar al dado (pie de página ()); Pero ... ¿por qué usas die? ¿No puede contar los errores y mostrarlos en algún lugar del resultado? No debes matar el guión de esa manera.

Y para la segunda pregunta. Puede usar como dijo Benthedesigner, una página HTML con la acción del formulario que apunta a un script PHP que valida y regresa al formulario si algo sale mal o vaya a otro lugar si no. Pero allí también, debe eliminar la función Die () y llamar a algo más para redirigirlo. Puede usar un sistema de plantilla como Smarty para separar su lógica de su presentación HTML. Puede escribirlo todo en un solo archivo, pero intente escribir su lógica completa en la parte superior del archivo y todo el HTML en la parte inferior. y useu003C?=$var?> para mostrar cosas de PHP o condicionales simples para diferentes resultados HTML. Pero no uses die (). Solo complica las cosas, supongo.

Usar die () no es una buena práctica porque no mostrará un mensaje amistoso al usuario que visite su sitio. Debes estar absolutamente seguro de que quieres usar morir. Por ejemplo, puede usarlo en procedimientos cuando sospecha que hay un intento de piratería. En su lugar, intente usar la estructura si más para mostrar u ocultar cosas. Aquí está el posible prototipo que es posible que desee implementar:

  // if there is a validation error, show it, otherwise not
  if ($error == true)
  {
    // show footer
  }

  <!-- Your footer goes normally here -->
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top