România
Roportal.ro

PHP array pagination

Început de RHS, Sâm 13 sep 2014 · 6 răspunsuri · 9.206 vizualizări

RHS767 mesaje#1

Salutari tuturor!

Am urmatoarea problema:

Trebuie sa fac o paginatie cu niste id-uri importate din database(mysql). Problema este ca id-urile nu sunt 1, 2, 3, 4, 5 si asa mai departe, ci 2, 4, 7, 10, etc.

Am ajuns pana aici dupa care m-am blocat ...

Cod:

<?php
    $query = "SELECT * FROM gallery WHERE category = '$value'";
    $result = mysqli_query($connect, $query);

    if (mysqli_num_rows($result) >= 1) {
        while($row = mysqli_fetch_array($result)) {
            $pag[] = $row['id'];
        }
    }

    $count = 1;
    $items = '';
    $first = reset($pag);
    $last = end($pag);

    if ($_GET['language'] == 'en') {
        $lang = 'en/';
    } else {
        $lang = 'de/';
    }

    $current = decode($_GET['id']);
    $prev = $current - 1;
    $next = $current + 1;

    foreach($pag as $value) {
        echo '<a href="/preview/'.$lang.encode($value).'/'.encode($category).'/" title="'.$titleen.'">'.$count.'</a>';
        $count++;
        
        $vl[] = $value;
    }

    if ($prev >= $first) {    
        echo '<a href="/preview/'.$lang.encode($value).'/'.encode($category).'/" title="'.$titleen.'"><< '.$value.'</a>';
    }

    if ($next <= $last) {    
        echo '<a href="/preview/'.$lang.encode($value).'/'.encode($category).'/" title="'.$titleen.'">>> '.$value.'</a>';
    }
?>

Acest echo "echo '<a href="/preview/'.$lang.encode($value).'/'.encode($category).'/" title="'.$titleen.'">'.$count.'</a>';" imi arata toate id-urile numerotate 1 = 2, 2 = 4, 3 = 7, etc.

Daca las acest link vizibil nu este nici o problema dar daca vreau sa adaug buton de prev si next atunci apare problema.

Va multumesc pentru ajutor.

Editat Sâm 13 sep 2014 16:10

King15.748 mesaje#2

Nu e tot scriptul asta, nu?

Ai verificat tabelul din baza de date? Poate acolo sunt gresit numerotate id-urile

RHS767 mesaje#3

Salut King1, nu sunt gresite. Anumite id-uri sunt vizibile in alte pagini unde "category" este diferit ($query ="SELECT * FROM gallery WHERE category = '$value'";) $value se schimba in baza paginii vizualizate.

Eu vreau sa fac un next - prev functional cu id casual...

Editat Dum 14 sep 2014 01:49

King15.748 mesaje#4

Aaaa, pai asta e chestia atunci.

De fapt tu vrei o noua numerotare a id-urilor pe fiecare pagina, nu?

Daca schimbi asta

 if ($prev >= $first) {    
        echo '<a href="/preview/'.$lang.encode($value).'/'.encode($category).'/" title="'.$titleen.'"><< '.$value.'</a>';
    }

    if ($next <= $last) {    
        echo '<a href="/preview/'.$lang.encode($value).'/'.encode($category).'/" title="'.$titleen.'">>> '.$value.'</a>';
    }

in asta

 if ($prev >= $first) {    
        echo '<a href="/preview/'.$lang.encode($value).'/'.encode($category).'/" title="'.$titleen.'"><< '.$count.'</a>';
    }

    if ($next <= $last) {    
        echo '<a href="/preview/'.$lang.encode($value).'/'.encode($category).'/" title="'.$titleen.'">>> '.$count.'</a>';
    }

?

Poti incerca.

Nu imi dau seama de unde vine $value in primul query acolo. Lipseste ceva. ($query ="SELECT * FROM gallery WHERE category = '$value'";)

RHS767 mesaje#5

Am 3 coloane in baza de date:

id     name     category
1     Andrei        1
2     Dragos        1
3     Cristian      2
4     Daniel        1

URL-ul cu care "merg" pe pagina respectiva este http://localhost/preview/en/Mg/MQ/

2 (codat in base64) = Mg

1 (codat in base64) = MQ

$value = decode($_GET["value"]); (unde in htaccess RewriteRule ^preview/(.*)/(.*)/(.*)/$ details.php?language=$1&id=$2&value=$3)

asta inseamna ca $value = 1

$query = "SELECT * FROM gallery WHERE category = '$value'";
$result = mysqli_query($connect, $query);

while($row = mysqli_fetch_array($result)) {
     $pag[] = $row['id'];
}

treaba asta imi arata id-urile 1, 2 si 4

cu urmatorul cod creez o numerotare ordonata:

$count = 1;

foreach($pag as $val) {
        echo '<a href="/preview/'.$lang.encode($val).'/'.encode($category).'/" title="'.$titleen.'">'.$count.'</a>';
        $count++;
}

codul de deasupra imi arata urmatoarele pagini:

<a href="......../encode(1 unde 1 este id)/">1</a> | <a href="......../encode(2 unde 2 este id)/">2</a> | <a href="......../encode(4 unde 4 este id)/">3</a>

ATENTIE! id 4 este numerotat 3! deci cum sar eu de la id 2 la id 4 prin metoda NEXT - PREV? Nu vreau sa vad 1, 2, 3, 4, 5 si sa dau click pe numele care vreau sa il vad ci vreau sa fie 2 sageti < si >

E cam complicat de explicat ... scris ...

Sper ca ai inteles ceva

RHS767 mesaje#6

Imi pare rau pentru dublu post dar am rezolvat singur.

Mai jos adaug codul, poate cineva o sa aiba nevoie.

                    $query = "SELECT * FROM gallery WHERE category = '$category'";
                    $result = mysqli_query($connect, $query);
                    
                    if (mysqli_num_rows($result) >= 1) {
                        while($row = mysqli_fetch_array($result)) {
                            $arr[] = $row['id'];
                        }
                    }

                    $id = $_GET['id'];
                    
                    $arrsearch = array_search($id, $arr);
                    $next = $arrsearch + 1;
                    $prev = $arrsearch - 1;
                    
                    if ($prev >= 0) {
                        echo '<a href="/preview/'.$arr[$prev].'/"><< </a>';
                    }
                        
                    if ($next < count($arr)) {
                        echo '<a href="/preview/'.$arr[$next].'/">>></a>';
                    }

← Înapoi la Webmasteri