Just nu i M3-nätverket
Gå till innehåll

Länka framåt och bakåt


perqa

Rekommendera Poster

Jag har ett problem med att länka till min LIMIT så att säga...

 

 

Denna sqlkod anväder jag och den funkar toppen.

Men nu vill jag ha en länk som visar 5nya poster framåt respektive bakåt.

 

$sql="SELECT * FROM adder ORDER BY id DESC LIMIT 0,5 ";

 

Och går det att få länkarna att komma upp automatiskt?

 

Låt säga att man har 10poster och alltså har man då 2 länkar. [01] - [02]

Men om någon skulle lägga in en post till så vill jag att de hamnar en tredje länk (som då visar post 11-15). [01] - [02] - [03]

 

Hur styr man upp detta? Vad använder man sej av?

 

Tack på förhand!

 

/Per

 

"Do As I Say, Not As I Do"

 

(tryckfels-nisse)

[inlägget ändrat 2005-01-30 23:10:20 av perqa]

Länk till kommentar
Dela på andra webbplatser

Vad använder man sej av?
Matematik (de fyra räknesätten) och logik. :) Du kan se det hela som en ekvation där du behöver följande variabler:

 

$antalPoster

$posterPerSida

$antalSidor (okänd)

 

$antalSidor = $antalPoster / $posterPerSida

 

