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

Skapa länkar utifrån formulär

Rekommendera Poster

Hur ska jag göra för att skapa en länk till ett element i en databas efter att jag lagt till den databasen.

 

Det jag vill är att när man visar databasen så ska varje element vara länkat till en ny sida.

 

Varje nytt element får ju ett nytt id nummer, vet bara inte hur jag ska programmera.

 

Någon som förstår vad jag menar?

 

 

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

ok.. börjar om.

 

Jag vill att när allt innehåll i databasen visas på sidan visa.php ska de se ut ungefär såhär:

 

detta är då min tabell där innehållet visas.

 

| namn | färg | id |

|-------------------------|

|mathias | gul | 1 |

|Kurt | blå | 2 |

|anna | svart | 3 |

 

sedan ska man kunna klicka på tex kurt o få upp en ny sida där det finns lite mer detaljer om kurt.

 

det jag nu vill är att länken som ska skapas till kurts nya sida ska generas automatisk, alltså jag ska inte behöva gå in manuellt o skriva att att kurts länk är visa.php?id=2.. (ungefär)

 

så koden borde ju fungera så att att när man läser in innehållet i databasen så ska ju länk-koden öka idnumret med 1.

 

 

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Ok, inga problem.

 

Låt oss säga att din databastabell är uppbyggd såhär:

 

- ID
- Name
- Color
- Age
- City
- ExtraInformation

 

Då hämtar du helt enkelt ut fälten ID, Name och Color ifrån tabellen på sidan där du listar personerna. Koden skulle se ut ungefär såhär:

 

<?[color="#0000ff"]php[/color]
$sql = "SELECT ID, Name, Color FROM tblPeople";
$result = [color="#ff0000"]mysql_query[/color]($sql);
[color="#0000ff"]while[/color] ($row = mysql_fetch_[color="#0000ff"]array[/color]($result))
{
[color="#0000ff"]echo[/color]("<a href=\"detaljer.[color="#0000ff"]php[/color]?id=" . $row[0] . "\">" . $row[1] . "</a> - " . $row[2] . "<br>");
}
?>

 

Sedan gör du en annan sida där du visar detaljerna, som jag döpt til "detaljer.php". Koden i det dokumentet skulle se ut ungefär såhär:

 

<?[color="#0000ff"]php[/color]
$sql = "SELECT Name, Color, Age, City, ExtraInformation FROM tblPeople WHERE ID = " . [color="#0000ff"]$[/color]_GET['id'];
$result = [color="#ff0000"]mysql_query[/color]($sql);
$row = mysql_fetch_[color="#0000ff"]array[/color]($result)
[color="#0000ff"]echo[/color]("Namn: " . $row[0] . "<br>");
[color="#0000ff"]echo[/color]("Färg: " . $row[1] . "<br>");
[color="#0000ff"]echo[/color]("Ålder: " . $row[2] . "<br>");
[color="#0000ff"]echo[/color]("Stad: " . $row[3] . "<br>");
[color="#0000ff"]echo[/color]("Övrigt: " . $row[4] . "<br>");
?>

 

Förutom min kod behöver du givetvis kod för att ansluta till din mysql databas. Jag antar att du redan har den, men i annat fall kan den se ut såhär:

 

<?[color="#0000ff"]php[/color]
$db = [color="#ff0000"]mysql_connect[/color]("localhost", "root");
[color="#ff0000"]mysql_select_db[/color]("minDatabas", $db);
?>

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

de funkar fin fint..

bara en fråga till, om jag bara vill att den ska skriva ut 5 personer åt gången, hur gör jag då?

 

Så om det finns 10 personer i db, så skriver den ut 5st a 2 sidor

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Det är faktiskt lite klurigt att göra det, om man inte har aningen högre kunskaper i php...

 

Men vi kan ju göra ett försök.

 

 

I MySQL finns en funktion som kallas LIMIT. Den används aningen genom att helt enkelt begränsa antalet resultat, då skriver man LIMIT 10 (där 10 är hur många rader du max vill returnera). Eller så skriver man 2 siffor efter, och på så sätt talar om hur många rader som max får returneras, men också vilken rad den ska börja på.

 

$sql = "SELECT Name, Color, Age, City, ExtraInformation FROM tblPeople WHERE ID = " . [color="#0000ff"]$[/color]_GET['id'] . " LIMIT 0, 5";

 

<-- Hade alltså gett de 5 första i tabellen.

 

$sql = "SELECT Name, Color, Age, City, ExtraInformation FROM tblPeople WHERE ID = " . [color="#0000ff"]$[/color]_GET['id'] . " LIMIT 5, 5";

 

<-- Hade alltså gett de 5 nästa i tabellen.

 

Den fösta siffran anger alltså på vilken rad den ska börja, och den andra siffran anger hur många rader som max får returneras.

 

---

 

Nu vet du hur sqlen fungerar, nu är det "bara" phpn.

 

I länken till sidan får du skicka med ett sidnummer ockå. Och sedan i sqlen kolla sidnumret, multiplicera med antalet rader per sida, och sedan plocka ur rätt rader.

 

Något i stil med...

[color="#0000ff"]if[/color] ([color="#0000ff"]$[/color]_GET['page'] != null)
{
   $sidNr = [color="#0000ff"]$[/color]_GET['page'];
}
[color="#0000ff"]else[/color]
{
   $sidNr = 0;
}
$sql = "SELECT Name, Color, Age, City, ExtraInformation FROM tblPeople WHERE ID = " . [color="#0000ff"]$[/color]_GET['id'] . " LIMIT " . ($sidNr*5) . ", 5";

 

Sedan får du göra "Nästa Sida"-knappar ungefär såhär:

 

<a href="sida.[color="#0000ff"]php[/color]?page=<?=($sidNr+1)?>">Nästa Sida</a>

 

---

 

Bara å fråga om det är något du inte förstår.

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

de blir något fel i arrayen när jag lägger till det där med sidnumren.

 

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in ---------\listor.php on line 51

 

EDIT:

 

Löste de själv :)

