Foros del Web » Programando para Internet » PHP »

Trabajando con "error_reporting=E_ALL"

Estas en el tema de Trabajando con "error_reporting=E_ALL" en el foro de PHP en Foros del Web. Feliz semana. Si trabajo con: "error_reporting=E_ALL" Me salen un poco de errores por que habia realizado mis paginas todas "chuecas". Tonces cual de estas 2 ...
  #1 (permalink)  
Antiguo 21/01/2004, 14:50
 
Fecha de Ingreso: enero-2004
Mensajes: 89
Antigüedad: 13 años, 11 meses
Puntos: 0
Exclamación Trabajando con "error_reporting=E_ALL"

Feliz semana.

Si trabajo con: "error_reporting=E_ALL"

Me salen un poco de errores por que habia realizado mis paginas todas "chuecas".

Tonces cual de estas 2 opciones debo usar/Cual es la + correcta?:


<?php

if(!isset($sam)){$sam = 'g';}
echo $sam;

?>

O esta otra:

<?php

echo @$sam;

?>

Cual es menos insegura?, cuando usar una y cuando otra?.

Gracias.
  #2 (permalink)  
Antiguo 21/01/2004, 16:41
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Hola,

Yo creo que la mejor es la primera. De todas formas, solo tienes este problema con las variables que llegan desde fuera del script, ya sea por URL, o de un formulario o de cookies o de sesiones. Para las variables creadas dentro del script no deberias tener este problema. Simplemente inicializando las variables al valor neutro (0,'',array(), ...) te soluciona estos problemas.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #3 (permalink)  
Antiguo 21/01/2004, 16:53
 
Fecha de Ingreso: enero-2004
Mensajes: 89
Antigüedad: 13 años, 11 meses
Puntos: 0
GRACIAS.

Concretamente leo los campos de mis tablas asi:

$kt1 = "SELECT * FROM $t1";
$kt1 = mysql_query("$kt1");
$nkt1 = mysql_num_fields($kt1);
for($i = 0; $i < $nkt1-1; $i++)
{
$tkt1 .= mysql_field_name($kt1,$i).",";
}
$tkt1 .= mysql_field_name($kt1,$nkt1-1);
$kt1 = explode(",",$tkt1);


Entonces la vcariable "Total de Campos DE la Tabla 1", ($tkt1)

No esta inicializada.

Asi que aun no me desido por cual de las 2 opciones tomar, ya que no me das una "ULTIMA PALABRA".

Y es usted quien "nos instruye".

Última edición por CHAMO01; 21/01/2004 a las 16:55
  #4 (permalink)  
Antiguo 21/01/2004, 17:02
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
En este caso yo iicializaria la variable antes de usarla. En este caso te puede estar dando fallos porque usas el operador .= , que es equivalente a $tkt1= $tkt1 . loquesea.

Quedaria algo asi:
Código PHP:
$kt1 "SELECT * FROM $t1";
$kt1 mysql_query("$kt1");
$nkt1 mysql_num_fields($kt1);

$tkt1='';  // inicializamos a cadena vacia, porque la vamos a usar como cadena

for($i 0$i $nkt1-1$i++)
{
$tkt1 .= mysql_field_name($kt1,$i).",";
}
$tkt1 .= mysql_field_name($kt1,$nkt1-1);
$kt1 explode(",",$tkt1); 
Asi, al hacer la concatenacion, la variable ya tiene un valor.

Suerte.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #5 (permalink)  
Antiguo 22/01/2004, 09:14
 
Fecha de Ingreso: enero-2004
Mensajes: 89
Antigüedad: 13 años, 11 meses
Puntos: 0
GRACIAS JOSEMI.

AHORA QUEDA EL "segundo" chicharron:

Hay una funcion de validar MAIL, que no logro corregir.

(Yo no la hice).

TRANSCRIBO TAL CUAL ENCONTRE EN EL MANUAL DE PHP SOBRE LA BUSQUEDA "OFFSET":

################################################## ###

Ejemplo 15-6. Paginación del conjunto de resultados ... y creación de super-usuarios (PostgreSQL y MySQL)

$offset = argv[0]; // atencion, no se valida la entrada!
$consulta = "SELECT id, nombre FROM productos ORDER BY nombre LIMIT 20 " .
"OFFSET $offset;";

// con PostgreSQL
$resultado = pg_exec($conexion, $consulta);

// con MySQL
$resultado = mysql_query($consulta);

Los usuarios normales pulsan sobre los enlaces 'siguiente' y 'anterior', en donde el desplazamiento ($offset) se encuentra codificado en la URL. El script espera que el valor entrante $offset sea un número decimal. Sin embargo, qué sucede si alguien intenta un ataque añadiendo una forma codificada (urlencode()) de lo siguiente en la URL

// en el caso de PostgreSQL
0;
insert into pg_shadow(usename,usesysid,usesuper,usecatupd,pass wd)
select 'crack', usesysid, 't','t','crack'
from pg_shadow where usename='postgres';
--

