Foros del Web » Programando para Internet » PHP »

problemas al paginar con sql server y php

Estas en el tema de problemas al paginar con sql server y php en el foro de PHP en Foros del Web. AMIGOS ESTOY PAGINANDO CON CODIGO QUE ENCONTRE AQUI EN EL FORO, EN DONDE SE UTILIZA UN PROCEDIMIENTO ALMACENADO TODO IBA BIEN CREE EL PROCEDIMIENTO ALMACENADO ...
  #1 (permalink)  
Antiguo 21/07/2006, 12:21
 
Fecha de Ingreso: mayo-2006
Mensajes: 8
Antigüedad: 11 años, 6 meses
Puntos: 0
Mensaje problemas al paginar con sql server y php

AMIGOS ESTOY PAGINANDO CON CODIGO QUE ENCONTRE AQUI EN EL FORO, EN DONDE SE UTILIZA UN PROCEDIMIENTO ALMACENADO TODO IBA BIEN CREE EL PROCEDIMIENTO ALMACENADO Y IEN EL PROBLEMA ES QUE CUANDO EJECUTO EL CODIGO PHP ME SALE UN FATAL ERROR:

Fatal error: Call to undefined function mssql_init()

NO SE QUE PASA LA FUNCION LA TENGO ASI:

$sql_sel2 = mssql_init("paginacion_ejemplo",$enl);

AMIGOS ES URGENTE POR FAVOR DIGANME QUE PUEDE PASAR PLEASE ES URGENTE.


GRACIAS DE ANTEMANO EN LO QUE ME PUEDAN COLABORAR
  #2 (permalink)  
Antiguo 21/07/2006, 12:27
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Pero seguro que tienes que paginar una consulta SQL para MS SQL Server?

Si es así .. el mensaje de error te dice que no tienes instalada la extensión de MS SQL Server en tu servidor para PHP.

No aclaras si usas esta BBDD, tampoco el S.O. de tu servidor .. esto es muy importante!!!!.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 21/07/2006, 12:36
 
Fecha de Ingreso: mayo-2006
Mensajes: 8
Antigüedad: 11 años, 6 meses
Puntos: 0
cluster me podrias explicar como tener activo lo que me estas diciendo porque no se yo lo que estoy haciendo es realizar una consulta a sqlserver a traves del procedimiento almacenado y mostar la paginacion con codigo php, a ver si me puedes decir si necesito algo para que funcionen este tipo de sentencias como:

mssql_init()

gracias.
  #4 (permalink)  
Antiguo 21/07/2006, 12:37
 
Fecha de Ingreso: mayo-2006
Mensajes: 8
Antigüedad: 11 años, 6 meses
Puntos: 0
ahhh el sistema operativo es windows , tengo el IIS y que mas sqlserver 2000.

Creo que ya.
  #5 (permalink)  
Antiguo 21/07/2006, 13:06
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
En ese caso,

* Edita tu php.ini (si no lo encuentras o no estás seguro cual usas haz un phpinfo() para verlo).

* Busca la directiva extension = php_mssql.dll .. quitale el ; delante.

* Si usas MS SQL Server en el mismo servidor que corre PHP no te hará falta nada más .. Si no es así te hará falta la versión "cliente" instalada en el servidor que corre PHP al menos (por las librerías usadas y requeridas por la extensión de PHP, es otra .dll más .. que no recuerdo el nombre pero está en www.php.net/mssql indicado)

* Reinicia tu servidor y pasate otro phpinfo() para que verifiques que la extensión quedó correctamente instalada (veras un bloque de información al respecto).

(Asegurate de que php.ini -> extension_dir = .. que apunte a donde están esas php_xxx.dll)

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #6 (permalink)  
Antiguo 21/07/2006, 15:28
 
Fecha de Ingreso: mayo-2006
Mensajes: 8
Antigüedad: 11 años, 6 meses
Puntos: 0
gracias cluster hize lo que me dijistes y sin embargo ahora no me aparece fatal error pero si unos warnings con respecto a las sentencias que llaman al procedimiento almacenado mira me sale esto:

Warning: mssql_init(): supplied resource is not a valid MS SQL-Link resource in c:\Inetpub\wwwroot\paginando.php on line 68

Warning: mssql_bind(): supplied argument is not a valid MS SQL-Statement resource in c:\Inetpub\wwwroot\paginando.php on line 70

