Foros del Web » Programando para Internet » PHP »

Consulta sobre este error: Warning: Division by zero

Estas en el tema de Consulta sobre este error: Warning: Division by zero en el foro de PHP en Foros del Web. Hola a todos! Estoy armando un buscador que trae los datos de mi base. Tengo un par de dudas y para colmo, me apareció un ...
  #1 (permalink)  
Antiguo 23/09/2008, 11:39
 
Fecha de Ingreso: mayo-2002
Ubicación: Capital Federal
Mensajes: 630
Antigüedad: 22 años
Puntos: 1
Consulta sobre este error: Warning: Division by zero

Hola a todos! Estoy armando un buscador que trae los datos de mi base. Tengo un par de dudas y para colmo, me apareció un error que no lo había tenido nunca con este paginador que estoy usando desde hace rato. Me apareció esto: Warning: Division by zero in c:\XXX\search3.php on line 107
Este paginador lo usé muchisimas veces y nunca me apareció un error así.
Cuando el buscador trae 1 solo dato no aparece ningun error. Cuando muestra los primeros 8 datos en pantalla, tampoco aparece el error... pero sí aparececuando presiono el link de SIGUIENTE del paginador.
Lo que quisiera saber, si me pueden ayudar, es:

- como puedo solucionar este inconveniente para que el paginador funcione.
- en el caso que presione el boton de buscar y no existe ningun dato, donde agregarle alguna línea que me informe que "no se encontraron datos".

