Foros del Web » Programando para Internet » PHP »

Validación de variables $_POST

Estas en el tema de Validación de variables $_POST en el foro de PHP en Foros del Web. Buenas, estoy validando las variables que recibo al enviar un formulario, mi pregunta es si es necesario usar mysqli_real_escape o simplemente usando mis validaciones para ...
  #1 (permalink)  
Antiguo 24/02/2014, 12:25
 
Fecha de Ingreso: noviembre-2012
Mensajes: 184
Antigüedad: 11 años, 5 meses
Puntos: 0
Validación de variables $_POST

Buenas,
estoy validando las variables que recibo al enviar un formulario, mi pregunta es si es necesario usar mysqli_real_escape o simplemente usando mis validaciones para que corresponda con el tipo que quiero vale?? Os pongo el código:
Código HTML:
<form method="post" action="alta.php" enctype="multipart/form-data">
                            <div id="m1">
                                <b>Nombre:</b>
                                <input type="text" id="nom" name="nom_act" maxlength="20" pattern="^[A-ZÁÉÍÓÚ]{1}[A-Za-zñÑáéíóúüÁÉÍÓÚÜ\s/.]{1,19}" required autofocus onkeyup="Mayus(this)">
                                <br>
                                <b>Descripción:</b>
                                <br>
                                <textarea name="desc_act" placeholder="Escriba una descripción..." required onkeyup="Mayus(this)"></textarea>
                                <br>
                                <b>Sala:</b>
                                <select id="sala" name="sala_act" required>
                                    <?php
                                    while($fila = mysqli_fetch_array($registros))
                                    {
                                        ?><option value="<?php echo $fila["id"];?>"><?php echo $fila["nom"];?></option><?php 
                                    }
                                    ?>
                                </select>
                                <b>Nº máx. de alumnos:</b>
                                <input id="alum" type="number" name="cap_act" value="26" min="1" max="150" step="1" required>
                            </div>
                            <div id="m2">
                                <input type="checkbox" name="marca" value="1" onClick="matric(this.form)">
                                <b>Precio Matrícula:</b>
                                <input type="number" name="matr_act" min="1" max="1000" step="0.1" required disabled>
                        </form> 
Código PHP:
$n preg_replace('/\s\s+/',' ',mysqli_real_escape_string($conex,$_POST["nom_act"]));
                        
$n strtoupper(substr($n,0,1)) . substr($n,1);
                        if(
strlen($n)>20 || strlen($n)<|| is_numeric($n) || is_numeric(substr($n,0,1)))
                            
$enviar false;
                        
$s mysqli_real_escape_string($conex,$_POST["sala_act"]);
                        if(
is_numeric($s) && $s!='0')
                        {
                            if(
strlen($s)>1)
                                
$enviar false;
                            else
                            {
                                
$s = (int)$s;
                                
$registros mysqli_query($conex,"SELECT nom FROM sala WHERE uso='si' AND id=$s");
                                if(
mysqli_num_rows($registros)==0)
                                    
$enviar false;
                            }
                        }
                        else
                            
$enviar false;
                        
$d mysqli_real_escape_string($conex,$_POST["desc_act"]);
                        
$d preg_replace('/\s\s+/',' ',filter_var($d,FILTER_SANITIZE_STRING));
                        
$d str_replace("'"," "$d);
                        
$d strtoupper(substr($d,0,1)) . substr($d,1);
                        
$c mysqli_real_escape_string($conex,$_POST["cap_act"]);
                        if(
is_numeric($c))
                        {
                            
$c = (int)$c;
                            if(
$c==|| $c>150)
                                
$enviar false;
                        }
                        else
                            
$enviar false;
                        if(isset(
$_POST['marca']))
                        {
                            if(
$_POST['marca']=='1' && is_numeric($_POST["matr_act"]))
                            {
                                
$m mysqli_real_escape_string($conex,$_POST["matr_act"]);
                                
$m number_format($m,2,'.','');
                            }
                            else
                                
$enviar false;
                        }
                        else
                            
$m "NULL"
Y por ejemplo, si yo compruebo si es un número, en el caso que tuviera que aplicar la función de mysqli_real_escape, la aplico antes de comprobar que es un numero o como lo tengo en el código (después)??

Un saludo y gracias de antemano.
  #2 (permalink)  
Antiguo 24/02/2014, 12:36
Avatar de rottenp4nx  
Fecha de Ingreso: octubre-2012
Ubicación: Santiago
Mensajes: 417
Antigüedad: 11 años, 6 meses
Puntos: 36
Respuesta: Validación de variables $_POST

Es necesario pensar que siempre habrán usuarios con maldad en la cabeza, por eso hay que sanitizar las variables de entrada.

Se puede utilizar las funciones de php y mysqli.

También es recomendable usar Sentencias Preparadas y/o Procedimientos Almacenados (DB)

PD: También expresiones regulares

Saludos

Última edición por rottenp4nx; 24/02/2014 a las 12:37 Razón: edit
  #3 (permalink)  
Antiguo 25/02/2014, 01:05
 
Fecha de Ingreso: noviembre-2012
Mensajes: 184
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: Validación de variables $_POST

Yo me refiero a si hago primero el mysqli-replace y dp cpmpriebo q es número o asi como lo tengo? Xq como te digo tiene mas sentido pero en este caso podría crear una variable para nada. No se si m explico??
Un saludo y gracias.

Etiquetas: formulario, mysql, post, registro, select, sql, variable, variables
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 06:03.