Warning: mssql_bind(): supplied argument is not a valid MS SQL-Statement resource in c:\Inetpub\wwwroot\paginando.php on line 71

Warning: mssql_execute(): supplied argument is not a valid MS SQL-Statement resource in c:\Inetpub\wwwroot\paginando.php on line 72

Warning: mssql_num_rows(): supplied argument is not a valid MS SQL-result resource in c:\Inetpub\wwwroot\paginando.php on line 73


ademas no me salen los datos que me deberian salir solo me sale los hipervinculos de la paginacion.

No se en que estare fallando.
Ojala me pudieras ayudar.
gracias
  #7 (permalink)  
Antiguo 21/07/2006, 15:44
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
No sé que código estás usando (deja al menos el link hacia donde lo vistes). Tampoco domino SQL Server .. pero si que sé que en general hay funciones para ver más exacto los mensajes de error como los que PHP te está dando pero en el fondo son derivados de algún problema de SQL o conexión ...

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #8 (permalink)  
Antiguo 21/07/2006, 15:59
 
Fecha de Ingreso: mayo-2006
Mensajes: 8
Antigüedad: 11 años, 6 meses
Puntos: 0
Este es el procedimiento almacenado:

Cita:
CREATE PROCEDURE paginacion_ejemplo @index int, @num_regs int AS BEGIN DECLARE @maximo numeric DECLARE @minimo numeric SELECT @maximo = (@index * @num_regs) SELECT @minimo = @maximo - (@num_regs - 1) CREATE TABLE #tmpListado(num_orden int IDENTITY (1, 1), UsuarioID int, Nombre varchar(35)) INSERT #tmpListado SELECT UsuarioID, Nombre FROM Usuario ORDER BY Nombre SELECT UsuarioID, Nombre FROM #tmpListado WHERE num_orden BETWEEN @minimo AND @maximo END

y esto lo de php(todo esto lo encontre aqui en el foro):


Código PHP:
<?php
include("conexion.php");

?>
<?php
//COSTANTES PARA EL DESPLIEGUE DE RESULTADOS 
define("LIMITE"3); 
define("TAM_VENTANA"10); 

//CALCULO EL NUMERO DE REGISTROS 
$sql "select count(UsuarioID) as cant from Usuario";
$con odbc_exec($enl$sql);
$reg odbc_fetch_array($con);
$numero_de_registros $reg['cant'];



//PROCEDIMIENTO ALMACENADO QUE DETERMINA EL NUMERO DE REGISTROS 
/*$sql_sel = mssql_init("sp_selecciona_registros");  
$res_sel = mssql_execute($sql_sel) ; 
$row = mssql_fetch_array($res_sel); 
$total += mssql_num_rows($res_sel); 
//NUMERO TOTAL DE REGISTROS 
$numero_de_registros = $total;*/ 

?> 

<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> 
<title>Paginación PHP - SQL Server</title> 
<style type="text/css"> 
<!-- 
.titulo{ 
    font-family: Verdana, Arial, Helvetica, sans-serif; 
    font-weight: bold; 

.texto 
    {font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; } 

--> 
</style> 
</head> 

<body> 
<p class="titulo">Paginaci&oacute;n de Resultados PHP - SQL Server 2000 </p> 
<span class="Estilo2">Número total de registros: <?php echo $numero_de_registros ?></span><br> 
<span class="Estilo2">Número de registros por página: <?php echo LIMITE ?></span><br><br> 

<table width="50%" border="0" cellspacing="2" cellpadding="2"> 
  <tr> 
    <td bgcolor="#CCCCCC">ID RADIO</td> 
    <td bgcolor="#CCCCCC">NOMBRE RADIO</td> 
  </tr> 
  <?php 
     
    $pagina 
$_GET['pagina']; 
    
$limite LIMITE
    if( isset( 
$pagina ) ) { 
    } 
    else { 
        
$pagina 1
    } 
     
    
//LLAMAR AL SP QUE EXTRAE LOS DATOS PAGINADOS
     
    
$sql_sel2 mssql_init("paginacion_ejemplo",$enl);
    
//ENVIAR PARAMETROS AL SP 
    
mssql_bind($sql_sel2"@index"$paginaSQLINT2); 
    
mssql_bind($sql_sel2"@num_regs"$limiteSQLINT2); 
    
$res_sel2 mssql_execute($sql_sel2); 
    
$num_rows_sel2 mssql_num_rows($res_sel2); 
     echo  
$num_rows_sel2;
    
$num_paginas_float $numero_de_registros $limite//número total de páginas a mostrar (float) 
    
$valor_redondeado ceil($num_paginas_float); //número total de páginas a mostrar (entero) 
    
$inferior $pagina - ( ceilTAM_VENTANA ) ); 
    
