controlador.php
-
Código PHP:
Ver original
function validar($usuario, $email, $passwd, $passwd2, $nombre) { //creo una instancia para obtener un usuario, una contraseña y un email existentes $usuario_class = new Validar($usuario, $email, $passwd, $passwd2); //compruebo que el usuario no contiene sql injection $validar_usuario = $usuario_class->seguridad_patrones(); foreach($validar_usuario as $informe) { echo $informe ['usuario']. "<br>"; //esta es la línea 316 echo $informe ['email']; //esta es la línea 317 } }
en la clase tengo el siguiente código
Código PHP:
Ver original
class Validar extends Conectar { /////////////////////////// //declaro las variables /////////////////////////// //variables que contienen los valores que el usuario introduce private $usuarioc; private $emailc; private $passwdc; private $passwd2c; //arrays que contienen la consulta en base de datos // y la salida según la validación (true o false) //variables para devolver si el usuario, email, passwd y passwd2 //son correctos según comprobación anti sql injection //resultados de la búsqueda con los patrones en los parámetros private $res; private $res2; private $res3; private $res4; private $res5; ////////////////////////////////////////// //patrones para buscar palabras prohibidas ////////////////////////////////////////// //patrones para evitar email injection private $seguridad_email = "Content-Type:", "MIME-Version:", "Content-Transfer-Encoding:", "Return-path:", "Subject:", "From:", "Envelope-to:", "To:", "bcc:", "cc:", ); //patrones para evitar sql injection private $seguridad_sql = array ( "UNION", "DELETE", "DROP", "SELECT", "INSERT", "UPDATE", "CRERATE", "TRUNCATE", "ALTER", "INTO", "DISTINCT", "GROUP BY", "WHERE", "RENAME", "DEFINE", "UNDEFINE", "PROMPT", "ACCEPT", "VIEW", "COUNT", "HAVING", "'", '"', "{", "}", "[", "]", ); //patrones para evitar direcciones web private $seguridad_url = array ( "HOTMAIL", "WWW", ".COM", "@", "W W W", ". c o m", "http://", ); //patrones para evitar variables y comodines private $seguridad_varcom = "&", "*", ); //aplico el constructor que recibe los parámetros del usuario public function __construct( $usr, $emil, $paswd, $paswd2 ) { $this->usuarioc = $usr; $this->emailc = $emil; $this->passwdc = $paswd; $this->passwd2c = $paswd2; } //primero reviso los parámetros asegurando que no contengan sql injection //valido el usuario contra sql injection public function seguridad_patrones() { //reviso el usuario if ( $this->res === false ) { $this->validar['usuario'] = "usuario no contiene sql injection"; } else { $this->validar['usuario'] = "usuario contiene sql injection"; } //reviso el email if ( $this->res2 === false ) { $this->validar['email'] = "email no contiene sql injection"; } else { $this->validar['email'] = "email contiene sql injection"; } return $this->validar; //reviso el passwd } }
me devuelve los siguientes errores
Cita:
las líneas 316 y 317 están indicadas en el documento controlador.phpWarning: Illegal string offset 'usuario' in C:\xampp\htdocs\xampp\web\poo\controlador.php on line 316
u
Warning: Illegal string offset 'email' in C:\xampp\htdocs\xampp\web\poo\controlador.php on line 317
u
Warning: Illegal string offset 'usuario' in C:\xampp\htdocs\xampp\web\poo\fcontrolador.php on line 316
e
Warning: Illegal string offset 'email' in C:\xampp\htdocs\xampp\web\poo\controlador.php on line 317
e
u
Warning: Illegal string offset 'email' in C:\xampp\htdocs\xampp\web\poo\controlador.php on line 317
u
Warning: Illegal string offset 'usuario' in C:\xampp\htdocs\xampp\web\poo\fcontrolador.php on line 316
e
Warning: Illegal string offset 'email' in C:\xampp\htdocs\xampp\web\poo\controlador.php on line 317
e
no entiendo el problema, puesto que he leido sobre este problema y me dice que se debe a que a partir de php 5.4 hay que indicar los indicadores de los arrays con enteros o string de entero, entonces hice lo siguiente tanto en el código del controlador como en el de la clase
Código PHP:
Ver original
//en el controlador cambié los indicadores 'usuario' e 'email' por [1] y [2] respectivamente foreach($validar_usuario as $informe) { echo $informe [1]. "<br>"; echo $informe [2]; } //en la clase hice lo mismo public function seguridad_patrones() { //reviso el usuario if ( $this->res === false ) { $this->validar[1] = "usuario no contiene sql injection"; } else { $this->validar[1] = "usuario contiene sql injection"; } //reviso el email if ( $this->res2 === false ) { $this->validar[2] = "email no contiene sql injection"; } else { $this->validar[2] = "email contiene sql injection"; } return $this->validar; //reviso el passwd }
no me devuelve ningún error pero me devuelve solo esto
Cita:
no entiendo de qué cadena sale eso, pero no lo tengo en ninguna cadena.s
um
a
um
a
¿alguien me puede ayudar?
gracias!