// en el caso de MySQL
0;
UPDATE user SET Password=PASSWORD('crack') WHERE user='root';
FLUSH PRIVILEGES;

################################################## ###

Lo que sucede es que...

Yo bien gilipollo en estos asuntos de PHP, BD, etc...

Y donde me salga un man bien tezo!... : (

Que es todo esto de offset?, la verdad es que no entendi nada.


Y bueno, es que... fui a parar por halla por que ustedes saben que estoy rehaciendo el sitio con el php.ini con to2 los errores.

y no he podido pasar de aqui:

function valM($email)
{
if(!isset($email)){$email = ''; $local = ''; $domain = '';}
list($local, $domain) = explode ("@", $email);
$pattern_local = '^([0-9a-z]*([-|_]?[0-9a-z]+)*)(([-|_]?)\.([-|_]?)[0-9a-z]*([-|_]?[0-9a-z]+)+)*([-|_]?)$';
$pattern_domain = '^([0-9a-z]+([-]?[0-9a-z]+)*)(([-]?)\.([-]?)[0-9a-z]*([-]?[0-9a-z]+)+)*\.[a-z]{2,4}$';

$match_local = eregi($pattern_local, $local);
$match_domain = eregi($pattern_domain, $domain);
if ($match_local && $match_domain)
{
return $email;
}
}

La respuesta de PHP es:

Notice: Undefined offset: 1 in C:\222\felicidad\cabecera.php on line 11

Que hago?

Gracias.
  #6 (permalink)  
Antiguo 22/01/2004, 09:56
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Veamos, el texto ese no tiene nada que ver con el mensaje de error (explica como realizar una paginacion). Ese mensaje de error es el equivalente al del la variable no creada, solo que para indices de arrays. Por ejemplo, si tienes:
Código PHP:
$a=array(1,2,3);
echo 
$a[69]; // intentamos mostrar el elemento 69 
Obtenemos ese Notice, porque el elemento de indice 69 no existe.

En tu codigo lo que genera el error es la linea:
Código PHP:
list($local$domain) = explode ("@"$email); 
que equivale a:
Código PHP:
$temp=explode ("@"$email);
$local=$temp[0];
$domain=$temp[1]; 
El indice que te dice que no existe es el 1, el que corresponde al dominio. Se deduce que el explode ha devuelto un array de un solo elemento. Y explode solo devuelve un elemento si $email no contiene @.

En este caso lo mejor seria replantear la funcion. Hay por hay funciones que validan el email con una sola expresion regular, que incluye la @. O tambien podrias comprobar que existe una y solo una @ en la variable $email. asi a bote pronte se me ocurre:
Código PHP:
function valM($email)
{
if(!isset(
$email)){$email ''$local ''$domain '';}
// añadido
if ((''==$email) || (1!=substr_count($email,'@'))) return ''// supongo que la funcion devuelve '' cuando falla la validacion
// fin añadido
list($local$domain) = explode ("@"$email);
$pattern_local '^([0-9a-z]*([-|_]?[0-9a-z]+)*)(([-|_]?)\.([-|_]?)[0-9a-z]*([-|_]?[0-9a-z]+)+)*([-|_]?)$';
$pattern_domain '^([0-9a-z]+([-]?[0-9a-z]+)*)(([-]?)\.([-]?)[0-9a-z]*([-]?[0-9a-z]+)+)*\.[a-z]{2,4}$';

$match_local eregi($pattern_local$local);
$match_domain eregi($pattern_domain$domain);
if (
$match_local && $match_domain)
{
return 
$email;
}

Suerte (no he probado el codigo).
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #7 (permalink)  
Antiguo 22/01/2004, 18:07
 
Fecha de Ingreso: enero-2004
Mensajes: 89
Antigüedad: 13 años, 11 meses
Puntos: 0
Gracias - No comprendo nada de "los geroglificos" que escribiste JOSEMI, pero funciono 100% !. : )

El código ha sido tomado de hackingballz.com

Al final lo he dejado asi:

//FUNCION PARA CORREGIR ERRORES:
function valM($email)
{
if ((''==$email) || (1!=substr_count($email,'@'))) return '';
list($local,$domain) = explode ("@", $email);
$pattern_local = '^([0-9a-z]*([-|_]?[0-9a-z]+)*)(([-|_]?)\.([-|_]?)[0-9a-z]*([-|_]?[0-9a-z]+)+)*([-|_]?)$';
$pattern_domain = '^([0-9a-z]+([-]?[0-9a-z]+)*)(([-]?)\.([-]?)[0-9a-z]*([-]?[0-9a-z]+)+)*\.[a-z]{2,4}$';

$match_local = eregi($pattern_local, $local);
$match_domain = eregi($pattern_domain, $domain);
if ($match_local && $match_domain)
{
return $email;
}
}

Si pretendiese aprender un poco de expresiones regulares, .... Como empiezo?.
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 20:52.