Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Aprendiendo PDO, problema php y dreamweaber cc

Estas en el tema de Aprendiendo PDO, problema php y dreamweaber cc en el foro de PHP en Foros del Web. Estoy aprendiendo pdo y más concreto con una paginación y tengo una duda: ¿Por qué dreamweaber cc me da error en el codigo php cuando ...
  #1 (permalink)  
Antiguo 28/08/2016, 05:52
Avatar de manyblue  
Fecha de Ingreso: marzo-2008
Mensajes: 329
Antigüedad: 16 años, 1 mes
Puntos: 10
Aprendiendo PDO, problema php y dreamweaber cc

Estoy aprendiendo pdo y más concreto con una paginación y tengo una duda:
¿Por qué dreamweaber cc me da error en el codigo php cuando luego todo va a la perfección?

Codigo:
Código PHP:
<?php

try{
    
$conexion = new PDO('mysql:host=localhost;dbname=curso_php_mysql''root''');    
}catch(
PDOException $e){
    echo 
"Error: " $e->getMessage();
    die();
}

// Esto es lo mismo que hacer un 'if' 'else' -- si 'no se pone if si no la condicion' entonces '?' si no ':'
$pagina = isset($_GET['pagina']) ? (int)$_GET['pagina'] : 1;

// Post por cada pagina
$PostPorPagina 5;

$inicio = ($pagina 1) ? ($pagina $PostPorPagina $PostPorPagina) : 0;

// SQL_CALC_FOUND_ROWS nos calcula cuantas filas hay en la tabla
$articulos $conexion->prepare("SELECT SQL_CALC_FOUND_ROWS * FROM articulos LIMIT $inicio, $PostPorPagina");

// Ejecutamos la consulta
$articulos->execute();
$articulos $articulos->fetchAll();

// Ver si hay articulos para una $pagina, si no reenviar al index.php
if(!$articulos){
    
header('location: index.php');
}

// Calculamos el numero total de articulos
$TotalArticulos $conexion->query('SELECT FOUND_ROWS() as total');
$TotalArticulos $TotalArticulos->fetch()['total'];

// Redondeamos al alza o valor superior con ceil()
$NumeroPaginas ceil($TotalArticulos $PostPorPagina);

echo 
$NumeroPaginas;

require(
'index.view.php');

?>
Esta es la línea que me da error:
Código PHP:
$TotalArticulos $TotalArticulos->fetch()['total']; 
Muchas gracias de antemano, un saludo.
PD: Uso la última versión de xampp con mariaDB, php 5.6 y Dreamweaber CC.
  #2 (permalink)  
Antiguo 28/08/2016, 06:19
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 1.007
Antigüedad: 13 años, 6 meses
Puntos: 123
Respuesta: Aprendiendo PDO, problema php y dreamweaber cc

Fetch es un método no un array, no entiendo que hace el total del final.
Código PHP:
$TotalArticulos $TotalArticulos->fetch()['total']; 
Creo que debería ser
Código PHP:
$TotalArticulos $TotalArticulos->fetch(); 
__________________
Unset($vida['malRollo']);
  #3 (permalink)  
Antiguo 28/08/2016, 07:29
Avatar de manyblue  
Fecha de Ingreso: marzo-2008
Mensajes: 329
Antigüedad: 16 años, 1 mes
Puntos: 10
Respuesta: Aprendiendo PDO, problema php y dreamweaber cc

Si lo pongo así:
$TotalArticulos = $TotalArticulos->fetch();
Mysql me tira este error:
Fatal error: Unsupported operand types in C:\xampp\htdocs\CURSO-PHP-1\Tema-8-Paginacion\index.php on line 35
Si lo pongo así:
$TotalArticulos = $TotalArticulos->fetch()['total'];
Mysql no me tira errores:
  #4 (permalink)  
Antiguo 28/08/2016, 07:39
Avatar de manyblue  
Fecha de Ingreso: marzo-2008
Mensajes: 329
Antigüedad: 16 años, 1 mes
Puntos: 10
Respuesta: Aprendiendo PDO, problema php y dreamweaber cc

Realmente solo me falla los botones de adelante y atras, ojo, estoy aprendiendo, esto es una paginación sencilla con PDO.

index.php
Código PHP:
<?php

try{
    
$conexion = new PDO('mysql:host=localhost;dbname=curso_php_mysql''root''');    
}catch(
PDOException $e){
    echo 
"Error: " $e->getMessage();
    die();
}

