Problem z podstronami

Wszystko o językach skryptowych takich jak PHP i Perl, serwerach WWW, CGI, bazach danych i języku SQL.
play1996
Posty: 2
Rejestracja: 25 wrz 2014, 20:54:31
Płeć: Niewybrana
User Agent: Firefox Windows 1920x1080

Problem z podstronami

Post autor: play1996 »

Witajcie, piszę panel administracyjny a raczej mam skonczony tylko nastało mnie kilka problemów jeden mianowicie taki iż nie działa numeracja stron do obecnej strony idzie mi adres

Kod: Zaznacz cały

nazwastrony.pl/admin/index.php?users
no i co dalej ? nie da rady chyba zastosować

Kod: Zaznacz cały

 ?page= 
tzn. nie wiem, ale nie wychodzi mi, nic sie nie zmienia na stronie.

KOD PHP pliku

Kod: Zaznacz cały

<?php
$query = "SELECT COUNT(*) as all_posts FROM users";

$result = mysql_query($query) or die (mysql_error());
$rows = mysql_fetch_array($result);
extract($rows);

$onpage = 50; 
$navnum = 5; 
$allpages = ceil($all_posts/$onpage);

if(!isset($_GET['page']) or $_GET['page'] > $allpages or !is_numeric($_GET['page']) or $_GET['page'] <= 0){
    $page = 1;
}else{
    $page = $_GET['page'];
}
$limit = ($page - 1) * $onpage;
if(isset($_POST['id_login'])) {
     $kryterium = clear($_POST['id_login']);
    $query = "SELECT * FROM `users` WHERE `nick`='$kryterium' AND `id`='$kryterium' ORDER BY `kasa`";
} else {
    $query = "SELECT * FROM `users` ORDER BY `kasa` DESC LIMIT $limit, $onpage";
}
$sql = mysql_query($query) or die (mysql_error());


if(mysql_num_rows($sql) > 0)
{
    echo '<div class="well">
            <table class="table">
                <thead>
                    <tr>
                        <th>#</th>
                        <th>
                            <center>Nick(ID)</center>
                        </th>
                        <th>
                            <center>E-Mail</center>
                        </th>
                        <th>
                            <center>Portfel</center>
                        </th>
                        <th>
                            <center>PA</center>
                        </th>
                    </tr>
                </thead>
                <tbody>
        ';
    $num = 1 + ($onpage * ($page - 1));
    while($r = mysql_fetch_assoc($sql))
    {
        if($r['grupa'] == 1) {
            $grupa = '<a href="#" class="btn btn-success btn-lg disabled" role="button">TAK</a>';
        } else {
            $grupa = '<a href="#" class="btn btn-danger btn-lg disabled" role="button">NIE</a>';
        }
        $id = $r['id'];
        $login = $r['nick'];
        $email = $r['email'];
        $kasa = $r['kasa'];

        echo '
            <tr>
                <td style="border-right:solid 1px silver">'.$num.'</td>
                <td style="border-right:solid 1px silver"><center>'.$login.' ('.$id.')</center></td>
                <td style="border-right:solid 1px silver"><center>'.$email.'</center></td>
                <td style="border-right:solid 1px silver"><center>'.$kasa.' wPLN</center></td>
                <td style="border-right:solid 1px silver"><center>'.$grupa.'</center></td>
            </tr>';
        $num++;
    }
    echo '</tbody></table>';
    mysql_free_result($sql);
    mysql_close();

}
if($navnum > $allpages){
    $navnum = $allpages;
}

$forstart = $page - floor($navnum/2);
$forend = $forstart + $navnum;

if($forstart <= 0){ $forstart = 1; }

$overend = $allpages - $forend;

if($overend < 0){ $forstart = $forstart + $overend + 1; }

$forend = $forstart + $navnum;
$prev = $page - 1;
$next = $page + 1;

$script_name = $_SERVER['SCRIPT_NAME'];

echo "<center ".(($nopages == 1) ? 'style="display: none"': '')."><nav>
                <ul class=\"pagination\">";
if($page > 1) echo "<li><a class=\"btn btn-primary\" href=\"".$script_name."?page=".$prev."\">&laquo;</a></li>";
if ($forstart > 1) echo "<li><a href=\"".$script_name."?page=1\">1</a></li>";
if ($forstart > 2) echo "<li>...</li>";
for($forstart; $forstart < $forend; $forstart++){
    if($forstart == $page){
        echo "<li class=\"active\">";
    }else{
        echo "<li> ";
    }
    echo "<a class=\"btn btn-primary\" href=\"".$script_name."?page=".$forstart."\">".$forstart."</a></li>";
}
if($forstart - 1 < $allpages) echo "<li><a class=\"btn btn-primary\" href=\"".$script_name."?page=".$allpages."\">".$allpages."</a></li>";
if($page < $allpages) echo "<li><a class=\"btn btn-primary\" href=\"".$script_name."?page=".$next."\">&raquo;</a></li>";
echo "</ul></nav></cemter>";
echo '</div>';

echo '
</div>';
#require_once "include/rightbox.php";
echo '</div>';
?>