$antalPoster = $a[0] = [color="#ff0000"]mysql_fetch_row[/color]([color="#ff0000"]mysql_query[/color]("select [color="#ff0000"]count[/color](*) from adder"));

 

$posterPerSida = 5;

 

$antalSidor = [color="#ff0000"]ceil[/color]($antalPoster / $posterPerSida); [color="#006400"]//avrunda upp till närmaste heltal[/color]

 

[color="#006400"]# Skapa länkar:[/color]
[color="#0000ff"]for[/color]($i = 1; $i <= $antalSidor; $i++)
{
[color="#0000ff"]echo[/color] "<a href=\"visa.[color="#0000ff"]php[/color]?sida=".$i."\">[".$i."] - ";
}

 

[color="#006400"]# Anpassa SQL:[/color]
[color="#ff0000"]is_numeric[/color]([color="#0000ff"]$[/color]_GET['sida']) ? [color="#0000ff"]$[/color]_GET['sida'] <= 1 ? $start = 0 : $start = ([color="#0000ff"]$[/color]_GET['sida'] * $posterPerSida) : $start = 0;

$sql = "SELECT * FROM adder ORDER BY id DESC LIMIT $start, $posterPerSida";

 

 

_________

TicoRoman - Anfall är bästa försvar

 

Länk till kommentar
Dela på andra webbplatser

hrm.. ok!

 

Nu är de såhär att jag aldrig stött på celi eller is_numeric

 

Vart kan jag läsa in lite info om dom?

 

Och jag tror jag är med i själva koden men är inte med i placeringen av detta du har skrivit för mej.

 

Använder mej av en kodsnutt som jag gjort helt själv (som för en gångs skull funkar) :)

 

Ser ut såhär: (förlåt för att jag inte kan göra så den fälls in)

 

<?

if(isset($_POST['nytt'])) {

matain();

}

$länk = mysql_connect ("localhost", "","");

$sql="SELECT * FROM adder ORDER BY id DESC LIMIT 0,10 ";

$result = mysql_db_query("link","$sql");

while($rad=mysql_fetch_array($result)) {

?>

 

<?=$rad["id"]?> <a href="http://<?=$rad["url"]?>" title="<?=$rad["des"]?>">

<?=$rad["url"]?></a>

<?=$rad["datum"]?> <?=$rad["name"]?><br>

 

<?}

mysql_close ($länk);

?>

 

Vart placerar jag in det du skrev? Är det så att dom med $ skall stå vid sql satsen och if under? Eller är jag ute och cyklar?

 

 

 

/Per

 

"Do As I Say, Not As I Do"

 

[inlägget ändrat 2005-01-31 19:48:08 av perqa]

Länk till kommentar
Dela på andra webbplatser

När jag testade din länk så fick jag bara upp en rad med mina id. inga andra värden skrevs ut... vad skall man skriva i:

 

$sql_common = "FROM tabell";

 

 

/Pzz

 

"Do As I Say, Not As I Do"

 

Länk till kommentar
Dela på andra webbplatser

Nu är de såhär att jag aldrig stött på celi eller is_numeric

 

Vart kan jag läsa in lite info om dom?

I den underbara PHP-dokumentationen på http://se.php.net :)

 

is_numeric testar om ett värde är numeriskt. ceil avrundar ett tal upp till närmaste heltal.

 

http://se.php.net/manual/sv/function.is-numeric.php

http://se.php.net/manual/sv/function.ceil.php

 

Och jag tror jag är med i själva koden men är inte med i placeringen av detta du har skrivit för mej.
Något så här:

 

<?
[color="#0000ff"]if[/color]([color="#0000ff"]isset[/color]([color="#0000ff"]$[/color]_POST['nytt'])) {
matain();
}

$länk = [color="#ff0000"]mysql_connect[/color] ("localhost", "","");




$posterPerSida = 5;

[color="#006400"]# Kolla hur många poster det finns.[/color]
$antalPoster = $a[0] = [color="#ff0000"]mysql_fetch_row[/color]([color="#ff0000"]mysql_query[/color]("select [color="#ff0000"]count[/color](*) from adder"));

[color="#006400"]#Räkna ut hur många sidor det finns.[/color]
$antalSidor = [color="#ff0000"]ceil[/color]($antalPoster / $posterPerSida); 


[color="#006400"]# En (eg två) kort IF-sats som räknar ut "startvärdet".[/color]
[color="#006400"]# Jag kan förklara denna mer senare, men det är som två vanliga IF-satser...[/color]
[color="#ff0000"]is_numeric[/color]([color="#0000ff"]$[/color]_GET['sida']) ? [color="#0000ff"]$[/color]_GET['sida'] <= 1 ? $start = 0 : $start = ([color="#0000ff"]$[/color]_GET['sida'] * $posterPerSida) : $start = 0;


$sql = "SELECT * FROM adder ORDER BY id DESC LIMIT $start, $posterPerSida";



$result = [color="#ff0000"]mysql_db_query[/color]("[color="#ff0000"]link[/color]","$sql");
[color="#0000ff"]while[/color]($rad=mysql_fetch_[color="#0000ff"]array[/color]($result)) {
?>

<?=$rad["id"]?> <a href="http:[color="#006400"]//<?=$rad["url"]?>" title="<?=$rad["des"]?>">[/color]
<?=$rad["url"]?></a>
<?=$rad["datum"]?> <?=$rad["name"]?><br>

<?}



[color="#006400"]# Skapa länkar:[/color]
[color="#0000ff"]for[/color]($i = 1; $i <= $antalSidor; $i++)
{
[color="#0000ff"]echo[/color] "<a href=\"visa.[color="#0000ff"]php[/color]?sida=".$i."\">[".$i."] - ";
}



[color="#ff0000"]mysql_close[/color] ($länk);
?>

 

Jag har lite bråttom så det kan finnas placeringsfel...

 

 

_________

TicoRoman - Anfall är bästa försvar

 

Länk till kommentar
Dela på andra webbplatser

Jätte fint!

 

Enkelt att läsa och försöka sej på att själv tyda... ett problem bara:

 

De kommer inga länkar... :(

 

 

I den underbara PHP-dokumentationen på http://se.php.net :)

 

Förlåt. de vissa ju jag om. Tänkte aldrig så långt bara... :P

 

 

/Pzz

 

"Do As I Say, Not As I Do"

 

Länk till kommentar
Dela på andra webbplatser

 

 

De kommer inga länkar... :(

 

Får man fråga hur man får fram länkarna Mr. TicoRoman? :)

 

 

 

/Pzz

 

"Do As I Say, Not As I Do"

 

Länk till kommentar
Dela på andra webbplatser

De kommer inga länkar... :(

 

 

Får man fråga hur man får fram länkarna Mr. TicoRoman? :)

Ursäkta, jag har inte hunnit svara tidigare.

 

---

Det kommer inga länkar?

 

Försök att skriva ut alla variabler för att se att de inte innehåller konstiga värden.

 

Skriv t ex ut $antalPoster och $antalSidor strax efter att de initieras (skapas).

 

$antalPoster = $a[0] = [color="#ff0000"]mysql_fetch_row[/color]([color="#ff0000"]mysql_query[/color]("select [color="#ff0000"]count[/color](*) from adder"));
[color="#0000ff"]echo[/color] "<br>Antal poster: ".$antalPoster;

$antalSidor = [color="#ff0000"]ceil[/color]($antalPoster / $posterPerSida); 

[color="#0000ff"]echo[/color] "<br>Antal sidor: ".$antalPoster;

 

[color="#ff0000"]is_numeric[/color]([color="#0000ff"]$[/color]_GET['sida']) ? [color="#0000ff"]$[/color]_GET['sida'] <= 1 ? $start = 0 : $start = ([color="#0000ff"]$[/color]_GET['sida'] * $posterPerSida) : $start = 0;
[color="#0000ff"]echo[/color] "<br>Startvärde: ".$start;

 

Vilka värden får du?

 

 

_________

TicoRoman - Anfall är bästa försvar

 

 

[inlägget ändrat 2005-02-01 22:00:13 av TicoRoman]

Länk till kommentar
Dela på andra webbplatser

Vilka värden får du?

 

Antal poster: [tomt]

Antal sidor: [tomt]

Startvärde: 0 <-- NOLL

 

Detta är svaren som dyker upp över listan med poster.

 

Ursäkta, jag har inte hunnit svara tidigare

 

Behöver inte be om ursäkt.. Du är ju läraren/guden i sammanhanget :)

 

 

/Pzz

 

"Do As I Say, Not As I Do"

 

[EDIT]

 

Jag såg precis en sak....

 

[color="#0000ff"]echo[/color] "<br>Antal poster: ".$antal[b]Poster[/b];

$antalSidor = [color="#ff0000"]ceil[/color]($antalPoster / $posterPerSida); 

[color="#0000ff"]echo[/color] "<br>Antal sidor: ".$antal[b]Poster[/b];

 

Bytte till en antalSidor och en antalPoster... då fick jag:

 

 

Antal poster: [tomt]

Antal sidor: 0 <-- NOLL

Startvärde: 0 <-- NOLL

[inlägget ändrat 2005-02-01 22:58:08 av perqa]

Länk till kommentar
Dela på andra webbplatser

Antal poster: [tomt]

Antal sidor: [tomt]

Startvärde: 0 <-- NOLL

 

Jag gjorde bort mig på följande:

$antalPoster = $a[0] = [color="#ff0000"]mysql_fetch_row[/color]([color="#ff0000"]mysql_query[/color]("select [color="#ff0000"]count[/color](*) from adder"));

 

Byt ut det mot:

$a = [color="#ff0000"]mysql_fetch_row[/color]([color="#ff0000"]mysql_query[/color]("select [color="#ff0000"]count[/color](*) from adder"));
$antalPoster = $a[0];

 

Kolla om det fungerar bättre nu. I annat fall kontrollera värdena igen. :)

 

 

_________

TicoRoman - Anfall är bästa försvar

 

Länk till kommentar
Dela på andra webbplatser

ingen skillnad... de är fortfarande tomt på antalPoster.

 

 

 

ps. hur gör man en såndär ihopfälld grej när man kopierar in mycket kod? .ds

 

 

/Pzz

 

"Do As I Say, Not As I Do"

 

Länk till kommentar
Dela på andra webbplatser

ingen skillnad... de är fortfarande tomt på antalPoster.

 

Hmm.. jag måste ha missat något. Testa igen med:

$a = [color="#ff0000"]mysql_query[/color]("select [color="#ff0000"]count[/color](*) [color="#0000ff"]as[/color] 'antal' from adder") [color="#0000ff"]or[/color] [color="#0000ff"]die[/color]("<br><b>Fel i frågan:</b><br> ".[color="#ff0000"]mysql_error[/color]());
$ar = [color="#ff0000"]mysql_fetch_assoc[/color]($a) [color="#0000ff"]or[/color] [color="#0000ff"]die[/color]("<br><b>Fel i frågan 2:</b><br> ".[color="#ff0000"]mysql_error[/color]());
$antalPoster = $ar['antal'];

Om $antalPoster fortfarande inte stämmer så:

 

1. Kolla om felmeddelanden skrivs ut.

 

2. Kontrollera att SQL-frågan fungerar, t ex i phpMyAdmin om du använder denna eller liknande databasadministrationsverktyg.

 

ps. hur gör man en såndär ihopfälld grej när man kopierar in mycket kod? .ds
Här på Eforum? Använd LOG-taggar, ex:

 

[ LOG ]

massa kod

[ /LOG ]

 

Inga mellanslag mellan [ och ].

 

_________

TicoRoman - Anfall är bästa försvar

 

Länk till kommentar
Dela på andra webbplatser

1. Kolla om felmeddelanden skrivs ut.

 

Nu blev jag förvirrad... när jag la in den nya snutten så kom följande upp:

 

Fel i frågan:

No database selected

 

Men jag har ju:

 

$result = [color="#ff0000"]mysql_db_query[/color]("[color="#ff0000"]link[/color]","$sql");
[color="#0000ff"]while[/color]($rad=mysql_fetch_[color="#0000ff"]array[/color]($result)) {

 

Iallafall så ser koden ut såhär numera:

 

[log]<?

if(isset($_POST['nytt'])) {

matain();

}

 

$länk = mysql_connect ("localhost", "","");

 

$posterPerSida = 5;

 

$a = mysql_query("select count(*) as 'antal' from adder") or die("<br><b>Fel i frågan:</b><br> ".mysql_error());

$ar = mysql_fetch_assoc($a) or die("<br><b>Fel i frågan 2:</b><br> ".mysql_error());

$antalPoster = $ar['antal'];

 

$antalSidor = ceil($antalPoster / $posterPerSida);

 

echo "<br>Antal sidor: ".$antalSidor;

 

 

is_numeric($_GET['sida']) ? $_GET['sida'] <= 1 ? $start = 0 : $start = ($_GET['sida'] * $posterPerSida) : $start = 0;

echo "<br>Startvärde: ".$start;

 

$sql = "SELECT * FROM adder ORDER BY id DESC LIMIT $start, $posterPerSida";

 

$result = mysql_db_query("link","$sql");

while($rad=mysql_fetch_array($result)) {

?>

 

<?=$rad["id"]?> <a href="http://<?=$rad["url"]?>" title="<?=$rad["des"]?>">

<?=$rad["url"]?></a>

<?=$rad["datum"]?> <?=$rad["name"]?><br>

 

<?}

 

 

 

# Skapa länkar:

for($i = 1; $i <= $antalSidor; $i++)

{

echo "<a href=\"visa.php?sida=".$i."\">[".$i."] - ";

}

 

 

 

mysql_close ($länk);

?>

 

<br><br>[/log]

 

 

/Pzz

 

"Do As I Say, Not As I Do"

 

Länk till kommentar
Dela på andra webbplatser

Borde du inte byta

$länk = mysql_connect ("localhost", "","");

mot

$link = mysql_connect ("localhost", "","");

 

och

$result = mysql_db_query("link","$sql");

mot

$result = mysql_db_query($link,"$sql");

 

Länk till kommentar
Dela på andra webbplatser

Borde du inte byta

 

de kan du ju inte fråga mej :)

 

Men jag skall testa det....

 

 

/Pzz

 

"Do As I Say, Not As I Do"

 

Länk till kommentar
Dela på andra webbplatser

Hmm.. jag måste ha missat något.

 

Fanns de något lösning tror du?

Oh, nu ser jag ett fel. I din kod använder du mysql_db_query, vilket betyder att du där både anger databasnamnet och SQL-frågan. Att döma av din kod så heter din databas link?

 

Vanligtvis brukar alla anropen på en sida vara mot samma databas vilket gör att datanasnamnet inte anges vid varje enskild anrop, utan högst upp i samband med att anslutningen till databasen skapas.

 

Jag uppmärksammade inte att din kod var uppbyggd så på det sättet (inget fel alls, bara annorlunda från vad jag är van vid).

 

Byt nu slutligen ut

$a = [color="#ff0000"]mysql_query[/color]("select [color="#ff0000"]count[/color](*) [color="#0000ff"]as[/color] 'antal' from adder") [color="#0000ff"]or[/color] [color="#0000ff"]die[/color]("<br><b>Fel i frågan:</b><br> ".[color="#ff0000"]mysql_error[/color]());

till

$a = [color="#ff0000"]mysql_db_query[/color]("[color="#ff0000"]link[/color]", "select [color="#ff0000"]count[/color](*) [color="#0000ff"]as[/color] 'antal' from adder") [color="#0000ff"]or[/color] [color="#0000ff"]die[/color]("<br><b>Fel i frågan:</b><br> ".[color="#ff0000"]mysql_error[/color]());

 

Denna tråd innehåller ovanligt många slarvfel från min sida. :(

 

_________

TicoRoman - Anfall är bästa försvar

 

 

[inlägget ändrat 2005-02-02 23:46:32 av TicoRoman]

Länk till kommentar
Dela på andra webbplatser

Oh, nu ser jag ett fel. I din kod använder du mysql_db_query, vilket betyder att du där både anger databasnamnet och SQL-frågan. Att döma av din kod så heter din databas link?

 

Fungerade toppen! Nu syns länkarna och allt är frid och fröjd... förutom:

 

 

Jag har lagt upp sidan på föjande sätt:

 

Index.php

adder.php (lägg till post) look2.php (visa post)

 

I indexfilen finns två tabeller. Varav ena (add) är på vänster sida och således den andra på högersida. Dessa är inlagda med hjälp av include. Vilket nu gör att när jag skall skriva:

 

[color="#0000ff"]for[/color]($i = 1; $i <= $antalSidor; $i++)
{
[color="#0000ff"]echo[/color] "<a href=\"[b]index.[color="#0000ff"]php[/color][/b]?sida=".$i."\">[".$i."] - ";
}

 

Så stämmer detta inte. Länken är ju inte ifrån index om du förstår vad jag menar. detta gör att länken [02] och uppåt inte funkar. Har jag laggt upp sidan på ett dumt sätt? skall jag ha en skitstor indexfil istället för 3olika? Har gjort på detta sätt eftersom jag inte är så bra på php (som jag vill) och vill däför hålla isär allt så jag kan lära mej innebörden av koden och inte bara kopiera in gratisscript.

 

Hoppas du fortfarande orkar hjälpa till :)

 

 

Denna tråd innehåller ovanligt många slarvfel från min sida. :(

 

Händer även den bäste... :thumbsup:

 

 

/Pzz

 

"Do As I Say, Not As I Do"

 

Länk till kommentar
Dela på andra webbplatser

Hej,

 

upplägget av dina filer är inte dumt, om jag förstått det rätt.

 

När du skickar variabeln sida till index.php så ska den (variablen) vara även tillgänlig på alla inkluderade sidor, således bör du kunna komma åt variablen $_GET['sida'] från look2.php.

 

Vilket värde innehåller variablen $start om du skriver ut den i look2.php (efter att den skapats)? Skriv även ut $_GET['sida'] för att kontrollera att det inte är något fel med den.

 

 

 

________________________

 

 

[color="#ff0000"]is_numeric[/color]([color="#0000ff"]$[/color]_GET['sida']) ? [color="#0000ff"]$[/color]_GET['sida'] <= 1 ? $start = 0 : $start = ([color="#0000ff"]$[/color]_GET['sida'] * $posterPerSida) : $start = 0;

Ovanstående kod är kanske inte världens enklaste att förstå, så jag väljer att skriva det på ett annat enklare sätt. Jag hade även ett mindre logiskt fel.

 

 

[color="#006400"]# Om variablen $_GET['sida'] innehåller ett numeriskt värde [/color]
[color="#006400"]# (dvs sidnummer och inget annat)[/color]
[color="#0000ff"]if[/color]([color="#ff0000"]is_numeric[/color]([color="#0000ff"]$[/color]_GET['sida']))
{
[color="#006400"]# Om variabeln $_GET['sida'] är 1 eller mindre...[/color]
[color="#0000ff"]if[/color]([color="#0000ff"]$[/color]_GET['sida'] <= 1)
{
	[color="#006400"]# Sätt $start till 0 (börja visningen från början)[/color]
	$start = 0;
}
[color="#006400"]# ...annars om $_GET['sida'] är större än 1[/color]
[color="#0000ff"]else[/color]
{
	[color="#006400"]# Räkna ut från vilket inlägget visningen skall påbörjas[/color]
	$start = (([color="#0000ff"]$[/color]_GET['sida'] - 1) * $posterPerSida);
}
}
[color="#006400"]# ...annars om $_GET['sida'] inte är numeriskt[/color]
[color="#0000ff"]else[/color]
{
[color="#006400"]# Sätt $start till 0 (börja visningen från början)[/color]
$start = 0;
}

 

Den rättade kortformen bör bli:

[color="#ff0000"]is_numeric[/color]([color="#0000ff"]$[/color]_GET['sida']) ? [color="#0000ff"]$[/color]_GET['sida'] <= 1 ? $start = 0 : $start = (([color="#0000ff"]$[/color]_GET['sida'] - 1) * $posterPerSida) : $start = 0;

 

De två ovanstående är exakt likadana, men skrivna på två olika sätt.

 

_________

TicoRoman - Anfall är bästa försvar

 

 

[inlägget ändrat 2005-02-03 13:36:37 av TicoRoman]

Länk till kommentar
Dela på andra webbplatser

gjorde ett test på nätet och de gick bra fram till länkarna...

 

http://extra.blupp.se/temp/

 

där kan du se hur jag menar....

 

Vilket värde innehåller variablen $start om du skriver ut den i look2.php (efter att den skapats)?

 

När jag hade echo prylen inlagd så stod det 0 (noll) efter start värdet.

 

egentligen så borde de väl stå

 

[color="#0000ff"]echo[/color] "<a href=\"look2.[color="#0000ff"]php[/color]?sida=".$i."\">[".$i."] - ";

 

eftersom

[color="#0000ff"]$[/color]_GET['sida']

ligger i look2.php och inte i index.php.

 

så när jag länkar med index (index.php?sida...) så blir de fel...

och skriver jag look2.php?sida=... så kommer jag till fel sida, eftersom hela hemsidan är byggd i index.php..

 

Krånglade jag till de hela nu kanske?

 

 

/Pzz

 

"Do As I Say, Not As I Do"

 

Länk till kommentar
Dela på andra webbplatser

Trycker jag på [1] så får jag samma länkar som ska vara där även om man inte anger sida, dvs de första länkarna (vilket är som det ska).

 

Trycker jag på [2] så får jag tre länkar till, vid [3] blir det inga länkar, vilket beror på att jag hade ett logiskt fel i beräkningen av var visningen skall börja.

 

Se mitt föregående inlägg och kopiera den rättade koden längs ner på sidan.

 

_________

TicoRoman - Anfall är bästa försvar

 

Länk till kommentar
Dela på andra webbplatser

Du har ju så rätt... och de är så kul!

 

Vet inte vart jag skall börja tacka dej... en poäng är väl de minsta man kan göra :)

 

De fungerade nu iallfall som jag tänkt. Tack igen. :thumbsup::thumbsup:

 

 

/Pzz

 

"Do As I Say, Not As I Do"

 

Länk till kommentar
Dela på andra webbplatser

Bra att det fungerar till slut, även om det tog ett tag. Tack och eventuell poäng räcker. :)

 

_________

TicoRoman - Anfall är bästa försvar

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...