Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: PHP + MySQL Dawkowanie wyników zapytania
Forum PHP.pl > Forum > PHP
darkovsky
Od tygodnia uczę się PHP i MySQL i mam problem którego nie umiem rozwiązać.
Chcę zrobić dawkowanie wyników zapytania w taki sposób jak działa to w serwisie pinterest.
Po zjechaniu na dół widnieje przycisk "pokaż więcej" i po kliknięciu do obecnych wyników doładowują się kolejne, albo automatycznie po zjechaniu na dół dodają się kolejne wyniki - zapewne trzeba będzie użyć java.
Potrafię zrobić podział na strony, ale tego nie. Zapewne banalne, ale ...
Proszę HELP ;)

Kod
<?php
require("connection.php");
connection();

$wiecej = $_GET['wiecej'];

$start = 0;
$limit = 15;

$sql = mysql_query("SELECT * FROM brands ORDER BY name LIMIT $start, $limit");

while ($resultat=mysql_fetch_array($sql)) {

    echo $resultat['name']."<br>";
}
?>

<form action="" method="get">
    <input type="hidden" name="wiecej" value="15" />
    <input type="submit" value="więcej" />
</form>
sajegib
1.musisz z formularza przesłać zmienna która po lekkiej modyfikacji wrzucasz w zapytanie - do zmiennej start dodajesz tyle, ile wyników ma być na jednej stronie,
2. uzywaj bb code
darkovsky
Cytat(sajegib @ 21.01.2013, 19:39:18 ) *
1.musisz z formularza przesłać zmienna która po lekkiej modyfikacji wrzucasz w zapytanie - do zmiennej start dodajesz tyle, ile wyników ma być na jednej stronie,
2. uzywaj bb code


Chyba do $limit a nie do $start, ale to mnie nie ratuje (wiem jak to zrobić), bo i tak od nowa wysyła pytanie do bazy i czekam aż się załaduje.
sajegib
Właśnie do $start. Załóżmy ze wyświetlasz 5 wyników - wtedy na pierwszej stronie masz 1-5, jak dodasz 5 do $start to będziesz mieć 6-10 itd.
Natomiast jak zwiększysz limit to wyświetlisz więcej niż potrzeba...


Cytat
bo i tak od nowa wysyła pytanie do bazy


A jak inaczej ma ci wyświetlić rekordy nieuwzględnione w zapytaniu?

Jeśli chcesz wyświetlać bez odświeżania strony to AJAX
darkovsky
Cytat(sajegib @ 21.01.2013, 20:04:11 ) *
Właśnie do $start. Załóżmy ze wyświetlasz 5 wyników - wtedy na pierwszej stronie masz 1-5, jak dodasz 5 do $start to będziesz mieć 6-10 itd.
Natomiast jak zwiększysz limit to wyświetlisz więcej niż potrzeba...

A jak inaczej ma ci wyświetlić rekordy nieuwzględnione w zapytaniu?

Jeśli chcesz wyświetlać bez odświeżania strony to AJAX


Ooo... już lepiej wink.gif Właśnie chcę to robić bez ponownego wczytywania tego co już zostało wyświetlone aby strona nie ładowała się ponownie.
AJAX = jak na razie nie mam o tym pojęcia. sajegib masz czas i jesteś w stanie mi pomóc?
sajegib
Jestem w stanie, ale niestety nie mam czasu. Najlepiej zrobisz jak poznasz AJAX od podstaw, zamiast sciągac gotowca. Z pewnością jeszcze nie raz się przyda
CuteOne
1. do tak prostej rzeczy nie potrzebujesz formularza - wystarczy zwykły link
  1. <a href="#2" class="more">Więcej</a>

2. Do obsługi AJAX'a polecam jQuery (nie ma sensu pisać tego samemu). Oczywiście jak przedmówca wspomniał, warto poznać chociaż zasadę działania.
3.
http://stackoverflow.com/questions/4054211...-after-nth-item
http://www.9lessons.info/2009/12/twitter-s...sults-with.html (zobacz demo)
darkovsky
Potrzebuję pomocy. Wszystko działa dopóki DESC (ORDER BY id DESC) nie zamienie na ASC (ORDER BY id ASC). Chciałbym żeby sortowało mi za pomocą name (ORDER BY name)
Co trzeba zmienić w kodzie J żeby działało poprawnie przy sortowaniu za pomocą name.

Plik: load.php
Kod
<html>
<head>
<meta http-equiv=\"content-type\" content=\"text/html; charset=iso-8859-2\">
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.0/jquery.min.js"></script>

<script type="text/javascript">
$(function() {
    $('.more').live("click",function() {
        var ID = $(this).attr("id");
        if(ID) {
        $("#more"+ID).html('<img src="moreajax.gif" />');
            $.ajax({
            type: "POST",
            url: "more.php",
            data: "msg="+ ID,
            cache: false,
            success: function(html){
                $("div#updates").append(html);
                $("#more"+ID).remove();
                }
              });
        }
        else {
        $(".morebox").html('');
        }
    return false;
    });
});
</script>
</head>
<body>

<div id="updates">
    <?php
    include('config.php');
    $sql=mysql_query("SELECT * FROM markofani_brands ORDER BY id DESC LIMIT 25");

    while($row=mysql_fetch_array($sql)) {
        $id=$row['id'];
        echo $row['name']."<br />";
    }
?>
</div>

        <div id="more<?php echo $id; ?>">
            <a href="#" class="more" id="<?php echo $id; ?>">WIĘCEJ</a>
        </div>

</body>
</html>


Plik: more.php
Kod
<?php
include("config.php");

if(isSet($_POST['msg'])) {
    $msg=$_POST['msg'];
    $result=mysql_query("SELECT * FROM brands WHERE id<'$msg' ORDER BY id DESC limit 25");
    $count=mysql_num_rows($result);

while($row=mysql_fetch_array($result)) {
    $id=$row['id'];
    echo $row['name']."<br />";
}
?>

        <div id="more<?php echo $id; ?>" class="morebox">
            <a href="#" id="<?php echo $id; ?>" class="more">WIĘCEJ</a>
        </div>

<?php
}
?>


Proszę o pomoc.
b4rt3kk
Żeby sortowało za pomocą name trzeba dać:

  1. ORDER BY name


Oczywiście ORDER BY może występować tylko raz w zapytaniu, ale może mieć kilka argumentów (jeśli tak, brana jest pod uwagę kolejność ich wypisania). Przykład:

  1. ORDER BY name ASC, id DESC
darkovsky
Cytat(b4rt3kk @ 22.01.2013, 01:59:02 ) *
Żeby sortowało za pomocą name trzeba dać:

  1. ORDER BY name


Oczywiście ORDER BY może występować tylko raz w zapytaniu, ale może mieć kilka argumentów (jeśli tak, brana jest pod uwagę kolejność ich wypisania). Przykład:

  1. ORDER BY name ASC, id DESC


Ad. 1 to oczywiste,
Ad. 2 trzeba zmodyfikować skrypt J żeby działało dla ASC, a dla name to nie mam pojęcia...
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.