1. ¡NUEVO! ¡Puertos 10GE disponibles! Interfaces Gigabit con tráfico ilimitado. Anti-DDOS 50GE automático by NTT ¡GRATUITO! Colocation, Servidores Dedicados, Storage y Cloud HA en SoloGigabit ← publi
    Descartar aviso
Descartar aviso
Al usar este sitio web, aceptas que nosotros y nuestros socios podamos establecer cookies para fines tales como personalizar el contenido y la publicidad. Más información.

Consulta Input PHP

Tema en 'Revisión Sitios Web' iniciado por dariodcv, 13 Oct 2018.

  1. dariodcv

    dariodcv Nuevo usuario

    Hola buen dia tengo una consulta (recién me integro al tema php) tengo un formulario buscar con una paginacion funciona bien cuando la paginacion es de 1 pagina sola, ya cuando son dos paginas o mas el valor de la variable $busqueda se pierde (me supongo que es al refrescar la pagina ) es por metodo post, si alguien me podria dar una mano genial. Muchas gracias

    INDEX.PHP
    <?php

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

    $pagina = isset($_GET['pagina']) ? (int)$_GET['pagina'] : 1 ;
    $postPorPagina = 4;

    $inicio = ($pagina > 1) ? ($pagina * $postPorPagina - $postPorPagina) : 0;

    if (isset($_POST['search'])) {
    $busqueda = $_POST['search'];

    // SI LE ASIGNO UN VALOR FIJO ANDAN LAS DOS PAGINAS ej. $busqueda = 'tv';
    $articulos = $conexion->prepare("
    SELECT SQL_CALC_FOUND_ROWS * FROM productos
    WHERE producto LIKE '%".$busqueda."%'".
    "LIMIT $inicio, $postPorPagina
    ");

    $articulos->execute();
    $articulos = $articulos->fetchAll();

    if (!$articulos) {
    header('Location: index.php');
    }

    }else{

    echo 'Se pierde el valor de la var $busqueda';
    }

    $totalArticulos = $conexion->query('SELECT FOUND_ROWS() as total');
    $totalArticulos = $totalArticulos->fetch()['total'];

    $numeroPaginas = ceil($totalArticulos / $postPorPagina);

    require 'index.view.php';

    ?>
     
  2.  
  3. Sphyr0

    Sphyr0 Usuario activo

    Si bien existen varias opciones, como guardar la variable en una sesión, cookie o que al paginar sea otro formulario añadiendo la palabra buscada... O mejor aun, con ajax... Quizás lo más simple sea cambiar a GET...
    PHP:
    if(!empty($_GET['search'])) {
    $busqueda $_GET['search']; # deberias "limpiar" la variable para evitar inyecciones SQL
    No olvides reemplazar post por get en el formulario. ;)
     
  4. dariodcv

    dariodcv Nuevo usuario

    muchas gracias, voy a investigar lo que me dijiste, lo cambie a get y me hace lo mismo, gracias de nuevo por contestar
     
  5. Sphyr0

    Sphyr0 Usuario activo

    La URL generada debe ser algo como "?search=palabra-a-buscar&pagina=2", por ejemplo. Qué URL te aparece luego de buscar?
     
  6. dariodcv

    dariodcv Nuevo usuario

    Hola gracias por contestar , en la primera pagina de la busqueda aparece:(esta OK)
    https://localhost/Buscador -2/?search=tv&buscador=Buscar&mensaje=Se+han+encontrado:+0+coincidencias

    Cuando voy a la segunda (es la confictiva) solo aparece esto.
    https://localhost/Buscador -2/?pagina=2

    este es el index.php
    <?php

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

    $pagina = isset($_GET['pagina']) ? (int)$_GET['pagina'] : 1 ;
    $postPorPagina = 4;

    $inicio = ($pagina > 1) ? ($pagina * $postPorPagina - $postPorPagina) : 0;

    if(!empty($_GET['search'])) {
    $busqueda = $_GET['search'];

    // SI LE ASIGNO UN VALOR FIJO ANDAN LAS DOS PAGINAS ej. $busqueda = 'tv';
    $articulos = $conexion->prepare("
    SELECT SQL_CALC_FOUND_ROWS * FROM productos
    WHERE producto LIKE '%".$busqueda."%'".
    "LIMIT $inicio, $postPorPagina
    ");

    $articulos->execute();
    $articulos = $articulos->fetchAll();

    if (!$articulos) {
    header('Location: index.php');
    }

    }else{

    echo 'Se pierde el valor de la var $busqueda';
    }

    $totalArticulos = $conexion->query('SELECT FOUND_ROWS() as total');
    $totalArticulos = $totalArticulos->fetch()['total'];

    $numeroPaginas = ceil($totalArticulos / $postPorPagina);


    require 'index.view.php';

    ?>

    ESTE EL INDEX.VIEW (SOLO LA PARTE DE PAGINACION
    <section class="paginacion">
    <ul>
    <!-- Establecemos cuando el boton de "Anterior" estara desabilitado -->
    <?php if ($pagina == 1): ?>
    <li class="disabled">&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 de "Siguiente" estara desabilitado -->
    <?php if ($pagina == $numeroPaginas): ?>
    <li class="disabled">&raquo;</li>
    <?php else: ?>
    <li><a href="?pagina=<?php echo $pagina + 1 ?>">&raquo;</a></li>
    <?php endif; ?>
    </ul>
    </section>

    Gracias por contestar
     
  7. Sphyr0

    Sphyr0 Usuario activo

    Prueba así:
    PHP:
    ESTE EL INDEX.VIEW (SOLO LA PARTE DE PAGINACION
    <section class="paginacion">
    <ul>
    <!-- Establecemos cuando el boton de "Anterior" estara desabilitado -->
    <?php if ($pagina == 1): ?>
    <li class="disabled">&laquo;</li>
    <?php else: ?>
    <li><a href="?search=<?php echo $busqueda?>&amp;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='?search={$busqueda}&amp;pagina=$i'>$i</a></li>";
    } else {
    echo 
    "<li><a href='?search={$busqueda}&amp;pagina=$i'>$i</a></li>";
    }
    }
    ?>

    <!-- Establecemos cuando el boton de "Siguiente" estara desabilitado -->
    <?php if ($pagina == $numeroPaginas): ?>
    <li class="disabled">&raquo;</li>
    <?php else: ?>
    <li><a href="?search=<?php echo $busqueda?>&amp;pagina=<?php echo $pagina 1 ?>">&raquo;</a></li>
    <?php endif; ?>
    </ul>
    </section>
     
  8. dariodcv

    dariodcv Nuevo usuario

    Muchísimas:aprueba::aprueba: gracias anda perfecto !
     


Alojamiento web, Hosting Reseller, Servidores Dedicados - All in Hosting


Sitios amigos: GuiaHosting · Unidominios · Interalta ·