Foros del Web » Programando para Internet » PHP »

Ayuda con validacion de formulario

Estas en el tema de Ayuda con validacion de formulario en el foro de PHP en Foros del Web. Hola, tengo un problema con una validacion de un formulario de un tutorial que estoy haciendo. En el tutorial funciona a la perfeccion, a mi ...
  #1 (permalink)  
Antiguo 04/05/2009, 15:04
 
Fecha de Ingreso: octubre-2008
Mensajes: 387
Antigüedad: 15 años, 5 meses
Puntos: 18
Ayuda con validacion de formulario

Hola, tengo un problema con una validacion de un formulario de un tutorial que estoy haciendo. En el tutorial funciona a la perfeccion, a mi no.

Les paso el codigo de la validacion que me esta dando problemas

Código PHP:
$required_fields = array('menu_name''position''visible');
foreach(
$required_fields as $fieldname) {
                if (!isset(
$_POST[$fieldname]) || (empty($_POST[$fieldname]) && $_POST[$fieldname] != 0)) { 
                        
$errors[] = $fieldname
                }
        } 
En formulario consiste de una caja de texto, un combo box y un boton de opcion.

El problema esta en la validacion que hace cuando el campo de texto esta vacio.
El codigo no detecta el error debido a que considera que un string vacio es igual a FALSO , igual a cero( $_POST[$fieldname] != 0). A mi me parece logico que no me funcione, pero no entiendo porque en el tutorial funcoina bien.

El argumento de (empty($_POST[$fieldname]) && $_POST[$fieldname] != 0)) es para asegurarse de que el campo no este vacio y dejar pasar el "0" del boton de opcion, ya que uno de sus valores es 0, y no deberia arrojar un error.

Hay alguna manera de al igualar un string vacio a cero de falso? (porque evidentemente en el tutorial funciona bien).

Hay alguna extension que tenga habilitada en el archivo de configuracion de php que me este provocando esto?

Saludos y Muchas Gracias.
  #2 (permalink)  
Antiguo 04/05/2009, 21:16
Avatar de Marvin
Colaborador
 
Fecha de Ingreso: febrero-2005
Ubicación: global $Chile->Santiago;
Mensajes: 1.991
Antigüedad: 19 años, 2 meses
Puntos: 81
Respuesta: Ayuda con validacion de formulario

Cuales son los campos que estas enviando en el formulario ??
__________________
El que dice "Solo sé que nada sé", esta asumiendo que sabe algo.
Lea las FAQ's!
  #3 (permalink)  
Antiguo 04/05/2009, 23:26
 
Fecha de Ingreso: octubre-2008
Mensajes: 387
Antigüedad: 15 años, 5 meses
Puntos: 18
Respuesta: Ayuda con validacion de formulario

Cita:
Iniciado por Marvin Ver Mensaje
Cuales son los campos que estas enviando en el formulario ??
Los campos son:

'menu_name' --> textbox
'position' --> combobox
'visible' --> radio button

La idea del tutorial es aplicarles en este caso el mismo criterio de validacion a todos, es decir cotejar que ninguno este vacio. Para ello los define en un array y los barre uno a uno. Pero como el campo 'visible' puede valer 1 u 0, se hace necesario poner la condicion $_POST[$fieldname] != 0 para que cuando valga 0 no tire ningun error, ya que empty($_POST[$fieldname]) es VERDADERO cuando 'visible' toma el valor 0.

El problema que yo tengo es que $_POST[$fieldname] != 0 tambien es FALSO cuando 'menu_name' tiene una cadena vacia. Lo cual repito me parece logico ya que 0 puede ser interpretado como vacio o FALSO. Pero lo que no entiendo es porque razon en el tutorial funciona bien.
Hay algo que este pasando por alto en el config.ini del php para evitar tomar como 0 los strings vacios?

Saludos.
  #4 (permalink)  
Antiguo 06/05/2009, 10:23
Avatar de Marvin
Colaborador
 
Fecha de Ingreso: febrero-2005
Ubicación: global $Chile->Santiago;
Mensajes: 1.991
Antigüedad: 19 años, 2 meses
Puntos: 81
Respuesta: Ayuda con validacion de formulario

Mmm... puede ser pero primero revisa si los datos que estas enviando en el formulario estan siendo realmente enviados, por ejemplo:
Código php:
Ver original
  1. <?php
  2. $required_fields = array('menu_name', 'position', 'visible');
  3. foreach($required_fields as $fieldname){
  4.     echo '<br>$_POST['.$fieldname.'] = '.$_POST[$fieldname];
  5.     if(!isset($_POST[$fieldname]) || (empty($_POST[$fieldname]) && $_POST[$fieldname] != 0)){
  6.         $errors[] = $fieldname;
  7.     }
  8. }
  9. ?>
