Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    Strano errore di impaginazione con php

    Salve ragazzi,ho un album di foto e praticamente vorrei mostrarne 14 foto per pagina...quando supera le 14 foto far uscire sotto pagina 2 e cosi' via...
    Ho messo su questo codice....

    Codice PHP:
    <?
    if (!isset($start) OR $start<0)
    $start=0;
    $step 14;
    include 
    "config.php";
    //recupero i valori dal form precedente
    $query "SELECT * FROM libreriaimmagini  ORDER BY id_libreria DESC LIMIT $start,$step";
    $result = @mysql_query($query) or die (mysql_error());
    if (
    mysql_num_rows($result) > 0)
    {
      while(
    $row mysql_fetch_array($result))
      
      {
    $id_libreria stripslashes($row['id_libreria']);
      
    $foto_nome stripslashes($row['foto_nome']);
      
       
    ?>
    <a href="#" onclick="scegli(<?echo"$id_libreria"?>,'libreriaimmagini/<?echo"$foto_nome"?>');" width="100" height="100">
    [img]libreriaimmagini/<?echo[/img]"  id="<?echo"select_$id_libreria"?>
    style="margin:0px; border:0px solid #ffffff;width : 100px;height : 100px;border : 0px;" 

    alt="Seleziona l immagine da usare per il tuo link"></a>



    <?

    }}

    $per_pagina 14;
    $totale_dati mysql_fetch_row(mysql_query("SELECT COUNT(id_libreria) FROM libreriaimmagini"));
    $totale $totale_dati[0];
    $totale_pagine ceil($totale/$per_pagina);
    $pagina_attuale = isset($_GET["pag"]) ? (int)$_GET["pag"] : 1;
    $start = ($pagina_attuale-1)*$per_pagina;

    mysql_query("SELECT * FROM libreriaimmagini ORDER BY id_libreria DESC LIMIT {$start}{$per_pagina}");
    if(
    $pagina_attuale>AND $pagina_attuale<=$totale_pagine){
    echo (
    $pagina_attuale == 1) ? "Indietro\n" '<a href="?pag=1">
    Prima Pagina</a>'
    ."\n".'[url="?pag='.($pagina_attuale-1).'"]Indietro[/url]'."\n";

    $max = (($pagina_attuale+2) > $totale_pagine) ? $totale_pagine : ($pagina_attuale+2);
    $min = (($pagina_attuale-2) < 1) ? : ($pagina_attuale-2);
    for(
    $i=$min;$i<=$max;$i++){
    echo 
    " | ";
    echo (
    $i == $pagina_attuale) ? "$i\n" '[url="?pag='.$i.'"]'.$i.'[/url]'."\n";
    }

    echo (
    $pagina_attuale == $totale_pagine) ? " Successivo\n" ' <a href="?pag='.($pagina_attuale+1).'">
    Successivo</a>'
    ."\n".' [url="?pag='.$totale_pagine.'"]Ultima Pagina[/url]'."\n";
    }
    ?>
    Purtroppo non mi funziona...esce si la barra Pagina 1 - 2 - 3 però quando vado a cambiar pagina succede che cambia si la pagina ma mi mostra a video sempre le foto della prima pagina e non quelle della pagina successiva...come mai??

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    719
    Ma $start come lo setti?
    Se non metti un minimo di _GET $start sarà sempre nullo.

  3. #3
    il problema è proprio questo...non capisco come settare $start in modo da fargli capire quale foto visualizzare....Puoi farmi un esempio semplice col metodo _get?
    Grazie

  4. #4
    Utente di HTML.it L'avatar di Grino
    Registrato dal
    Oct 2004
    Messaggi
    739
    Un esempio funzionanate da cui leggere il codice

    Per il resto leggi il commento al tuo codice
    Codice PHP:
            <?php
    //Ad ogni esecuzione dello script $start non può esistere, quindi
    //lo inizializzi con 0
            
    if (!isset($start) OR $start 0)
                
    $start 0;
            
    $step 14;
            include 
    "config.php";
    //Indipendentemente dalla pagina parti dal record 0 e ne prendi 14
            
    $query "SELECT * FROM libreriaimmagini  ORDER BY id_libreria DESC LIMIT $start,$step";
            
    $result = @mysql_query($query) or die(mysql_error());
            if (
    mysql_num_rows($result) > 0) {
                while (
    $row mysql_fetch_array($result)) {
                    
    $id_libreria stripslashes($row['id_libreria']);
                    
    $foto_nome stripslashes($row['foto_nome']);
    //Indipendentemente dalla pagina visualizzi le prime 14 immagini
                    
    echo <<<END
               <a href="#" onclick="scegli($id_libreria,'libreriaimmagini/$foto_nome');" width="100" height="100"> 
                   [img]libreriaimmagini/
    $foto_nome[/img]
               </a> 
    END;
                }
            }
    //Ora step diventa per_pagina... poco male
            
    $per_pagina 14;
            
    $totale_dati mysql_fetch_row(mysql_query("SELECT COUNT(id_libreria) FROM libreriaimmagini"));
            
    $totale $totale_dati[0];
            
    $totale_pagine ceil($totale $per_pagina);
            
    $pagina_attuale = isset($_GET["pag"]) ? (int) $_GET["pag"] : 1;
    //Aggiorni start
            
    $start = ($pagina_attuale 1) * $per_pagina;
    //Qui c'è una query che non si sa a cosa serva... comunque qui dici che ti funziona quindi...
            
    mysql_query("SELECT * FROM libreriaimmagini ORDER BY id_libreria DESC LIMIT {$start}{$per_pagina}");
            if (
    $pagina_attuale AND $pagina_attuale <= $totale_pagine) {
                echo (
    $pagina_attuale == 1) ? "Indietro\n" '<a href="?pag=1"> 
    Prima Pagina</a>' 
    "\n" '[url="?pag=' . ($pagina_attuale 1) . '"]Indietro[/url]' "\n";

                
    $max = (($pagina_attuale 2) > $totale_pagine) ? $totale_pagine : ($pagina_attuale 2);
                
    $min = (($pagina_attuale 2) < 1) ? : ($pagina_attuale 2);
                for (
    $i $min$i <= $max$i++) {
                    echo 
    " | ";
                    echo (
    $i == $pagina_attuale) ? "$i\n" '[url="?pag=' $i '"]' $i '[/url]' "\n";
                }

                echo (
    $pagina_attuale == $totale_pagine) ? " Successivo\n" ' <a href="?pag=' . ($pagina_attuale 1) . '"> 
    Successivo</a>' 
    "\n" ' [url="?pag=' $totale_pagine '"]Ultima Pagina[/url]' "\n";
            }
    ?>
    Siamo sempre troppo gelosi delle nostre grandi piccole opere! - Grino inedito.
    Lavori e Lavoretti

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    719
    @Grino non capisco a che serva quello che hai messo tu...

    Comunque ecco il codice con i $_GET
    Codice PHP:
    <?
    if(!$_GET["pag"] == null){
    $start $_GET["pag"];
    }else {
    $start 1;
    }
    $step 14;
    $start $start*$step;
    $limit $start+$step;

    include 
    "config.php";
    //recupero i valori dal form precedente
    $query "SELECT * FROM libreriaimmagini  ORDER BY id_libreria DESC LIMIT $start,$limit";
    $result = @mysql_query($query) or die (mysql_error());
    if (
    mysql_num_rows($result) > 0)
    {
      while(
    $row mysql_fetch_array($result))
      
      {
    $id_libreria stripslashes($row['id_libreria']);
      
    $foto_nome stripslashes($row['foto_nome']);
      
       
    ?>
    <a href="#" onclick="scegli(<?echo"$id_libreria"?>,'libreriaimmagini/<?echo"$foto_nome"?>');" width="100" height="100">
    [img]libreriaimmagini/<?echo[/img]"  id="<?echo"select_$id_libreria"?>
    style="margin:0px; border:0px solid #ffffff;width : 100px;height : 100px;border : 0px;" 

    alt="Seleziona l immagine da usare per il tuo link"></a>



    <?

    }}

    $per_pagina 14;
    $totale_dati mysql_fetch_row(mysql_query("SELECT COUNT(id_libreria) FROM libreriaimmagini"));
    $totale $totale_dati[0];
    $totale_pagine ceil($totale/$per_pagina);
    $pagina_attuale = isset($_GET["pag"]) ? (int)$_GET["pag"] : 1;
    $start = ($pagina_attuale-1)*$per_pagina;

    mysql_query("SELECT * FROM libreriaimmagini ORDER BY id_libreria DESC LIMIT {$start}{$per_pagina}");
    if(
    $pagina_attuale>AND $pagina_attuale<=$totale_pagine){
    echo (
    $pagina_attuale == 1) ? "Indietro\n" '<a href="?pag=1">
    Prima Pagina</a>'
    ."\n".'[url="?pag='.($pagina_attuale-1).'"]Indietro[/url]'."\n";

    $max = (($pagina_attuale+2) > $totale_pagine) ? $totale_pagine : ($pagina_attuale+2);
    $min = (($pagina_attuale-2) < 1) ? : ($pagina_attuale-2);
    for(
    $i=$min;$i<=$max;$i++){
    echo 
    " | ";
    echo (
    $i == $pagina_attuale) ? "$i\n" '[url="?pag='.$i.'"]'.$i.'[/url]'."\n";
    }

    echo (
    $pagina_attuale == $totale_pagine) ? " Successivo\n" ' <a href="?pag='.($pagina_attuale+1).'">
    Successivo</a>'
    ."\n".' [url="?pag='.$totale_pagine.'"]Ultima Pagina[/url]'."\n";
    }
    ?>

  6. #6
    Utente di HTML.it L'avatar di Grino
    Registrato dal
    Oct 2004
    Messaggi
    739
    @simo22
    Il codice commentato serve a far riflettere su ciò che si è scritto, anche in merito a ciò che si ritiene funzioni, e rispondere alla domanda di chi ha aperto la discussione che era

    Purtroppo non mi funziona...esce si la barra Pagina 1 - 2 - 3 però quando vado a cambiar pagina succede che cambia si la pagina ma mi mostra a video sempre le foto della prima pagina e non quelle della pagina successiva...come mai??
    Infine vorrei segnalare che la tua correzione produce una bel Notice: Undefined index: pag perché sarebbe opportuno verificare che un certo indice esista in un array prima di tentare di accedervi, magari con una isset($_GET['pag']), come fa correttamente carlitosteam.

    In più il costrutto

    Codice PHP:
    if(!$_GET["pag"] == null
    anche se in apparenza funziona, è concettualmente sbagliato perchè, per la precedenza degli operatori logici viene eseguito prima il !$_GET["pag"], ma al primo accesso alla pagina tale indice in $_GET potrebbe non esistere (caso limite in cui dai per default valore 1). Ad un qualcosa che non esiste tenti di applicare una negazione logica per poi confrontare il risultato, per mezzo dell'operatore di uguaglianza, con il valore null. Peccato che il ! produce true o false, quindi è inappropriato confrontare il suo risultato con null che nei suoi intenti vorrebbe non essere nè uno 0, nè un false e neanche una stringa vuota. Comunque fermiamoci qua e ringraziamo php per la sua estrema flessibilità e benevolenza per la quale sembra tutto normale (il lato oscuro di php ).

    Mi permetto quindi di suggerire una alternativa decisamente più gustosa
    Codice PHP:
    $start=(isset($_GET['pag']) and ($val=intval($_GET['pag']))>0)?$val:1
    Questo tipo di inizializzazione può apparire un po' criptica ma è la più sintetica e corretta poichè:
    1)sfrutta lo shortcut nella valutazione delle espressioni logiche (presente in ogni linguaggio, finanche nel timorato e castigato PASCAL) per cui, se la variabile $_GET['pag'] non esiste ed essendo l'espressione logica legata da un and si ottiene false senza procedere oltre nella valutazione, ovvero ciò che c'è dopo l'operatore and non viene valutato
    2)qualora $_GET['pag'] esista (ma ignoriamo per ora cosa contenga) abbiamo la valutazione della seconda parte dell'operatore and. In praticolare la funzione di php intval() converte la stringa $_GET['pag'] in un valore intero. Tale funzione in caso di errore, perchè il contenuto non è un numero o altro, ritorna il valore numerico 0. Questo ci mette al riparo dall'utente malizioso che manomette il valore di $_GET['pag'] con qualcosa di diverso da un numero.
    3)visto che abbiamo invocato una funzione e trasformato il $_GET['pag'] in un numero tanto vale approfittarne e conservare tale numero, custodito in $val. Procediamo quindi verificando che $val sia maggiore di 0, perchè altrimenti ricadiamo nell'utente malizioso che tenta di mettere in crisi il nostro script con un valore negativo o nullo mentre, mi sembra di capire, che la pagine le vuoi numerate da 1 in poi.
    4)Se $_GET['pag'] esiste, è un numero intero ed è strettamente maggiore di zero allora è elegibile, per mezzo del $val che abbiamo in custodia, ad essere un buon valore per inizializzare $start. In ogni altro caso $start è impostato al valore di default 1.

    Che te ne pare? Per essere una misera riga di codice fa un sacco di belle cose e mi auguro di essere stato, in questa circostanza, più chiaro di prima!

    La verità è che carlitosteam non aveva bisogno della tua soluzione, perchè già di sua conoscenza avendola applicata qualche riga più in basso nel suo codice. D'altra parte applicata quando ormai non più capace di influenzare il codice di estrazione delle immagini. Ecco perchè ho ritenuto più utile inserire solo dei commenti nel suo codice cercando di indurlo a ripensare a ciò che già sapeva.

    Siamo sempre troppo gelosi delle nostre grandi piccole opere! - Grino inedito.
    Lavori e Lavoretti

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.