[inlägget ändrat 2005-10-14 15:35:30 av Matte84]

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

kommer en ny fråga istället :)

 

finns det nått kommande typ EOT (end of table)

så man vet när man kommit till sista personen i databasen.

 

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Nä - det finns det inte.

Behöver du ha den infon för att se om du ska skriva ut "Nästa Sida" eller?

 

Du kan istället göra såhär:

 

$sql = "SELECT [color="#ff0000"]count[/color](*) FROM tblPeople";
$result = [color="#ff0000"]mysql_query[/color]($sql);
$antalRaderIDatabasen = [color="#ff0000"]mysql_result[/color]($result, 0);

[color="#0000ff"]if[/color] (([color="#0000ff"]$[/color]_GET['page'] * $AntalBilderPerSida) < $antalRaderIDatabasen)
{
 [color="#0000ff"]echo[/color]("<a href=\"sida.[color="#0000ff"]php[/color]?page=" . ($sidNr+1) . "\">Nästa Sida</a>");
}

 

Understand..?

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Om det bara är en "nästa sida" man vill åstadkomma är det ofta smidigare att be om en extra rad, dvs om man ska visa 20 resultat åt gången och man faktiskt fick 21 poster tillbaka så skriver man ut en "nästa sida".

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Rätt smart, tänkte jag faktiskt inte själv på.

Fast när jag har gjort "nästa sida" sidor, så har jag alltid gjort med nummer istället för "nästa" resp. "föregående".

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Fast när jag har gjort "nästa sida" sidor, så har jag alltid gjort med nummer istället för "nästa" resp. "föregående".

Ur användarsynpunkt tycker jag att det bästa är att göra en kombination av de två (typ som Google har gjort). Viktigt tycker jag också är att se till att knapparna/länkarna Föregående/Nästa alltid placeras på exakt samma ställe efter bläddring för att slippa hafsa runt med musen när man vill snabbläddra mellan sidor.

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

jag gjorde såhär:

 

 

if ($antalRaderIDatabasen < 9)

{

print("<table border=0 cellpadding=2 cellspacing=2 bordercolor=000000>");

print("<div align=center><< | < | > | >></div>");

}

else if ($_GET['page']==0)

{

print("<table border=0 cellpadding=2 cellspacing=2 bordercolor=000000>");

print("<div align=center><< | < | <a href=\"listor.php?page=" . ($sidNr+1) . "\">></a> | <a href=\"listor.php?page=" . ($slut) . "\">>></a></div>");

}

else if (($_GET['page'] * 16) < $antalRaderIDatabasen)

{

print("<table border=0 cellpadding=2 cellspacing=2 bordercolor=000000>");

print("<div align=center><a href=\"listor.php?page=" . 0 . "\"><<</a> | <a href=\"listor.php?page=" . ($sidNr-1) . "\"><</a> | <a href=\"listor.php?page=" . ($sidNr+1) . "\">></a> | <a href=\"listor.php?page=" . ($slut) . "\">>></a></div>");

}

else if (($_GET['page'] * 16) >= $antalRaderIDatabasen)

{

print("<table border=0 cellpadding=2 cellspacing=2 bordercolor=000000>");

print("<div align=center><a href=\"listor.php?page=" . 0 . "\"><<</a> | <a href=\"listor.php?page=" . ($sidNr-1) . "\"><</a> | > | >></div>");

}

 

 

vet inte varför de funkar, men det gör det iaf :)