Tal vez pueda ser que los valores no estan siendo enviados.

Si es que los datos estan siendo enviados y reflejados aca ya entramos a validar si el if esta haciendo lo correcto en cada caso.

Suerte!
__________________
El que dice "Solo sé que nada sé", esta asumiendo que sabe algo.
Lea las FAQ's!
  #5 (permalink)  
Antiguo 06/05/2009, 10:50
 
Fecha de Ingreso: octubre-2008
Mensajes: 387
Antigüedad: 15 años, 5 meses
Puntos: 18
De acuerdo Respuesta: Ayuda con validacion de formulario

Cita:
Iniciado por Marvin Ver Mensaje
Mmm... puede ser pero primero revisa si los datos que estas enviando en el formulario estan siendo realmente enviados, por ejemplo:
Código php:
Ver original
  1. <?php
  2. $required_fields = array('menu_name', 'position', 'visible');
  3. foreach($required_fields as $fieldname){
  4.     echo '<br>$_POST['.$fieldname.'] = '.$_POST[$fieldname];
  5.     if(!isset($_POST[$fieldname]) || (empty($_POST[$fieldname]) && $_POST[$fieldname] != 0)){
  6.         $errors[] = $fieldname;
  7.     }
  8. }
  9. ?>
Tal vez pueda ser que los valores no estan siendo enviados.

Si es que los datos estan siendo enviados y reflejados aca ya entramos a validar si el if esta haciendo lo correcto en cada caso.

Suerte!
Si, yo antes lo habia depurado con un "echo", y lo que obtuve fue que me devolvia "vacio" en el campo menu_name que me esta dando problemas.

El resultado del debug de una fila de ejemplo era asi:

menu_name:
position: 1
visible:0

Y sobre todo si trataba de hacer un debug preguntando si el campo menu_name era igual a 0, me daba TRUE, lo cual me dejo un poco sorprendido.