// Esto es lo mismo que hacer un 'if' 'else' -- si 'no se pone if si no la condicion' entonces '?' si no ':'
$pagina = isset($_GET['pagina']) ? (int)$_GET['pagina'] : ;

// Post por cada pagina
$PostPorPagina 5;

$inicio = ($pagina 1) ? ($pagina $PostPorPagina $PostPorPagina) : 0;

// SQL_CALC_FOUND_ROWS nos calcula cuantas filas hay en la tabla
$articulos $conexion->prepare("SELECT SQL_CALC_FOUND_ROWS * FROM articulos LIMIT $inicio, $PostPorPagina");

// Ejecutamos la consulta
$articulos->execute();
$articulos $articulos->fetchAll();

// Ver si hay articulos para una $pagina, si no reenviar al index.php
if(!$articulos){
    
header('location: index.php');
}

// Calculamos el numero total de articulos
$TotalArticulos $conexion->query('SELECT FOUND_ROWS() as total');
$TotalArticulos $TotalArticulos->fetch()['total'];

// Redondeamos al alza o valor superior con ceil()
$NumeroPaginas ceil($TotalArticulos $PostPorPagina);


require(
'index.view.php');

?>
index.view.php
Código PHP:
<!doctype html>
<html lang="es">

<head>
<meta charset="utf-8">
<title>Paginacion</title>
<link href="https://fonts.googleapis.com/css?family=Oswald" rel="stylesheet" type="text/css">
<link href="styles.css" rel="stylesheet" type="text/css">
</head>