Les muestro el código:
Código PHP:
// if 1
if ($_POST['buscador'])
{
    
// Tomamos el valor ingresado
    
$buscar $_POST['palabra'];


    
//if 2
    // Si está vacío, lo informamos, sino realizamos la búsqueda
    
if(empty($buscar))
        {
        echo 
"No se ha ingresado una cadena a buscar";
        }else{

    
include (
"con.php");

$CantxCol 4//Cantidad de columnas
$Cant 0// Variable para ser usada como contador

// conexion a la base
$conexion mysql_connect($host_db$usuario_db$pass_db) or die ("no se ha podido conectar a la BD");
mysql_select_db($base_db$conexion) or die ("no se ha podido seleccionar la BD");


// obtener datos de la base
$pag $_GET['pag'];        

    
// if 3
    
if (!isset($pag)) $pag 1// Por defecto, pagina 1


// Ejecuto la consulta 
    
$sql "SELECT COUNT(*) FROM restaurantes WHERE nombre LIKE '%$buscar%'";
$result mysql_query($sql$conexion);

        list(
$total) = mysql_fetch_row($result);
        
$tampag 8;
        
$reg1 = ($pag-1) * $tampag;
        
$result mysql_query("SELECT * FROM restaurantes WHERE nombre LIKE '%$buscar%' ORDER BY id_rubro LIMIT $reg1, $tampag"$conexion) or die(mysql_error());

        
// if 4
        
if (mysql_num_rows($result)){ 

        
// Muestro los registros
              
while ($fila = @mysql_fetch_array($result))
                  { 
                    
<
a href="micrositio.php?rubro=" echo $fila['rubro']; "&idrubro=" .echo $fila['id_rubro']; "><img src="echo $fila['foto'];" border="0" /></a>"
echo $fila['nombre']; 

 
$Cant $Cant 1;

                
// if 5
                  
if (($Cant $CantxCol) == 0)
                  {    


                 } 
// fin 5
            
}  // fin 4

            //libero el recordset
            
mysql_free_result($result);
        } 
// fin 3
    
// fin 2
// fin 1
    
        // Cierro la conexion
//        mysql_close($conexion); 



/******************************************************/
/* Funcion paginar
 * actual:          Pagina actual
 * total:           Total de registros
 * por_pagina:      Registros por pagina
 * enlace:          Texto del enlace
 * Devuelve un texto que representa la paginacion
 */
function paginar($actual$total$por_pagina$enlace) {
  
$pag $_GET['pag'];
  

  
$total_paginas ceil($total/$por_pagina);    // Error division zero line 107
  
$anterior $actual 1;
  
$posterior $actual 1;
  if (
$actual>1)
    
$texto "<a href=\"$enlace$anterior\" class='verdana-10px'>&laquo; ANTERIOR</a> ";
  else
    
$texto "<b>&laquo; ANTERIOR</b> ";
  for (
$i=1$i<$actual$i++)
    
$texto .= "<a href=\"$enlace$i\" class='verdana-10px'>$i</a> ";
  
$texto .= "<b>$actual</b> ";
  for (
$i=$actual+1$i<=$total_paginas$i++)
    
$texto .= "<a href=\"$enlace$i\" class='verdana-10px'>$i</a> ";
  if (
$actual<$total_paginas)
    
$texto .= "<a href=\"$enlace$posterior\" class='verdana-10px'>SIGUIENTE &raquo;</a>";
  else
    
$texto .= "<b>SIGUIENTE &raquo;</b>";
  return 
$texto;
}

echo 
paginar($pag$total$tampag"search3.php?pag="); 
Muchas gracias por todo de antemano.
Saludos. Marx.
__________________
"Todo lo que somos es el resultado de lo que hemos pensado". Budda.
  #2 (permalink)  
Antiguo 23/09/2008, 11:49
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 17 años, 9 meses
Puntos: 70
Respuesta: Consulta sobre este error: Warning: Division by zero

Hola marx-pola...

El mismo error te lo está diciendo, la división por 0 es indeterminado... entonces debe ser que en algún momento la variable no posee ningún valor para hacer el % que veo...

Verifica que esa oepración se esté haciendo correctamente Sin 0 (cero)

Saludos
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com
  #3 (permalink)  
Antiguo 23/09/2008, 13:40
 
Fecha de Ingreso: mayo-2002
Ubicación: Capital Federal
Mensajes: 630
Antigüedad: 22 años
Puntos: 1
Respuesta: Consulta sobre este error: Warning: Division by zero

Hola Carxl y gracias por responderme.

Puede ser que me equivoque... a esta altura, ya veo todo nublado, pero lo modifiqué y el error me sigue apareciendo en esta línea:
Código PHP:
  $total_paginas ceil($total/$por_pagina);    // Error division zero line 107 
Realmente no comprendo como puede darme este error. Esta misma estructura, sin las lineas del buscador if ($_POST['buscador']) , funciona perfectamente en otras páginas que tengo.
La verdad, lo miro del derecho y del revez y no sé donde puede estar el error.

Gracias igualmente y saludos.

Marx.

PD: Es más... me trae los primeros 8 registros y cuando paso a la segunda página, ahi me aparece el error.
__________________
"Todo lo que somos es el resultado de lo que hemos pensado". Budda.
  #4 (permalink)  
Antiguo 23/09/2008, 13:46
Avatar de Synkronice  
Fecha de Ingreso: octubre-2007
Ubicación: Madrid
Mensajes: 831
Antigüedad: 16 años, 6 meses
Puntos: 48
Respuesta: Consulta sobre este error: Warning: Division by zero

En algún momento las variables $total o $por_pagina estan vacias (NULL, FALSE, 0, "", etc....) así que compruebalas antes de realizar la división, y en caso que alguna de las dos sea vacia no realices dicha division. Ejemplo:

Código PHP:
if(empty($total) || empty($por_pagina))
    
$total_paginas 0;
else
    
$total_paginas ceil($total/$por_pagina); 
Saludos!!
  #5 (permalink)  
Antiguo 24/09/2008, 10:02
 
Fecha de Ingreso: mayo-2002
Ubicación: Capital Federal
Mensajes: 630
Antigüedad: 22 años
Puntos: 1
Respuesta: Consulta sobre este error: Warning: Division by zero

Cita:
Iniciado por Synkronice Ver Mensaje
En algún momento las variables $total o $por_pagina estan vacias (NULL, FALSE, 0, "", etc....) así que compruebalas antes de realizar la división, y en caso que alguna de las dos sea vacia no realices dicha division. Ejemplo:

Código PHP:
if(empty($total) || empty($por_pagina))
    
$total_paginas 0;
else
    
$total_paginas ceil($total/$por_pagina); 
Saludos!!
Synkro: probé esto que me enviaste y quitó el error, pero me pasa lo mismo que antes... si la lista de registros es de más de 8, SOLO me muestra en pantalla los primeros 8. Si presiono SIGUIENTE, no me muestra nada y si vuelvo con ANTERIOR, no me muestra los primeros resultados.
¿Puede ser que el problema de que no muestre 8 siguientes registros sea porque la variable de búsqueda '%$buscar%' no está pasando a la página siguiente?

No sé... no le encuentro la vuelta y ya hace dias q estoy con esto. Si saben de algún otro paginador para implementar, escucho ofertas....

Gracias por su tiempo. Marx.
__________________
"Todo lo que somos es el resultado de lo que hemos pensado". Budda.
  #6 (permalink)  
Antiguo 24/09/2008, 10:58
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Consulta sobre este error: Warning: Division by zero

Hola marx-pola,

Viendo tu código el problema que veo es que estas tratando de paginar por POST, por lo que por eso te ocasiona el error, debes de usar GET para pasar el valor entre todas las paginas, y el error en concreto que te pasaba es que al usar POST, al pasar a la segunda pagina, no entraba en el primer if, por lo que nunca se definia $tampag.

Saludos.
  #7 (permalink)  
Antiguo 24/09/2008, 12:36
 
Fecha de Ingreso: mayo-2002
Ubicación: Capital Federal
Mensajes: 630
Antigüedad: 22 años
Puntos: 1
Respuesta: Consulta sobre este error: Warning: Division by zero

Gracias GatorV por responder...

Ufff! Paciencia a todos por favor... Veamos:
- un form usado como buscador envía un dato por GET.
- una página recupera esa variable y muestra todo lo relacionado con la palabra q se ingresó.
- Se utiliza un paginador para mostrar X resultados por página.
- Se debe pasar por GET para pasar las variables entre páginas.

Acá es lo que no entiendo. ¿Qué variable me está faltando pasar? ¿El faltante está en el paginador o en las consultas previas?

Dios... que semana que tengo con esto... me hirrrrve la cabeeeza.

Gracias.
__________________
"Todo lo que somos es el resultado de lo que hemos pensado". Budda.
  #8 (permalink)  
Antiguo 24/09/2008, 13:05
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Consulta sobre este error: Warning: Division by zero

Por lo que veo de tu code debes de cambiar $_POST['buscador'] y $_POST['busqueda'] a que sean variables GET.

Saludos.
  #9 (permalink)  
Antiguo 25/09/2008, 09:49
 
Fecha de Ingreso: mayo-2002
Ubicación: Capital Federal
Mensajes: 630
Antigüedad: 22 años
Puntos: 1
Respuesta: Consulta sobre este error: Warning: Division by zero

GatorV: después de largas noches sin dormir, creo que lo he logrado pero me faltan un par de cosillas que no me funcionan y hay unas líneas de código que quisiera me expliques o expliquen por favor. Veamos por partes:
Las líneas que he modificado son estas (para no transcribir todo el codigo)
Código PHP:
if ($_GET['buscador'])
{
    
// Tomamos el valor ingresado
    
$buscar $_GET['palabra'];
    
    
// Si está vacío, lo informamos, sino realizamos la búsqueda
    
if(empty($buscar))
    {
    echo 
"No se ha ingresado una cadena a buscar";
    }else{

include (
"con.php");

// resto del codigo
... 
Y abajo de todo puse el paginador
Código PHP:
/******************************************************/
/* Funcion paginar
 * actual:          Pagina actual
 * total:           Total de registros
 * por_pagina:      Registros por pagina
 * enlace:          Texto del enlace
 * Devuelve un texto que representa la paginacion
 */
function paginar($actual$total$por_pagina$enlace) {

  
$pag $_GET['pag'];
  
$buscar "&palabra="$_GET['palabra'];

  
$re "&buscador=Buscar";

if(empty(
$total) || empty($por_pagina))
    
$total_paginas 0;
else

  
$total_paginas ceil($total/$por_pagina);
  
$anterior $actual 1;
  
$posterior $actual 1;
  if (
$actual>1)
    
$texto "<a href=\"$enlace$anterior$buscar$re\" >&laquo; ANTERIOR</a> ";
  else
    
$texto "<b>&laquo; ANTERIOR</b> ";
  for (
$i=1$i<$actual$i++)
    
$texto .= "<a href=\"$enlace$i$buscar$re\" >$i</a> ";
  
$texto .= "<b>$actual</b> ";
  for (
$i=$actual+1$i<=$total_paginas$i++)
    
$texto .= "<a href=\"$enlace$i$buscar$re\" >$i</a> ";
  if (
$actual<$total_paginas)
    
$texto .= "<a href=\"$enlace$posterior$buscar$re\" >SIGUIENTE &raquo;</a>";
  else
    
$texto .= "<b>SIGUIENTE &raquo;</b>";
  return 
$texto;
}

echo 
paginar($pag$total$tampag"msearch.php?pag="); 
Al Paginador le agregué a mano la variable $re = "&buscador=Buscar"; porque sin ella no me mostraba los siguientes resultados.

¿Está mal lo que hice o se podía hacer de otra forma?
¿Cómo hago para que al ingresar algo que no se encuentre en la base me muestre un mensaje, por ejemplo, no se encontraron resultados para X?

Me pasó algo raro... probando varias veces presionando el ENTER en el buscador, no me aparecía el mensaje de error de esta línea:
Código PHP:
    if(empty($buscar))
        {
        echo 
"No se ha ingresado una cadena a buscar"
Desde ya a todos y en especial a ti GatorV, mil gracias por la paciencia.

Marx.
__________________
"Todo lo que somos es el resultado de lo que hemos pensado". Budda.
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 12:26.