Liczę na waszą pomoc, bo masakra jakaś ;d pewnie błahostka jakaś, jak zwykle :(
mdwebbuilder
Posty: 49
Rejestracja: 06 wrz 2015, 18:46:57
Płeć: Niewybrana
User Agent: Firefox Windows 1760x990

Problem z podstronami

Post autor: mdwebbuilder »

Witam,

Pierwsze, co mi się narzuca, zupełnie odbiegając od pytania (choć może przez przypadek podam odpowiedź), to brak kodu połączenia z bazą danych (chyba, że nie został pokazany ze względu na ochronę danych dostępowych do bazy). Kwerendy nie są chyba wykonywane, bo plik PHP nie jest połączony z żadną bazą danych.

Kod jest tak nieczytelny, że nie byłem w stanie zorientować się, o co chodzi, przydałyby się komentarze wyjaśniające, jaką czynność realizuje dany fragment kodu. Może nie jestem najlepszą osobą do dawania takich rad, bo sam bardzo rzadko używam komentarzy, ale na pewno bardzo by w tej sytuacji pomogły.

Jeżeli chodzi o wyświetlenie wszystkich postów z bazy danych na kilku stronach, po najwyżej daną ilość (np. 50) na stronie, to myślę, że da się to zrobić prościej, po prostu łącząc się z bazą danych, pobierając dane postów, ewentualnie dołączając dane z kwerend pomocniczych dla kluczy obcych zawartych w rekordach tabeli zawierającej posty i przekazując właśnie coś w rodzaju

Kod: Zaznacz cały

&page=/x/
wyliczać pierwszy i ostatni rekord, który należy wypisać dla danej wartości zmiennej

Kod: Zaznacz cały

$_POST['page']
, co daje

Kod: Zaznacz cały

$pierwszy = 0 + ($max_na_stronie * ($_POST['page'] - 1));
i

Kod: Zaznacz cały

$ostatni = 0 + ($max_na_stronie * ($_POST['page'])) - 1;
. Później w pętli wypisujemy wszystko, co trzeba dla rekordów z przedziału <$pierwszy, $ostatni>, uprzednio wyrzucając poprzednie rekordy w pustej pętli wykonywanej dla rekordów o indeksach z przedziału <0, $pierwszy).

Nie testowałem tego rozwiązania, ale wydaje mi się, że powinno być poprawne. Jeżeli poda mi Pan, jakie pola trzeba odczytać z tabeli z bazy danych, to może nawet pokuszę o napisanie Panu tego kodu.

Pozdrawiam

MD
play1996
Posty: 2
Rejestracja: 25 wrz 2014, 20:54:31
Płeć: Niewybrana
User Agent: Firefox Windows 1920x1080

Problem z podstronami

Post autor: play1996 »

Z tego co widzę to to co napisałeś niczym praktycznie nie różni się od mojego kodu. Mi ogólnie to działa na innej zakładce, tylko że tu jest menu napisane w innej formie i wydaje mi się że przez to nie działa całość poprawnie, mogę się mylić.

Pokażę część kodu:

Kod: Zaznacz cały

	<li><a class="ajax-link" href="?users"><i class="glyphicon glyphicon-user"></i><span> Lista Użytkowników</span></a></li>
        <?php
     
            if(isset($_GET['users'])){
                require_once "admin_user.php";
            }
        ?>

admin_user.php - to ten plik co w 1 poście umieściłem.

Na stronie wszystko jest sprawne z bazą danych, wszystko poprawnie czyta, ładuje

Kod: Zaznacz cały

<?php
$query = "SELECT COUNT(*) as all_posts FROM users";

$result = mysql_query($query) or die (mysql_error());
$rows = mysql_fetch_array($result);
extract($rows);

$onpage = 50;
$navnum = 5;
$allpages = ceil($all_posts/$onpage);

if(!isset($_GET['page']) or $_GET['page'] > $allpages or !is_numeric($_GET['page']) or $_GET['page'] <= 0){
    $page = 1;
}else{
    $page = $_GET['page'];
}
$limit = ($page - 1) * $onpage;
if(isset($_POST['id_login'])) {
     $kryterium = clear($_POST['id_login']);
    $query = "SELECT * FROM `users` WHERE `nick`='$kryterium' AND `id`='$kryterium' ORDER BY `kasa`";
} else {
    $query = "SELECT * FROM `users` ORDER BY `kasa` DESC LIMIT $limit, $onpage";
}
$sql = mysql_query($query) or die (mysql_error());
Mi się wszystko wyświetla poprawnie na stronie, tylko żeby nie było wszystkiego na 1 stonie (tu chodzi mi o tysiąc userów) to zrobiłem paginacje z którą jest problem taki że po próbie przejścia na 2 strone to wywala mnie na strone główną i wydaje mi się że to wina tego menu o którym wspomniałem wyżej.

Kod: Zaznacz cały

$onpage = 50; //ilość użytkowników przypadających na stronę główna
$navnum = 5; //ilość wyświetlanych numerów stron
$num - to jest numeracja 
Jak coś jeszcze będzie trzeba spolszczyć to pisz.

Pozdrawiam i dziękuję za zainteresowanie.
ODPOWIEDZ