Código PHP:
$required_fields = array('menu_name''position''visible'); 
foreach(
$required_fields as $fieldname){
    if (
$_POST[$fieldname] == ){
              echo 
$fieldname' TRUE';
        }

    if(!isset(
$_POST[$fieldname]) || (empty($_POST[$fieldname]) && $_POST[$fieldname] != 0)){
        
$errors[] = $fieldname;
    }

En este caso lo que recibia para los mismos valores del ejemplo anterior era:

menu_name TRUE;
visible TRUE;

No entiendo porque en el tutorial igualar una cadena vacia a 0 le da FALSO y a mi me da VERDADERO. Es por eso que pense que alguna extension del config.ini podria estar causando esto.

AYUDA PLS!!
  #6 (permalink)  
Antiguo 06/05/2009, 11:08
Avatar de Marvin
Colaborador
 
Fecha de Ingreso: febrero-2005
Ubicación: global $Chile->Santiago;
Mensajes: 1.991
Antigüedad: 19 años, 2 meses
Puntos: 81
Respuesta: Ayuda con validacion de formulario

Si... bien extraño... a ver tirate el codigo del formulario aca para revisarlo.
__________________
El que dice "Solo sé que nada sé", esta asumiendo que sabe algo.
Lea las FAQ's!
  #7 (permalink)  
Antiguo 06/05/2009, 11:39
 
Fecha de Ingreso: octubre-2008
Mensajes: 387
Antigüedad: 15 años, 5 meses
Puntos: 18
Respuesta: Ayuda con validacion de formulario

Cita:
Iniciado por Marvin Ver Mensaje
Si... bien extraño... a ver tirate el codigo del formulario aca para revisarlo.
Ok, pero de todos modos casi les diria con seguridad que es un problema de configuracion porque en el tutorial dejan un repositorio con todos los archivos del proyecto ya terminado (o sea exactamente identico a como lo vienen trabajando en el tutorial), y asi y todo a mi no me funciona.

Les dejo el codigo del formulario completo. El formulario es de esos que se referencian a si mismos cuando se submiten y las validaciones las hacen al tope de la pagina.

Muchas Gracias.

Código PHP:
<?php require_once("includes/connection.php"); ?>
<?php 
require_once("includes/functions.php"); ?>
<?php
        
if (intval($_GET['subj']) == 0) {
            
redirect_to("content.php");
        }
        if (isset(
$_POST['submit'])) {
            
$errors = array();

            
$required_fields = array('menu_name''position''visible');
            foreach(
$required_fields as $fieldname) {
                if (!isset(
$_POST[$fieldname]) || (empty($_POST[$fieldname]) && $_POST[$fieldname]!=0)) { 
                    
$errors[] = $fieldname
                }
            }
            
$fields_with_lengths = array('menu_name' => 30);
            foreach(
$fields_with_lengths as $fieldname => $maxlength ) {
                if (
strlen(trim(mysql_prep($_POST[$fieldname]))) > $maxlength) { $errors[] = $fieldname; }
            }
            
            if (empty(
$errors)) {
                
// Perform Update
                
$id mysql_prep($_GET['subj']);
                
$menu_name mysql_prep($_POST['menu_name']);
                
$position mysql_prep($_POST['position']);
                
$visible mysql_prep($_POST['visible']);
                
                
$query "UPDATE subjects SET 
                            menu_name = '{$menu_name}', 
                            position = {$position}, 
                            visible = {$visible} 
                        WHERE id = {$id}"
;
                
$result mysql_query($query$connection);
                if (
mysql_affected_rows() == 1) {
                    
// Success
                    
$message "The subject was successfully updated.";
                } else {
                    
// Failed
                    
$message "The subject update failed.";
                    
$message .= "<br />"mysql_error();
                }
                
            } else {
                
// Errors occurred
                
$message "There were " count($errors) . " errors in the form.";
            }
            
            
            
            
        } 
// end: if (isset($_POST['submit']))
?>
<?php find_selected_page
(); ?>
<?php 
include("includes/header.php"); ?>
<table id="structure">
    <tr>
        <td id="navigation">
            <?php echo navigation($sel_subject$sel_page); ?>
        </td>
        <td id="page">
            <h2>Edit Subject: <?php echo $sel_subject['menu_name']; ?></h2>
            <?php if (!empty($message)) {
                echo 
"<p class=\"message\">" $message "</p>";
            } 
?>
            <?php
            
// output a list of the fields that had errors
            
if (!empty($errors)) {
                echo 
"<p class=\"errors\">";
                echo 
"Please review the following fields:<br />";
                foreach(
$errors as $error) {
                    echo 
" - " $error "<br />";
                }
                echo 
"</p>";
            }
            
?>
            <form action="edit_subject.php?subj=<?php echo urlencode($sel_subject['id']); ?>" method="post">
                <p>Subject name: 
                    <input type="text" name="menu_name" value="<?php echo $sel_subject['menu_name']; ?>" id="menu_name" />
                </p>
                <p>Position: 
                    <select name="position">
                        <?php
                            $subject_set 
get_all_subjects();
                            
$subject_count mysql_num_rows($subject_set);
                            
// $subject_count + 1 b/c we are adding a subject
                            
for($count=1$count <= $subject_count+1$count++) {
                                echo 
"<option value=\"{$count}\"";
                                if (
$sel_subject['position'] == $count) {
                                    echo 
" selected";
                                } 
                                echo 
">{$count}</option>";
                            }
                        
?>
                    </select>
                </p>
                <p>Visible: 
                    <input type="radio" name="visible" value="0"<?php 
                    
if ($sel_subject['visible'] == 0) { echo " checked"; } 
                    
?> /> No
                    &nbsp;
                    <input type="radio" name="visible" value="1"<?php 
                    
if ($sel_subject['visible'] == 1) { echo " checked"; } 
                    
?> /> Yes
                </p>
                <input type="submit" name="submit" value="Edit Subject" />
                &nbsp;&nbsp;
                <a href="delete_subject.php?subj=<?php echo urlencode($sel_subject['id']); ?>" onclick="return confirm('Are you sure?');">Delete Subject</a>
            </form>
            <br />
            <a href="content.php">Cancel</a>
            <div style="margin-top: 2em; border-top: 1px solid #000000;">
                <h3>Pages in this subject:</h3>
                <ul>
<?php 
    $subject_pages 
get_pages_for_subject($sel_subject['id']);
    while(
$page mysql_fetch_array($subject_pages)) {
        echo 
"<li><a href=\"content.php?page={$page['id']}\">
        {$page['menu_name']}</a></li>"
;
    }
?>
                </ul>
                <br />
                + <a href="new_page.php?subj=<?php echo $sel_subject['id']; ?>">Add a new page to this subject</a>
            </div>
        </td>
    </tr>
</table>
<?php require("includes/footer.php"); ?>
Les dejo la imagen de como se ve el formulario en la web. El campo que me esta dando problemas al validar es el que esta labelado como "Subject name". Cuando lo envio con este campo vacio, me tira un error de validacion ya que considera que vacio es igual a 0.


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 20:52.