Foros del Web » Programando para Internet » PHP »

El script esta bien hecho o se puede mejorar?

Estas en el tema de El script esta bien hecho o se puede mejorar? en el foro de PHP en Foros del Web. Este script presenta en pantalla unos links para ver libros que empiezan con una letra, numeros o sin filtro: mas o menos esto: A B ...
  #1 (permalink)  
Antiguo 03/03/2009, 21:06
 
Fecha de Ingreso: septiembre-2008
Mensajes: 91
Antigüedad: 15 años, 7 meses
Puntos: 0
El script esta bien hecho o se puede mejorar?

Este script presenta en pantalla unos links para ver libros que empiezan con una letra, numeros o sin filtro:
mas o menos esto: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [0-9] Sin filtro

Pero tambien puedo recibir otros parametros via $_GET[' '] que tengo que agregarle al link de las letras. Asi que bueno, aca va el script:

Código PHP:
function do_html_letras()
{
    
    
$link=$_SERVER['PHP_SELF']."?";
    
    if(
$_GET['catid'])
        
$link.="catid=".$_GET['catid']."&";
    
    
    if(
$_GET['or'] )
        
$link.="or=".$_GET['or']."&";
    
    for (
$i=65;$i<=90;$i++)
        { 
            
            
do_html_URL($link."letra=".strtolower(chr($i)),chr($i),"link_secciones","Ver libros que empiezan con la letra ".chr($i));
            
        }
        
        
do_html_URL($link."letra=0-9","[0-9]","link_secciones","Ver libros que empiezan con numeros");
        
        
do_html_URL($link,"Sin filtro","link_secciones","Sin filtro alfabetico");
        

Gracias por participar, se reciben ayudas de todo tipo.
  #2 (permalink)  
Antiguo 04/03/2009, 01:31
 
Fecha de Ingreso: octubre-2004
Mensajes: 2.627
Antigüedad: 19 años, 6 meses
Puntos: 48
Respuesta: El script esta bien hecho o se puede mejorar?

Tus if ($_GET[...]) generan un error si no existe ese indice en el array. Es mejor usar isset o empty.

Puedes generalizarlo con un array:
Código PHP:
$_params=array('catid','or');
$_query=array();
foreach (
$_params as $_param) {
  if (!empty(
$_GET[$_param])) {
    
$_query[]="{$_param}={$_GET[$_param]}";
  }
}
$link.=implode('&',$_query); 
Asi si tienes que añadir nuevos parametros solo tienes que añadirlos a $_params.
  #3 (permalink)  
Antiguo 04/03/2009, 08:49
 
Fecha de Ingreso: septiembre-2008
Mensajes: 91
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: El script esta bien hecho o se puede mejorar?

Estuve probando mi script y no da error, pero voy a probar tambien el tuyo ya que esos if se repiten de forma parecida en un par de scripts y con esa idea que tiras tal vez pueda hacer una funcion procesa_links($param).

Muchas Gracias.
  #4 (permalink)  
Antiguo 04/03/2009, 08:52
 
Fecha de Ingreso: septiembre-2008
Mensajes: 91
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: El script esta bien hecho o se puede mejorar?

Lo que no entiendo son esas llaves que pones en:

Código PHP:
$_query[]="{$_param}={$_GET[$_param]}"
Para que son??
  #5 (permalink)  
Antiguo 04/03/2009, 12:10
 
Fecha de Ingreso: octubre-2004
Mensajes: 2.627
Antigüedad: 19 años, 6 meses
Puntos: 48
Respuesta: El script esta bien hecho o se puede mejorar?

Cita:
Iniciado por papucho666 Ver Mensaje
Estuve probando mi script y no da error, pero voy a probar tambien el tuyo ya que esos if se repiten de forma parecida en un par de scripts y con esa idea que tiras tal vez pueda hacer una funcion procesa_links($param).

Muchas Gracias.
Si cambias la configuracion de PHP para que muestre todos los mensajes de error, incluidos los notice, te deberia salir. Es uno de los grandes problemas de php, es demasiado permisible y deja que se programe con errores.

Lo de las llaves es para no tener que usar la concatenacion: http://es2.php.net/manual/en/language.types.string.php
  #6 (permalink)  
Antiguo 04/03/2009, 17:21
 
Fecha de Ingreso: septiembre-2008
Mensajes: 91
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: El script esta bien hecho o se puede mejorar?

ahh, claro ya la converti en funcion y anda perfecto. Me parecia que era para eso, pero no la conocia y usaba la concatenacion.

Dejo la funcion para alguna otra persona que necesite juntar parametros $_GET[ ] y mandarselo a alguna funcion

Para llamarla le tienen que pasar como argumento un array con los nombres de los parametros $_GET:

Ejemplo de llamada:

Código PHP:
$params=array('catid','or');
    
$link=obtener_link($params); 
Código PHP:
function obtener_link($_params)
{
    
$link=$_SERVER['PHP_SELF']."?";
    
    foreach (
$_params as $_param
    {
      if (!empty(
$_GET[$_param])) 
         
         
$link.="{$_param}={$_GET[$_param]}&";
    }
    return 
$link;

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 13:16.