<body>
    <div class="contenedor">
        <h1>Artículos</h1>
        <section class="articulos">
             <ul>
                 <?php foreach($articulos as $fila): ?>
                    <li><?php echo $fila['id'] . '.- ' $fila['articulo'?></li>
                 <?php endforeach; ?>
             </ul>
        </section>
        
        <section class="paginacion">
             <ul>
                 <!-- Establecemos cuando el boton anterior esta desabilitado -->
                 <?php if($pagina == 1): ?>
                   <li class="desable">&laquo;</li>
                 <?php else: ?>
                   <li><a href="?pagina=<?php $pagina 1 ?>">&laquo;</a></li>
                 <?php endif; ?>
                  
                 <!-- Ejecutamos un ciclo para mostrar las paginas -->  
                 <?php
                   
for ($i 1$i <= $NumeroPaginas$i++){
                       
                       if(
$pagina == $i){
                          echo 
"<li class='active'><a href='?pagina=$i'>$i</a></li>"
                       }else{
                           echo 
"<li><a href='?pagina=$i'>$i</a></li>"
                       }  
                   }
                 
?>
                 
                 <!-- Establecemos cuando el boton siguiente esta desabilitado -->
                 <?php if($pagina == $NumeroPaginas): ?>
                   <li class="desable">&raquo;</li>
                 <?php else: ?>
                   <li><a href="?pagina=<?php $pagina 1 ?>">&raquo;</a></li>
                 <?php endif; ?>
             </ul>
        </section>
    </div>
</body>

</html>
Mi problema es que el boton atras no van bien, el de atras me envía siempre a la pagina 1 y el boton adelante no funciona.
Los problemas creo que están aquí:
Código PHP:
$pagina = isset($_GET['pagina']) ? (int)$_GET['pagina'] : 
y aquí:
Código PHP:
 <!-- Establecemos cuando el boton anterior esta desabilitado -->
<?php if($pagina == 1): ?>
<li class="desable">&laquo;</li>
<?php else: ?>
 <li><a href="?pagina=<?php $pagina 1 ?>">&laquo;</a></li>
<?php endif; ?>

<!-- Establecemos cuando el boton siguiente esta desabilitado -->
<?php if($pagina == $NumeroPaginas): ?>
<li class="desable">&raquo;</li>
<?php else: ?>
<li><a href="?pagina=<?php $pagina 1 ?>">&raquo;</a></li>
<?php endif; ?>
¿Como podría resolverlo?
Muchísimas gracias de antema, un saludo.
  #5 (permalink)  
Antiguo 28/08/2016, 08:15
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 13 años, 3 meses
Puntos: 288
Respuesta: Aprendiendo PDO, problema php y dreamweaber cc

si fetch devuelve un array deberias hacer esto:

Código PHP:
Ver original
  1. $TotalArticulos = $TotalArticulos->fetch();
  2. $TotalArticulos = $TotalArticulos['total'];

y seria exactamente lo mismo.

en todo caso mira lo que hay adentro

Código PHP:
Ver original
  1. echo '<pre>';
  2. print_r($TotalArticulos->fetch());
  3. echo '</pre>';
  #6 (permalink)  
Antiguo 28/08/2016, 08:48
Avatar de manyblue  
Fecha de Ingreso: marzo-2008
Mensajes: 329
Antigüedad: 16 años, 1 mes
Puntos: 10
Respuesta: Aprendiendo PDO, problema php y dreamweaber cc

Es que por eso puese fetch, si es un array.
Así dreamweaber ya no me tira error y el codigo funciona Ok.
Código PHP:
$TotalArticulos $conexion->query('SELECT FOUND_ROWS() as total');
$TotalArticulos $TotalArticulos->fetch();
$TotalArticulos $TotalArticulos['total']; 
Y lo único que me falta es la última cuestión que he palnteado que son los botones atras y adelante.
Muchas gracias xerifandtomas, un saludo.
  #7 (permalink)  
Antiguo 28/08/2016, 10:29
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 1.007
Antigüedad: 13 años, 6 meses
Puntos: 123
Respuesta: Aprendiendo PDO, problema php y dreamweaber cc

Fijate en esta línea estas realizando la operación pero en ningún momento lo muestras.

Código PHP:
<?php else: ?> 
 <li><a href="?pagina=<?php $pagina 1 ?>">&laquo;</a></li> 
<?php endif; ?>
Código PHP:
<?php else: ?> 
 <li><a href="?pagina=<?php echo $pagina 1?>">&laquo;</a></li> 
<?php endif; ?>
Y más de lo mismo en el botón siguiente
__________________
Unset($vida['malRollo']);
  #8 (permalink)  
Antiguo 28/08/2016, 11:39
Avatar de manyblue  
Fecha de Ingreso: marzo-2008
Mensajes: 329
Antigüedad: 16 años, 1 mes
Puntos: 10
Respuesta: Aprendiendo PDO, problema php y dreamweaber cc

Que gilipoyas que soy, es que hoy llevo 8 horas estudiando, será el cansancio, de aquí en adelante habrá que hacer descansos intermedios para despejar la mente.
Muchísimas gracias xerifandtomas.
Todo OK.
La verdad que estoy viendo que usar PDO es más facil de lo que pensaba.
Saludos
  #9 (permalink)  
Antiguo 28/08/2016, 14:40
Avatar de manyblue  
Fecha de Ingreso: marzo-2008
Mensajes: 329
Antigüedad: 16 años, 1 mes
Puntos: 10
Respuesta: Aprendiendo PDO, problema php y dreamweaber cc

Al final me ha quedado así:
Para hacer una paginación sencilla con html, php y mysql PDO, a mi me ha quedado así:

index.php
Código PHP:
<?php

try{
    
$conexion = new PDO('mysql:host=localhost;dbname=curso_php_mysql''root''');    
}catch(
PDOException $e){
    echo 
"Error: " $e->getMessage();
    die();
}

// Esto es lo mismo que hacer un 'if' 'else' -- si 'no se pone if si no la condicion' entonces '?' si no ':'
$pagina = isset($_GET['pagina']) ? (int)$_GET['pagina'] : ;

// Post por cada pagina
$PostPorPagina 5;

$inicio = ($pagina 1) ? ($pagina $PostPorPagina $PostPorPagina) : 0;

// SQL_CALC_FOUND_ROWS nos calcula cuantas filas hay en la tabla
$articulos $conexion->prepare("SELECT SQL_CALC_FOUND_ROWS * FROM articulos LIMIT $inicio, $PostPorPagina");

// Ejecutamos la consulta
$articulos->execute();
$articulos $articulos->fetchAll();

// Ver si hay articulos para una $pagina, si no reenviar al index.php
if(!$articulos){
    
header('location: index.php');
}

// Calculamos el numero total de articulos
$TotalArticulos $conexion->query('SELECT FOUND_ROWS() as total');
$TotalArticulos $TotalArticulos->fetch();
$TotalArticulos $TotalArticulos['total'];

// Redondeamos al alza o valor superior con ceil()
$NumeroPaginas ceil($TotalArticulos $PostPorPagina);


require(
'index.view.php');

// Cerramos la conexion a la base de datos si no vamos a trabajar más con ellla
$articulos null;
$conexion null;

?>
index.view.php

Código PHP:
<!doctype html>
<html lang="es">

<head>
<meta charset="utf-8">
<title>Paginacion</title>
<link href="https://fonts.googleapis.com/css?family=Oswald" rel="stylesheet" type="text/css">
<link href="styles.css" rel="stylesheet" type="text/css">
</head>

<body>
    <div class="contenedor">
        <h1>Artículos</h1>
        <section class="articulos">
             <ul>
                 <?php foreach($articulos as $fila): ?>
                    <li><?php echo $fila['id'] . '.- ' $fila['articulo'?></li>
                 <?php endforeach; ?>
             </ul>
        </section>
        
        <section class="paginacion">
             <ul>
                 <!-- Establecemos cuando el boton anterior esta desabilitado -->
                 <?php if($pagina == 1): ?>
                   <li class="desable">&laquo;</li>
                 <?php else: ?>
                   <li><a href="?pagina=<?php echo $pagina 1 ?>">&laquo;</a></li>
                 <?php endif; ?>
                  
                 <!-- Ejecutamos un ciclo para mostrar las paginas -->  
                 <?php
                   
for ($i 1$i <= $NumeroPaginas$i++){
                       
                       if(
$pagina == $i){
                          echo 
"<li class='active'><a href='?pagina=$i'>$i</a></li>"
                       }else{
                           echo 
"<li><a href='?pagina=$i'>$i</a></li>"
                       }  
                   }
                 
?>
                 
                 <!-- Establecemos cuando el boton siguiente esta desabilitado -->
                 <?php if($pagina == $NumeroPaginas): ?>
                   <li class="desable">&raquo;</li>
                 <?php else: ?>
                   <li><a href="?pagina=<?php echo $pagina 1 ?>">&raquo;</a></li>
                 <?php endif; ?>
             </ul>
        </section>
    </div>
</body>

</html>
styles.css
Código CSS:
Ver original
  1. @charset "utf-8";
  2. /* CSS Document */
  3.  
  4. * {
  5.    margin: 0;
  6.    padding: 0;
  7.    -webkit-box-sizing: border-box;
  8.    -moz-box-sizing: borde-box;
  9.    box-sizing: border-box;
  10. }
  11.  
  12. body {
  13.     background: #e9e9e9;
  14.     color: #2e2e2e;
  15.     font-family: Arial, Helvetica, sans-serif;
  16. }
  17.  
  18. h1 {
  19.     margin: 20px 0;
  20.     text-align: center;
  21.     font-family: "Oswald", Arial, helvetica, sans-serif;
  22.     color: #ce7f08;
  23.     font-weight: normal;
  24. }
  25.  
  26. .contenedor {
  27.     width: 90%;
  28.     max-width: 1000px;
  29.     margin: auto;
  30. }
  31.  
  32. .contenedor .articulos{
  33.     margin-bottom: 20px;
  34. }
  35.  
  36. .contenedor .articulos ul {
  37.     list-style: none;
  38. }
  39.  
  40. .contenedor .articulos ul li {
  41.     padding: 10px 10px;
  42.     border-bottom: 1px solid #c8c8c8;
  43. }
  44.  
  45. .paginacion ul {
  46.     list-style: none;
  47. }
  48.  
  49. .paginacion ul li {
  50.     display: inline-block;
  51.     margin-right: 10px;
  52. }
  53.  
  54. .paginacion ul .active a {
  55.     background: #ce7f08;
  56. }
  57.  
  58. .paginacion ul .desable {
  59.     background: #c8c8c8;
  60.     display: inline-block;
  61.     font-family: "Oswald", Arial, helvetica, sans-serif;
  62.     padding: 15px 25px;
  63.     cursor: not-allowed;
  64.     color: #fff;
  65.     text-decoration: none;
  66. }
  67.  
  68. .paginacion ul li a {
  69.     display: inline-block;
  70.     font-family: "Oswald", Arial, helvetica, sans-serif;
  71.     padding: 15px 25px;
  72.     background: #424242;
  73.     color: #fff;
  74.     text-decoration: none;
  75. }
  76.  
  77. .paginacion ul li a:hover {
  78.     text-decoration: none;
  79.     background: #3299bb;
  80. }
xerifandtomas, gracias por tu ayuda.
Saludos

Última edición por manyblue; 28/08/2016 a las 14:47
  #10 (permalink)  
Antiguo 20/10/2016, 15:43
 
Fecha de Ingreso: marzo-2016
Ubicación: Madrid
Mensajes: 31
Antigüedad: 8 años
Puntos: 1
Respuesta: Aprendiendo PDO, problema php y dreamweaber cc

Gracias por compartirlo manyblue. Yo tenía el mismo problema que tú.

Etiquetas: pdo, select, sql, tabla
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 10:48.