$inicio_ventana 1
    if( 
$valor_redondeado TAM_VENTANA ) { 
        
$inicio_ventana = ( $inferior ) ? $inferior 1
    } 
    
$fin_ventana $inicio_ventana + ( TAM_VENTANA ); 
    if( ( 
$fin_ventana $valor_redondeado ) && ( $valor_redondeado TAM_VENTANA ) ) { 
        
$inicio_ventana $valor_redondeado - ( TAM_VENTANA ); 
    } 
    
$contador $inicio_ventana
     
    if( 
$num_rows_sel2 ) {     
     
        while( 
$row_sel2 mssql_fetch_array($res_sel2) ) { 
  
?> 
          <tr> 
            <td bgcolor="#FFFFF0"><?php echo $row_sel2['UsuarioID'?></td> 
            <td bgcolor="#FFFFF0"><?php echo $row_sel2['Nombre'?></td> 
          </tr> 
  <?php 
        

    } 
    
?> 
</table> 
<br> 
<table width="50%"  border="0" cellspacing="0" cellpadding="0"> 
  <tr> 
    <td width="10%" align="left"> 
        <?php 
        
if( $pagina ) { 
            
$numero_pagina $pagina 1
        
?> 
                <a href="paginando.php?pagina=<?php echo $numero_pagina ?>">&laquo;&nbsp;Anterior</a> 
            <?php 
        

        else{                 
        
?> 
            &nbsp; 
        <?php 
        

        
?> 
    </td> 
    <td width="30%" align="center"> 
      <?php 
    
if( ( $numero_de_registros ) && ( $valor_redondeado ) ) { 
        
$nuevo_inicio = ($inicio_ventana $limite) - $limite
        while ( ( 
$contador <= $valor_redondeado ) && ( $contador <= $fin_ventana) ) { 
            
$string_contador ""
            if( 
$contador $inicio_ventana ) { 
                
$nuevo_inicio += $limite
            } 
            if( 
$pagina == $contador ) { 
                
$string_contador "<b>$contador</b>"
            } 
            else { 
                
$string_contador "$contador"
            } 
            if( ( 
$pagina $contador ) || ( $pagina $contador ) ) { 
            
?>
      &nbsp;<a href="paginando.php?pagina=<?php echo $contador ?>"><?php echo $string_contador ?></a>&nbsp; 
      <?php 
            

            else { 
                echo 
"&nbsp;" $string_contador "&nbsp;"
            } 
            
$contador++; 
        } 
    } 
    
?>
    </td> 
    <td width="10%" align="right"> 
    <?php  
        
if( $pagina $valor_redondeado ) { 
            
$numero_pagina $pagina 1
        
?> 
            <a href="paginando.php?pagina=<?php echo $numero_pagina ?>">Siguiente&nbsp;&raquo;</a><?php 
        

        else{                 
        
?> 
            &nbsp; 
        <?php 
        

    
?> 
    
    </td> 
  </tr> 
</table> 

</body> 
</html>

gracias por todo lo que me has ayudado y se ves algun error que pueda tener por fa me lo dices hoy me la he pasado todo el dia en esto y ya quiero que me funcione.
Gracias.

Última edición por Cluster; 21/07/2006 a las 16:10
  #9 (permalink)  
Antiguo 21/07/2006, 16:12
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Te faltó el código de "conexion.php".

Veo un pequeño GRAN lio con uso de funciones .. por un lado usas funciones de odbc_xxx() y por otro de mssql_xxx() directas .. Usa uno u otro método pero no los dos. Te recomiendo "limpiar" tu código y publicarlo denuevo. (usa el botón "PHP" para que el código quede "coloreado" como ves que te quedó tras mi edición).

(por mi parte te comento que no dominio para nada los "store procedure" de MS SQL Server .. aquí me quedo yo, suerte).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #10 (permalink)  
Antiguo 23/07/2006, 13:16
 
Fecha de Ingreso: mayo-2006
Mensajes: 8
Antigüedad: 11 años, 6 meses
Puntos: 0
ya me corrio la paginacion que trataba de hacer gracias por tu ayuda pero ahora necesito que la paginacion me la muestre de acuerdo al usuario que se haya logueado en la aplicacion, en el archivo php donde llamo a los procedimientos almacenados deberia capturarme en ese archivo el usuario que se logueo y no lo captura, es como si no encontrara la variable. aqui esta el codigo:

<?php
//include("includes/abrir_conexion_db.php");
require_once("db2.php");

//include("conexion.php");

?>

<?php
//COSTANTES PARA EL DESPLIEGUE DE RESULTADOS
define("LIMITE", 1);
define("TAM_VENTANA", 10);

//CALCULO EL NUMERO DE REGISTROS
$user = $_SESSION['usuario_ID'];
$total = 0;
//PROCEDIMIENTO ALMACENADO QUE DETERMINA EL NUMERO DE REGISTROS
$sql_sel = mssql_init("contarmisproble", $enl);
//mssql_bind($sql_sel, "@usuario", $user, SQLINT2);
$res_sel = mssql_execute($sql_sel) ;
$row = mssql_fetch_array($res_sel);
//$total += mssql_num_rows($res_sel);
//NUMERO TOTAL DE REGISTROS
$numero_de_registros = $row['cant'];


?>
<?php
cabecera();
cuerposuperior();
if (false) {
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Paginación PHP - SQL Server</title>
<style type="text/css">
<!--
.titulo{
font-family: Verdana, Arial, Helvetica, sans-serif;
font-weight: bold;
}
.texto
{font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; }

-->
</style>
</head>

<body>
<?php
}
?>
<p class="titulo">Paginaci&oacute;n de Resultados PHP - SQL Server 2000 </p><?php echo $_SESSION['usuario_ID'] ?>
<p><span class="Estilo2">Número total de registros: <?php echo $numero_de_registros ?></span><br>
<span class="Estilo2">Número de registros por página: <?php echo LIMITE ?></span></p>
<p><br>
<br>
</p>
<table width="92%" border="1" align="right" bordercolor="#A5CFA9">
<tr>
<td><table width="98%" border="0" align="right">
<tr bgcolor="#D0E6D2">
<td width="12%" class="formulario">ID</td>
<td width="39%" class="formulario"><img src="img/spacer.gif" width="5" height="23" align="absmiddle">FECHA
CREACI&oacute;N</td>
<td width="41%" class="formulario"><img src="img/spacer.gif" width="5" height="23" align="absmiddle">PROBLEMA</td>
<td width="8%" class="formulario">VER</td>
</tr>

<?php

$pagina = $_GET['pagina'];
$limite = LIMITE;
if( isset( $pagina ) ) {
}
else {
$pagina = 1;
}

//LLAMAR AL SP QUE EXTRAE LOS DATOS PAGINADOS

$sql_sel2 = mssql_init("mis_problemas",$enl);
//ENVIAR PARAMETROS AL SP
mssql_bind($sql_sel2, "@index", $pagina, SQLINT2);
mssql_bind($sql_sel2, "@num_regs", $limite, SQLINT2);
//mssql_bind($sql_sel2, "@usuario", $user, SQLINT2);
$res_sel2 = mssql_execute($sql_sel2);
$num_rows_sel2 = mssql_num_rows($res_sel2);

$num_paginas_float = $numero_de_registros / $limite; //número total de páginas a mostrar (float)
$valor_redondeado = ceil($num_paginas_float); //número total de páginas a mostrar (entero)
$inferior = $pagina - ( ceil( TAM_VENTANA / 2 ) );
$inicio_ventana = 1;
if( $valor_redondeado > TAM_VENTANA ) {
$inicio_ventana = ( $inferior < 1 ) ? 1 : $inferior + 1;
}
$fin_ventana = $inicio_ventana + ( TAM_VENTANA - 1 );
if( ( $fin_ventana > $valor_redondeado ) && ( $valor_redondeado > TAM_VENTANA ) ) {
$inicio_ventana = $valor_redondeado - ( TAM_VENTANA - 1 );
}
$contador = $inicio_ventana;

if( $num_rows_sel2 > 0 ) {

while( $row_sel2 = mssql_fetch_array($res_sel2) ) {
?>
<tr bgcolor="#DDF9E2" >
<td width="12%" align="center" class="echoCentrado"><img src="img/spacer.gif" width="5" height="23" align="absmiddle"><?php echo $row_sel2['ProblemaID'] ?></td>
<td width="39%" align="center" class="echoCentrado"><img src="img/spacer.gif" width="5" height="23" align="absmiddle"><?php echo $row_sel2['Fec_Crear'] ?></td>
<td width="41%" align="center" bgcolor="#DDF9E2" class="echoCentrado"><img src="img/spacer.gif" width="5" height="23" align="absmiddle"><?php echo $row_sel2['Titulo'] ?>&nbsp;</td>
<td width="8%" align="center"><a href="misproblemas2.php?problema=<?php echo $row_sel2['ProblemaID']; ?>"><img src="img/Magnifier.gif" width="19" height="19" hspace="16" border="0"></a>
</td>

</tr>
<?php
}
}
?>
</table></td>
</tr>
</table>
<p><br>
</p>

<p>&nbsp;</p>
<p>&nbsp;</p>
<table width="67%" height="64" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td width="10%" align="left">
<?php
if( $pagina > 1 ) {
$numero_pagina = $pagina - 1;
?>
<a href="mis_problemas.php?pagina=<?php echo $numero_pagina ?>">&laquo;&nbsp;Anterior</a>
<?php
}
else{
?>
<?php
}
?>
</td>
<td width="30%" align="center">
<?php
if( ( $numero_de_registros > 0 ) && ( $valor_redondeado > 1 ) ) {
$nuevo_inicio = ($inicio_ventana * $limite) - $limite;
while ( ( $contador <= $valor_redondeado ) && ( $contador <= $fin_ventana) ) {
$string_contador = "";
if( $contador > $inicio_ventana ) {
$nuevo_inicio += $limite;
}
if( $pagina == $contador ) {
$string_contador = "<b>$contador</b>";
}
else {
$string_contador = "$contador";
}
if( ( $pagina < $contador ) || ( $pagina > $contador ) ) {
?>
<a href="mis_problemas.php?pagina=<?php echo $contador ?>"><?php echo $string_contador ?></a>
<?php
}
else {
echo "&nbsp;" . $string_contador . "&nbsp;";
}
$contador++;
}
}
?>
</td>
<td width="10%" align="right">
<?php
if( $pagina < $valor_redondeado ) {
$numero_pagina = $pagina + 1;
?>
<a href="mis_problemas.php?pagina=<?php echo $numero_pagina ?>">Siguiente&nbsp;&raquo;</a>
<?php
}
else{
?>
&nbsp;
<?php
}
?>
</td>
</tr>
</table>

<p>&nbsp;</p>
<p>&nbsp;</p>
<?php
if (false) {
?>
</body>
</html>
<?php
}
cuerpoinferior();
?>



este es el archivo db2.php

<?php
function redireccionar($url) {
echo "<script language=\"javascript\">location.replace('$url');</script>";
exit();
}

function verificar_privilegios() {
global $priv_pagina;
if (empty($priv_pagina)) return true;
$arr = explode(',',$priv_pagina);
foreach ($arr as $v) {
if ($v == $_SESSION['usuario_tipo']) {
return true;
}
}
return false;
}

session_start();
require_once("conexion2.php");

if (verificar_privilegios()==false) {
redireccionar("login1.php");
}
//echo "<!--\nPAGINA = [$priv_pagina]\nUSUARIO=[".$_SESSION['usuario_tipo']."]\n-->\n";

require_once("plantilla344.php");
?>



y este el archivo conexion2.php:

<?php

$enl=mssql_connect("localhost","sa","sa");
mssql_select_db("Daabon",$enl);


?>
agradeceria tu ayuda
  #11 (permalink)  
Antiguo 23/07/2006, 13:20
 
Fecha de Ingreso: mayo-2006
Mensajes: 8
Antigüedad: 11 años, 6 meses
Puntos: 0
y se me olvidaba mandarte los warnings

Warning: session_start() [
function.session-start
]: Cannot send session cookie - headers already sent by (output started at c:\Inetpub\wwwroot\mis_problemas.php:2) in c:\Inetpub\wwwroot\db2.php on line 19

Warning: session_start() [
function.session-start
]: Cannot send session cache limiter - headers already sent (output started at c:\Inetpub\wwwroot\mis_problemas.php:2) in c:\Inetpub\wwwroot\db2.php on line 19
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 07:56.