speciellt inte varför jag måste ta ggr 16 osv

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Ur användarsynpunkt tycker jag att det bästa är att göra en kombination av de två (typ som Google har gjort).

Det beror ju oftast på datat... Jag skulle inte blivit gladare om t.ex eforum haft 1-100000 längst ner på förstasidan, det är lixom ingen som vill hoppa till sida 25 ändå.

 

Edit: Stavfle

[inlägget ändrat 2005-10-16 16:58:31 av fhe]

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
jag gjorde såhär:

Men enda invändning är att det är fult och onödigt att göra html till print-rader, dessutom blir det svårt att underhålla i längden.

 

När allt du gör är att skjuta in ett litet "($sidNr+1)" här och var kan du lika gärna göra html som html och lägga till det som är uträknat med ett <?=($sidNr+1)?>.

 

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

ok.. tack för tipset

 

om man använder $_Get['id'] funktionen, så hämtar den ju id numret från senast medskickade sida.. (om jag förstått det hela rätt)

 

men sen om jag vill skicka samma id till en sida till hur gör jag då..

för på sida2 så kan man väl inte anv get, eller?

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
om man använder $_Get['id'] funktionen, så hämtar den ju id numret från senast medskickade sida.. (om jag förstått det hela rätt)

För det första är $_GET['id'] inte en funktion och för det andra stavas det med stora bokstäver. Utöver det tror jag inte du har förstått det rätt. i $_GET['id'] ligger den del av den sk Query-strängen som heter id=. Det innebär att om någon surfar till din sida med genom att adressen "sida.php?id=1" så kommer $_GET['id'] att innehålla 1 och om någon surfar dit med adressen "sida.php?id=kalle" så kommer $_GET['id'] att innehålla "kalle", det har alltså ingenting med senaste sidan att göra.

 

men sen om jag vill skicka samma id till en sida till hur gör jag då..

för på sida2 så kan man väl inte anv get, eller?

Vill du att samma id ska komma på query-strängen när någon trycker på länken för att gå till nästa sida så talar du helt enkelt om för länken att "id" ska ha samma värde.

T.ex så här:

<a href="sida.php?id=<?=$_GET['id']?>&page=2">Sida två</a>

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

nä, de e inte riktigt så jag tänkt att det ska funka..

ska försöka förklara :

 

temp.php:

här hämtar jag infon som finns på plats "id" som jag får ifrån föregående sida (listor.php?id="id")

 

i temp.php finns även en iframe som ska hämta info från samma "id".

 

men iframen kommer väl inte åt lista.php?id="id" med hjälp av GET.

hur ska jag göra för att skicka "id" till två sidor ?

 

 

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
men iframen kommer väl inte åt lista.php?id="id" med hjälp av GET.

hur ska jag göra för att skicka "id" till två sidor ?

Genom att skicka id:t med urlen som du pekar iframen på, enda skillnaden mot en länk är att en länk måste man trycka på för att den ska laddas, en frame laddas automaiskt som en del av sidan.

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

måste bara börja med o tacka så jättemycket för hjälpen från er alla!

 

men måste terrorisera er igen, jag har klipp o klistrat en röstningsfunktion från http://www.azouris.se/azouris/index.php?page=script.

 

funkar fint förrutom att koden så att man inte kan rösta mer en gång inte funkar.

 

if (isset($_COOKIE['vote'])) {v_stat(); exit();}

 

if(isset($_POST["submit"])) {

setcookie('vote',"vote",time()+36000); <------- line 19

vote_add($voteid,$_POST["r"]);

v_stat();

}else{

 

 

men jag får detta felmeddelandet:

 

Warning: Cannot modify header information - headers already sent by (output started at c:\inetpub\wwwroot\olklubben_php\vote_index.php:1) in c:\inetpub\wwwroot\olklubben_php\vote_index.php on line 19

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
men måste terrorisera er igen, jag har klipp o klistrat en röstningsfunktion från http://www.azouris.se/azouris/index.php?page=script.
Om det är en ny fråga (handlar inte om ursprungsproblemet), så får du ställa den i en ny tråd. Annars, ignorera detta meddelande.

 

/Moderator för PHP

 

 

[inlägget ändrat 2005-10-17 06:02:45 av TicoRoman]

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Skapa ett nytt konto på vårt forum. Det är lätt!

Registrera ett nytt konto

Logga in

Redan medlem? Logga in här.

Logga in nu



×
×
  • Skapa nytt...