26. juni 2001 - 00:23
Der er
9 kommentarer og
2 løsninger
vis indlæg ~ php
jeg har en database der er delt op således:
tabellen hedder dagbog.
| id | land | byen | overskrift | tekst | ip | dato | tid |
Det der skal vises på den ene side er:
land byen dato
overskrift
Teksten
Det skal se ud som det script på webcafe (gæstebogen).
det vil sige man skal kunne bladre frem og tilbage.
der skal kun være et indlæg på hver side.
og der skal være et link til \"den andenside\".
På den anden side, skal alle indlæg vises således:
dato overskrift land by
og man skal naturligvis kunne trykke på teksten og komme til den første side, hvor man så kan bladre frem og tilbage så dato\'erne passer.
Jeg ved det er en forholdvis stor opgave, derfor point\'ene.
/A
Først skal du hive id med ind på siden, så laver du et næstelink, hvor du sender id\'et med til scriptet.
mysql_query(\"select * from din_tabel where id=\'$id\'\");
Nor at lave næste linket skal du gøre sådan, og for at komme til den forrige side, kan du så bruge.
$forrig_id = $id - 1;
echo \"<a href=\\\"dit_script.php?id=$forrig_id\\\">
#################################################
for at lave det sådan at når brugeren er på det sidste indlæg skal du gøre således.
$resultat = mysql_query(\"select * from din_tabel\");
while($input = mysql_num_rows($resultat)) {
if($input < $id) {
$id++;
print \"<a href=\\\"dit_script.php?id=$id\\\">
}
}
Så skulle den meget gerne stoppe ved det sidste indlæg, sådan at brugeren ikke kan komme videre.
<?php
if(!$start_nr || $start_nr < 0) {
$start_nr = 0;
}
function top($titel) {
$html = \"<html><head><title>Dagbog</title><link rel=\\\"stylesheet\\\" type=\\\"text/css\\\" href=\\\"admin/gbog-ting/stil.css\\\"></head><body>
<h2>$titel</h2>\";
return $html;(\'<p align=\"center\"><img border=\"0\" src=\"../pictures/titel.gif\" width=\"292\" height=\"50\"></p>\');
}
$sql = \"select id, land, byen, overskrift, tekst, ip, date_format(dato, \'%y-%m-%d\'), date_format(dato, \'%h:%m:%s\') as tiden, besked from dagbog order by dato desc limit $start_nr, $antal_ad_gangen\";
$taeller_sql = \"select count(*) as antal from dagbog\";
function aabn_forbindelse_og_vaelgdb() {
$server = \"xxxxx\";
$bruger = \"xxxxx\";
$kodeord = \"xxxxx\";
$database = \"xxxxx\";
if (!mysql_connect(\"$server\",\"$bruger\",\"$kodeord\")) {
udskriv_fejl(\"Kunne ikke oprette en forbindelse til MySQL.\");
}
if(!mysql_select_db(\"$database\")) {
udskriv_fejl(\"Kunne ikke vælge databasen: $database\");
}
}
function sql_spoerg_og_faa_svar($query) {
$resultat = mysql_query($query);
if(!$resultat) {
udskriv_fejl(\"Kunne ikke udføre: <em>$query</em>\");
}
while($raekke = mysql_fetch_array($resultat)) {
$resultat_array[] = $raekke;
}
return $resultat_array;
}
function sql_spoerg($query) {
$resultat = mysql_query($query);
if(!$resultat) {
udskriv_fejl(\"Kunne ikke udføre: <em>$query</em>\");
}
}
function luk_forbindelse() {
if(!mysql_close()) {
udskriv_fejl(\"Kunne ikke lukke forbindelsen til MySQL!\");
}
}
function udskriv_fejl($fejl) {
echo \"<p>$fejl\";
if ($mysql_fejl = mysql_error()) {
echo \"<br>Fejlen er: <em>$mysql_fejl</em>\";
}
exit;
}
aabn_forbindelse_og_vaelgdb();
$resultat = sql_spoerg_og_faa_svar($sql);
$optaelling = sql_spoerg_og_faa_svar($taeller_sql);
luk_forbindelse();
#
# Så går vi igang med at bygge navigationen
# Først bruger vi extract til at få $antal ud til behandling.
# Vi looper ikke igennem resultatet, da vi ved der kun er een række,
# så vi tilgår den direkte ved $optaelling[0].
#
extract($optaelling[0]);
#
# Skal der laves et links til flere indlæg?
#
if($antal > ($start_nr + $antal_ad_gangen)) {
$naeste_start_nr = $start_nr + $antal_ad_gangen;
$naeste_nav = \"<a href=\\\"$PHP_SELF?start_nr=$naeste_start_nr\\\">Næste</a>\";
} else {
$naeste_nav = \"<span class=\\\"doedt-link\\\">Næste</span>\";
}
#
# Skal der laves link til forrige indlæg?
#
if($start_nr > 0 && ($start_nr - $antal_ad_gangen) < $antal) {
$forrige_start_nr = $start_nr - $antal_ad_gangen;
$forrige_nav = \"<a href=\\\"$PHP_SELF?start_nr=$forrige_start_nr\\\">Forrige</a>\";
} else {
$forrige_nav = \"<span class=\\\"doedt-link\\\">Forrige</span>\";
}
#
# Her sætter vi det hele sammen i en tabel vi kan bruge til at sætte ind på siden.
#
$nav = \"<center><table width=\\\"$tabel_bredde\\\" border=\\\"0\\\" cellpadding=\\\"5\\\" cellspacing=\\\"0\\\">
<tr><td align=\\\"left\\\" width=\\\"33%\\\">$forrige_nav</td>
<td align=\\\"center\\\" width=\\\"34%\\\"></td>
<td align=\\\"right\\\" align=\\\"33%\\\">$naeste_nav</td></tr>
</table></center>\";
#
# Og skriver tabellen ud med det samme:
#
echo \"$nav <p />\";
#
# Her begynder det egentlig interesante - vi looper os igennem de enkelte indlæg
# og skriver dem ud til skærmen.
#
# Hvis forespørgslen ikke har returneret nogle resultater, springer vi alt dette over.
#
if(count($resultat) < 1) {
echo \"<center>Der er ingen indlæg i dagbogen</center>\";
} else {
for($i=0;$i<count($resultat);$i++) {
#
# Med extract får vi smidt værdierne i variabler
#
extract($resultat[$i]);
#
# Vi brugte addslashes() da vi lagde tingene i databasen så for at få det til
# at se læseligt ud, fjerne vi dem igen med stripslashes()
#
$besked = stripslashes($besked);
$navn = stripslashes($navn);
$epost = stripslashes($epost);
#
# Hvis der ikke må bruges HTML fjerner vi lige alle tags med htmlentities()
#
if($html_p != \"t\") {
$navn = htmlentities($navn);
$epost = htmlentities($epost);
$besked = htmlentities($besked);
}
#
# For at vi får linjeskift i HTML også, bruger vi nl2br til at skifte alle \\n
# ud med <br>
$besked = nl2br($besked);
#
# Vi laver et simpelt check: Hvis eposten indeholder et snabel-a, så laver
# vi det til en mailto:
#
# Dette er dog ingen garanti for, at eposten er gyldig.
#
if(ereg(\"@\", $epost)) {
$navn = \"<a href=\\\"mailto:$epost\\\">$navn</a>\";
}
#
# Så er alt klart til browseren og vi spytter en tabel ud med denne besked.
# Hvis du vil ændre markant i udseendet af din gæstebog, så er det
# i blokken herunder det foregår. Du skal bare beholde de givne navne i
# <input>-tagsene.
#
# Vi hopper lige ud af PHP-mode lidt, så vi er fri for at escape alle gåseøjnene.
#
?>
<center>
<table width=\"<?php echo $tabel_bredde; ?>\" cellpadding=\"1\" cellspacing=\"0\" border=\"0\">
<tr><td class=\"gbog-baggrund\" width=\"100%\" align=\"center\">
<table border=\"0\" cellpadding=\"8\" cellspacing=\"0\" width=\"100%\">
<tr><td class=\"gbog-top\" width=\"100%\">Skrevet af: <strong><?php echo $land; ?></strong>, <?php echo $dato; ?></td></tr>
</table>
</td></tr><tr><td class=\"gbog-baggrund\" align=\"center\" width=\"100%\">
<table border=\"0\" cellpadding=\"8\" cellspacing=\"0\" width=\"100%\">
<tr><td class=\"gbog-bund\" width=\"100%\">
<?php echo $tekst; ?>
<p align=\"right\"></p></td></tr>
</table>
</td></tr>
</table><p />
</center>
<?php
#
# Vi hopper tilbage i PHP-mode.
#
# Her slutter loopet og PHP springer tilbage og går hele turen igennem med den næste
# besked. Når der ikke er flere indlæg i denne omgang går PHP videre.
#
}
#
# Endelig skriver vi frem- og tilbage-links på i bunden af siden også.
#
echo $nav;
#
# Her slutter if-else-konstruktionen der fanger, om der er nogle indlæg overhovedet.
#
}
#
# Og spytter den sidste stump HTML ud.
#
function bund() {
$html = \"</body></html>\";
return $html;
}
?>
-------------------------------------
så er jeg selv gådet igang!!! men jeg støder på nogle problemer ved denne:
$sql = \"select id, land, byen, overskrift, tekst, ip, date_format(dato, \'%y-%m-%d\'), date_format(dato, \'%h:%m:%s\') as tiden, besked from dagbog order by dato desc limit $start_nr, $antal_ad_gangen\";
$taeller_sql = \"select count(*) as antal from dagbog\";
kan en eller anden hjælpe, p.s. det er ikke færhvis jeg skal give 550 når jeg selv er gådet igang, men giver gerne 250 point til den der kan hjælpe mig til at mit ejet script kommer til at virke*
/A
26. juni 2001 - 19:46
#11
den med tiden, det ville være mere smart hvis du bare brugte dato som \"text\" i mysql databasen, og så kan du bruge php indbyggede time(): \"mener den hedder time\" og det kan du så formatere med date(\"d-m-Y - h-m-s\");
- The Speaker.