Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > PHP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 03-03-2011
uper uper is offline
Miembro
 
Registrado: abr 2004
Posts: 296
Poder: 21
uper Va por buen camino
como paginar con php pero parametrizando

B. tardes estoy empezando con php y mysql y tengo que una duda de como paginar registros por medio de un filtro parametrizado, pero lo que requiero hacer es tener una ventana solicitando la cuenta y password una vez que entre debe de consultar una tabla con permisos, si es el caso me despliega una lista lo cual esta paginada use un paginador libre conocido como paginator.inc.php de la pagina: http://jpinedo.webcindario.com/scripts/paginator/ pero no da el resultado esperado para eso encontre otra manera de hacer la paginacion.

Ahora bien, si no tengo ningun filtro me pagina, pero al pasar al segundo u otro numero de enlace pues ya no me presenta los siguientes registros solo la primera que es cuando se carga la pagina, despues le estableci los filtros
en mi caso para buscar por por medio de una variable y me ahoroja 2 errores: Warning: Wrong parameter count for mysql_num_rows() in C:\Servidor\web\logueame.php on line 59
(sin resultados)
Warning: Wrong parameter count for mysql_free_result() in C:\Servidor\web\logueame.php on line 78


este es el codigo:

Código PHP:
tabla
CREATE TABLE `articulos` (
  `id` int(11) default NULL,
  `titulo` varchar(255) collate latin1_spanish_ci NOT NULL default '',
  `descripcion` text collate latin1_spanish_ci NOT NULL,
  `contenido` text collate latin1_spanish_ci NOT NULL,
  `fecha` date NOT NULL default '0000-00-00',
  `visible` tinyint(1) NOT NULL default '0',
  `folio` char(3) collate latin1_spanish_ci default NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_spanish_ci;

uso dos archivos: accesar.html, logueame.php

accesar.html
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <meta content="text/html; charset=ISO-8859-1"
 http-equiv="content-type">
  <title>acceso.html</title>
</head>
<body>
<br>
<form method="POST" name="forma" action="logueame.php"><br>
 Usuario<input maxlength="15" name="usuario_" type="text"><br>
<br>
Clave<input maxlength="15" type="password" name="password_" >
<input name="BTNLIMPIAR" value="Cancelar""
 type="reset"><input value="Aceptar" name="enviar" type="submit"></form>

</body>
</html>

logueame.php
<?
function conectar() 

    
$base_de_datos "noticias";
    
$db_usuario "root"
    
$db_password ""
   
    if (!(
$link mysql_connect("localhost"$db_usuario$db_password))) 
    { 
        echo 
"Error conectando a la base de datos."
        exit(); 
    } 
    if (!
mysql_select_db($base_de_datos$link)) 
    { 
        echo 
"Error seleccionando la base de datos."
        exit(); 
    } 
    return 
$link


$db conectar();

$registros 4;

$pagina $_GET["pagina"];
$cuenta $_POST['usuario_'];
$PSW=$_POST['password_'];
if (
$USR=="" and $PSW=="")
{
  exit();
}

if (!
$pagina) { 
    
$inicio 0
    
$pagina 1

else { 
   
$inicio = ($pagina 1) * $registros



?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title></title>
<style>
    body { font-family: arial; font-size:12px}
</style>
</head>

<body>
    <BR><BR>
    
    <BR>
    <?
    $resultados 
mysql_query("SELECT id FROM articulos WHERE visible = 1 and cuenta = '$cuenta'",$db);    
    
$total_registros mysql_num_rows($resultados,$db); 
    
$resultados mysql_query("SELECT * FROM articulos WHERE visible=1 and cuenta = '$cuenta' ORDER BY fecha DESC LIMIT $inicio$registros",$db);    
    
$total_paginas ceil($total_registros $registros);                       
    
    echo 
"<BR>";
    
    if(
$total_registros) {
    
        while(
$articulo=mysql_fetch_array($resultados,$db)) {
            
            echo 
"<b>".$articulo["titulo"]."</b><br>";
            echo 
"<font color='#666666'>".$articulo["descripcion"]."</font><br><br><br>";
            
        }
        
    } else {
        echo 
"<font color='darkgray'>(sin resultados)</font>";
    }    
    
    
mysql_free_result($resultados,$db);                
    
    if(
$total_registros) {
        
        echo 
"<center>";
        
        if((
$pagina 1) > 0) {
            echo 
"<a href=".$_SERVER["PHP_SELF"]."?pagina=".($pagina-1)."'>< Anterior</a> ";
        }
        
        for (
$i=1$i<=$total_paginas$i++){ 
            if (
$pagina == $i
                echo 
"<b>".$pagina."</b> "
            else
                echo 
"<a href=".$_SERVER["PHP_SELF"]."?pagina=$i'>$i</a> "
        }
      
        if((
$pagina 1)<=$total_paginas) {
            echo 
" <a href=".$_SERVER["PHP_SELF"]."?pagina=".($pagina+1)."'>Siguiente ></a>";
        }
        
        echo 
"</center>";        
    }
    
?>
</body>
</html>
<? mysql_close($db);?>
alguien me podria orientar, les agradesco, si me indicaran que me falta.

gracias
Responder Con Cita
  #2  
Antiguo 07-03-2011
vgpastor vgpastor is offline
Registrado
NULL
 
Registrado: mar 2011
Posts: 7
Poder: 0
vgpastor Va por buen camino
Hola,

Me lei tu codigo, creo que esta hecho muy de "manual",pero bueno para empezar puede que te valga.

Antes que responderte a tu pregunta dejame que te diga un par de cosillas que me han funcionado bastante bien con php:

1- Intenta no mezclar codigo php y html de esa forma, me explico utiliza la funcion echo aunque sea para una simple coma antes que ?> <?

2- En sql con php dependiendo del servidor y de que momento le pilles las comillas al pasarle una variable las interpreta de una forma u de otra, yo te recomiendo que no las pongas es decir si tienes que mandarle"... usuario = $usuario ..." no le pongas las comillas.

3- Si piensas publicar este codigo es decir si vas a utilizarlo en una web, antes de nada mandame a mi la web, para hackearte yo la web y k no lo haga algun otro con peores intenciones que yo; si te fijas todos los parametros que le mandas a sql van de manera directa, esto es que segun los recojes del usuario les pasas a tu servidor sql, asi que imaginate si alma malvada en la variable pagina que es visible incluso en la barra de direcciones en vez de un numero escriviera 'union .... y la consulta que quiere hacerle a tu bd como por ejemplo el nombre de usuario que esta utilizando o la contraseña, o algo peor aun utiliza la odiosa funcion drop table; si no sabes cual es escribela en google.

No se me ocure nada mas por el momento, perdona si te ha sentado mal no kiero k te ofendas ni mucho menos, y si lo he hecho te pido mil disculpas.

Me pongo a tu entera disposicion por si tienes alguna otra pregunta de php en la que te pueda ayudar. Un Saludo.

Pd: Revisa las variables USR y cuenta; recuerda lo que te dije en el punto 1; los errores que te da es porque -Wrong parameter: la consulta a la que analiza los resultados esta vacia debido a que no esta bien formulada --mysql_free_result da error por lo mismo. prueba escribiendo despues de la consulta $resultados "or die(mysql_error());" asi veras si hay algun erroe en eñ sql que yo creo que sera lo del usuario con comillas.
Responder Con Cita
  #3  
Antiguo 09-03-2011
uper uper is offline
Miembro
 
Registrado: abr 2004
Posts: 296
Poder: 21
uper Va por buen camino
B. tardes, acepto que el codigo que anote venga de estilo manual, comento que para la parte paginar la encontre de una pagina web y solo tome el codigo y cree una tabla y agrege un campo mas, esto se me ocurrio ya que como ejemplo tengo una consulta que trae mas de 10 registros y esto de paginar se me hace fantastico ya que al final se le presenta al usuario navegar entre los diferentes link para avanzar por los demas registros.
de todo esto he modificado el codigo y esta seria la logica:
una forma para solicitar el usuario y pasword
se envia los datos y se hace una consulta hacia una tabla que llame permisos
si son correctos que me mande a otra ventana en la cual tengo ya definido un consulta paginada
en donde la cuenta es mi parametro importante pata hacer el filtro, de lo cual si no aplico ningun filtro puedo paginar, si le aplico el filtro es decir modifico de nuevo el archivo *.php me sigue dando el error, ademas ya le quite la comillas simples.
Código PHP:
accesar.html
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <meta content="text/html; charset=ISO-8859-1"
 http-equiv="content-type">
  <title>acceso</title>
</head>
<body>
<br> 
<form method="POST" name="forma" action="logueame.php"><br>
 Usuario<input maxlength="15" name="usuario_" type="text"><br>
<br>
Clave<input maxlength="15" type="password" name="password_" >
<input name="BTNLIMPIAR" value="Cancelar""
 type="reset"><input value="Aceptar" name="enviar" type="submit"></form>

</body>
</html>

logueame.php
<?php

 $USR
=strtoupper($_POST['usuario_']);
 
$PSW=strtoupper($_POST['password_']);
 
 if (
$USR!="" and $PSW!="")
 {  
  include(
"conexion.phtml");  
  
$db conectar();
  
$result=mysql_query("select * from accesos where cuenta='".$USR."' and pwd='".$PSW."'",$db);  
  
//$row = mysql_num_rows($result); 
  
$row mysql_fetch_row($result);
  
$con_acceso $row[0];
  
  if (!
$result)
   {     
     echo 
"<BR><BR>"
     echo 
"<H3>Usuario y clave incorrecta</H3>";
     
mysql_close($db); 
     exit ();     
   }
   else
   {             
     echo 
$con_acceso;      
     
mysql_free_result($result);
     
mysql_close($db);           
     
header("Location: /veregistros.php");
   }

 }
?> 

<?

/*es mejor tener una archivo para funciones:
 function conectar() 
 { 
    $base_de_datos = "noticias";
    $db_usuario = "root"; 
    $db_password = "solasuc"; 
   
    if (!($link = mysql_connect("localhost", $db_usuario, $db_password))) 
    { 
        echo "Error conectando a la base de datos."; 
        exit(); 
    } 
    if (!mysql_select_db($base_de_datos, $link)) 
    { 
        echo "Error seleccionando la base de datos."; 
        exit(); 
    } 
    return $link; 
 } 
 
*/

include("conexion.phtml"); 
$db conectar();
$visible 1;
$registros 4;

$USR=strtoupper($_GET['usuario_']);

$pagina $_GET["pagina"];

if (!
$pagina) { 
    
$inicio 0
    
$pagina 1

else { 
   
$inicio = ($pagina 1) * $registros



?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Noticias</title>
<style>
    body { font-family: arial; font-size:12px}
</style>
</head>

<body>
    <BR><BR>
    Noticias
    <BR>
    <?
    
//$resultados = mysql_query("SELECT id FROM articulos WHERE visible=$visible and folio=$USR");
    
$resultados mysql_query("SELECT count(*) FROM articulos WHERE visible=$visible and folio=$USR");
    
$total_registros mysql_num_rows($resultados);     
    
    
$resultados mysql_query("SELECT * FROM articulos WHERE visible=$visible and folio=$USR ORDER BY fecha DESC LIMIT $inicio$registros");    
    
$total_paginas ceil($total_registros $registros);                       
    
    echo 
"<BR>";
    
    if(
$total_registros) {
    
        while(
$articulo=mysql_fetch_array($resultados)) {
            
            echo 
"<b>".$articulo["titulo"]."</b><br>";
            echo 
"<font color='#666666'>".$articulo["descripcion"]."</font><br><br><br>";
            
        }
        
    } else {
        echo 
"<font color='darkgray'>(sin resultados)</font>";
    }    
    
mysql_free_result($resultados);                
    
    if(
$total_registros) {
        
        echo 
"<center>";
        
        if((
$pagina 1) > 0) {
            echo 
"<a href='veregistros.php?pagina=".($pagina-1)."'>< Anterior</a> ";
        }
        
        for (
$i=1$i<=$total_paginas$i++){ 
            if (
$pagina == $i
                echo 
"<b>".$pagina."</b> "
            else
                echo 
"<a href='veregistros.php?pagina=$i'>$i</a> "
        }
      
        if((
$pagina 1)<=$total_paginas) {
            echo 
" <a href='veregistros.php?pagina=".($pagina+1)."'>Siguiente ></a>";
        }
        
        echo 
"</center>";
        
    }
    
?>
</body>
</html>
<? mysql_close($db);?>


Noticias 
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in C:\Servidor\web\veregistros.php on line 61
(sin resultados)
Warning: mysql_free_result(): supplied argument is not a valid MySQL result resource in C:\Servidor\web\veregistros.php on line 80
creo que la programacion web es de forma muy diferente a como se trabaja con los lenguajes estructurados, y de acuerdo a lo que estoy realizando necesito loguearme ante un usuario si es correcto me mande a otra ventana ya con ciertos parametros como puede ser entrar al sistema web.
Ahorita, tengo al servidor apache en un winxp como pruebas, en que estoy incorrecto, alguna sugerencia
gracias.
Responder Con Cita
  #4  
Antiguo 09-03-2011
uper uper is offline
Miembro
 
Registrado: abr 2004
Posts: 296
Poder: 21
uper Va por buen camino
Se me olvido incluir las 2 tablas.
vgpastor te agradesco las anotaciones y para mi no es ofenza es un punto importante para saber en donde estoy mal.

Les comento a todos que la intension que es tener una pagina web con acceso a ciertos usuarios y visualizar registros de algunas consultas y otras mas que salgan, pero al inicio de todo esto debo de tener un control de acceso, es por eso que desconozco como realizar este esenario algo asi como logearse antes de entrar al sistema web, en donde estoy la cuenta es importe ya que es la clave del cliente y este es el filtro para conocer que registros le debo presentar a ese cliente en especifico.

Esto que estoy detallando se me imagina como entrar a una cuenta de correo de x sitio, primero me logeo una vez que entro me puedo mover entre las diferentes opciones que nos proporcionan enviar correo, revisar correo, mis contactos, etc, y bueno en algun lado del sitio estan mas usuarios de correo pero lo mas importante es que solo yo puedo ver lo que mi me corresponde, asi puedo entenderlo para realizar algo similar, alguna sugerencia, les agradeceria alguna sugerencia.

Código PHP:

CREATE TABLE 
`accesos` (
  `
cuentachar(7collate latin1_spanish_ci NOT NULL default '',
  `
pwdchar(35collate latin1_spanish_ci NOT NULL default '',
  `
estadochar(1collate latin1_spanish_ci NOT NULL default '1',
  
PRIMARY KEY  (`cuenta`)
ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_spanish_ci;

INSERT INTO `accesosVALUES ('033','TOR','1');

CREATE TABLE `articulos` (
  `
idint(11) default NULL,
  `
titulovarchar(255collate latin1_spanish_ci NOT NULL default '',
  `
descripciontext collate latin1_spanish_ci NOT NULL,
  `
contenidotext collate latin1_spanish_ci NOT NULL,
  `
fechadate NOT NULL default '0000-00-00',
  `
visibletinyint(1NOT NULL default '0',
  `
foliochar(7collate latin1_spanish_ci default NULL
ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_spanish_ci;

INSERT INTO `articulosVALUES (1,'La inflación de setiembre fue de 1,2% por los alimentos y la ropa','Según el Ministerio de Economía, los aumentos se deben al crecimiento de la economía y el mayor consumo. De esta manera, el costo de vida acumula un incremento de 8,9% en lo que va del año.','','2005-10-04',1,'033');
INSERT INTO `articulosVALUES (2,'El Presidente acusó a los súper de querer desestabilizar la economía','Dijo que tratan de generar \"una pequeña inflación, porque se quieren apropiar de la rentabilidad que tienen que compartir con el pueblo\". Sostuvo que están \"cartelizados\" y les pidió que bajen los precios. ','','2005-10-04',1,'033');
INSERT INTO `articulosVALUES (3,'La inflación del año ya se acerca a un escalón del 11 por ciento','Es lo que indica la suba de los precios no afectados por la estacionalidad. El aumento de setiembre, sin embargo, encendió luces amarillas. ','','2005-10-05',1,'033');
INSERT INTO `articulosVALUES (4,'Embotelladoras: no hubo acuerdo y dictaron la conciliación obligatoria','Lo hizo anoche Trabajo y ahora habrá tres semanas de tregua. Los gremios acataron la medida, pero anunciaron que trabajarán a reglamento. Pedían un aumento de $ 800 y las empresas ofrecieron $ 300. ','','2005-10-06',1,'011');
INSERT INTO `articulosVALUES (5,'Ironías y juegos cruzados en el debate de candidatos porteños','Carrió, Macri y Bielsa se cruzaron por TV. Plantearon sus propuestas, pero los momentos más fuertes se dieron cuando se aliaron de a dos contra uno, de manera alternada. Los tres se consideraron ganadores. ','','2005-10-05',1,'033');
INSERT INTO `articulosVALUES (6,'El embajador francés calificó a Kirchner de \"populista\" y Cristina lo cruzó fuerte','\"El embajador de Francia debería tratar con respeto al pueblo argentino\", le contestó. ','','2005-10-06',1,'033');
INSERT INTO `articulosVALUES (7,'Al final, Bush confirmó que vendrá para la Cumbre de las Américas','formaron que irá a Mar del Plata en una gira que incluirá a Brasil y Panamá','','2005-10-06',1,'033');
INSERT INTO `articulosVALUES (8,'Apenas después de las elecciones, saldrán a tomar US$ 500 millones','Será a través del Boden 2015. La plata se usará para pagar deudas que vencen hasta fin de año, incluidos más de US$ 1.000 millones al FMI. Un grupo de bancos colocará títulos en el exterior. ','','2005-10-07',1,'033');
INSERT INTO `articulosVALUES (9,'Sostienen que los campos están perdiendo su fertilidad','De los tres principales nutrientes que extraen las cosechas se repone sólo una pequeña parte.','','2005-10-08',0,'011'); 
gracias
Responder Con Cita
  #5  
Antiguo 15-03-2011
uper uper is offline
Miembro
 
Registrado: abr 2004
Posts: 296
Poder: 21
uper Va por buen camino
hola todos, estoy generando ya el esenario que anteriormente he detallado y lo mas comun es usar sesiones.

gracias
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Alguien sabe como llamar al rave pero como reporteador dentro de una aplicacion memehua Impresión 1 05-10-2008 18:28:24
Fragmentar/Paginar Resultado MaMu OOP 7 03-08-2007 21:10:37
Conectar una db con otra pero estando en un pc diferente pero en red solram MySQL 0 04-07-2007 22:41:32
Como paginar una tabla de 2000 renglones GCASTILLO Internet 0 03-10-2006 01:42:51
Paginar registros JulioGO PHP 4 25-10-2004 01:50:32


La franja horaria es GMT +2. Ahora son las 07:54:26.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi