Tag bort fnuttarna runt $start och $limit.
Sedan säger manualen om mysql_db_query:
This function is deprecated, do not use this function. Use mysql_select_db() and mysql_query() instead.
7 svar · 611 visningar · startad av azah
Jag håller på att koda min första gästbok. Den är väldigt enkel, men funkar. Nu tänkte jag ge mig i kast med en paging-funktion. Hittade en guide här, som jag utgick från. Dock får jag lite felmeddelanden:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in form.php on line 51
Rad 51 ser ut som följande: while ($rad = mysql_fetch_array ($data) )
Koden för form.php ser ut såhär:
$open = mysql_connect("xxx", "xxx", "xxx");
if ( $_GET['number'] == NULL ){
$limit = 10;
} else {
$limit = $_GET['number'];
}
if ($_GET['page'] == NULL){
$start = 0;
} else {
$start = $_GET['page'];
}
if($_GET['page'] < 0){
header("Location:form.php?page=0&limit=.$limit");
}
$data = mysql_db_query("databasen", "SELECT namn, hemsida, text FROM gbok ORDER BY id DESC LIMIT '$start', '$limit'");
while ($rad = mysql_fetch_array ($data) ) {
print "<p>";
print "<b>Namn: </b>";
print $rad["namn"];
print "<br />";
print "<b><a href=\"$rad[hemsida]\">Hemsida</a></b>";
print "<br />";
print "<b>Text: </b>";
print $rad["text"];
print "</p><hr />";
}
$previous = $start + $limit;
$next = $start - $limit;
echo '<a href="form.php?start='.$previous.'">Föregående sida</a> - ';
echo '<a href="form.php?start='.$next.'">Nästa sida</a>';
På form.php finns också ett formulär som skickar data till databasen m.h.a. gbok.php:
header("Location:form.php");
if( empty($namn) ){ exit(); }
if( empty($text) ){ exit(); }
$open = mysql_connect("xxx", "xxx", "xxx");
$dbinfo = mysql_db_query("databasen", "INSERT gbok (namn, hemsida, text) VALUES ('$namn', '$url', '$text')");
mysql_close($open);
Finns det någon vänlig själ som förstår det här bättre än jag, och som dessutom har tid att hjälpa mig? tacksam för svar.
Tag bort fnuttarna runt $start och $limit.
Sedan säger manualen om mysql_db_query:
This function is deprecated, do not use this function. Use mysql_select_db() and mysql_query() instead.
Tack för snabbt svar :)
Det gjorde susen. Felmeddelandena försvann iallafall. Men däremot får jag inte nästa/föregående-länkarna att fungera. Klickar jag på nästa kommer jag till samma sida. Skriver jag däremot in http://xxx.com/form.php?page=2 kommer jag till nästa sida. Så det är någon som ligger där och spökar.
Jag förstår inte heller hur jag skall ändra på mysql_db_query(). Om jag t.ex. byter till mysql_query får jag följande felmeddelande: mysql_query(): supplied argument is not a valid MySQL-Link resource samt någon varning om mysql_fetch_array(). Kanske jag som är lite trög...
Byt ut start mot page i dina paging-länkar. Det är page du fångar upp i skriptet.
mysql_select_db() lägger du tillsammans med mysql_connect():
$open = mysql_connect("xxx", "xxx", "xxx");
mysql_select_db('databasen');
Och din mysql_query() kör du utan första argumentet:
$data = mysql_query("SELECT namn, hemsida, text FROM gbok ORDER BY id DESC LIMIT $start, $limit");
Jo, jag tyckte det var mest logiskt med page också, så jag testade med det. Men jag fick det inte att fungera till 100%, därför frågade jag. Nu räknar koden fel på något sätt, så att man kommer till sidan 10 efter första sidan. Men det skall jag nog kunna lösa om jag sätter mig och experimenterar lite.
Men tack så hemskt mycket för hjälpen. :) Nu kanske jag kan få igång mig gästbok snart!
Får det inte att funka riktigt... Som det är nu funkar pagingen hyfsat, den delar iaf upp inläggen med tio på varje sida. Men det är själva länkarna som är problemet. Länken för "föregående" ligger kvar hela tiden, även om det inte finns några föregående sidor. Klickar man på den länken, så kommer man till en "negativ" sida, eftersom koden räknar minus för varje klick.
Med i paging-scriptet låg en if-sats som skulle ordna detta. Om sidumret blev mindre än noll, skulle man vidarebefordras till första sidan. Dock får jag inte detta att fungera riktigt.
If-satsen ser ut som följande:
if ($_GET['sida'] < 0){
header("Location: form.php?sida=0&limit=.$limit");
}
Felmeddelandet: Cannot modify header information - headers already sent by (output started at form.php:9). Det låter som det inte går att ändra "headers", eftersom det redan är gjort tidigare. Det enda stället med header-kod är på gbok.php (se tidigare inlägg). Tänker jag rätt? I så fall, vad kan jag göra åt det?
Det skulle vara mer praktiskt om föregående-länken endast skrev ut där det behövs.
Du får inte ha någon output före din header.
Alltså ingen HTML echo eller print.
Men varför inte göra:
if ($_GET['sida'] < 0){
$_GET['sida'] = 0;
}
Först hade du 'start', sedan hade du 'page', nu har du 'sida' :)
Visst ja, det stämmer. Har nog läst det nånstans. Minnet är kort ibland :S
Tack så mycket, men jag fick det inte riktigt att funka med koden du skickade. Blev ett felmeddelande om mysql_fetch_array. Nu spann jag vidare på idén om att inte visa föregående-länken mer än när det behövdes. Lyckades pilla ihop en if-sats som verkar funka:
if ($_GET['sida'] < 2){
echo '<a href="form.php?sida='.$next.'">Nästa ></a>';
} else {
echo '<a href="form.php?sida='.$previous.'">< Föregående</a> - ';
echo '<a href="form.php?sida='.$next.'">Nästa ></a>';
}
Då skrivs bara de länkar som behövs ut. Men tack så jättemycket för din hjälp, jag är jättetacksam :) Nu kommer det förhoppningsvis inga fler frågor om det här från mig.