|
|
User gesamt
|
:
|
2389663
|
User online
|
:
|
3
|
|
KubaSeoTräume, PHP Forum, PHP Community and more ... MyWebsolution.de!
|
|
|
|
MyWebsolution.de Foren » PHP und MYSQL » Blätterfunktion SQL-Datenbank
Seite:
|
1
|
Posts pro Seite: 5
10
20
|
Autor
|
Thread
|
26.05.2011 13:12 Uhr
|
Blätterfunktion SQL-Datenbank
|
searchsolution
|
User
|
|
registriert
|
26.05.2011
|
wohnt in
|
|
Beiträge
|
2
|
|
Hallo!
ich bin ein Wiedereinsteiger in Sachen PHP! Hab alles zwar in der Schule gelernt, aber ewig nicht mehr angewendet. Nun wurde ich gebeten, die Wartung einer kleinen Vereinshomepage zu übernehmen, da der Ersteller aus diesem ausgetreten ist (und auch nicht mehr erreichbar ist).
nun hat mich schon ewig geärgert, dass die SQL-Gallerie ohne Thumbnails und Blätterfunktion ist/war und wollte das ändern!
Ich habe nun eine Thumbnail-Ansicht geschrieben und kann daraus auch die Bilder mit Klick darauf vergrößern, aber ich schaffe es einfach nicht, die Blätterfunktion so zu schreiben, dass es funktioniert!
Hier der Code für die Thumbnail_Übersicht, über die ich auch die ID für die Show_image.php beziehe.
Code:
<?
$dbname = "db_new";
MYSQL_CONNECT("localhost", "admin_...", "...") OR DIE("Unable to connect to database server");
@mysql_select_db("$dbname") or die("Unable to select database");
$id = $_GET["id"];
if(!is_numeric($id))
die("wrong parameter");
$query = "SELECT ID, DATE_FORMAT(Date, '%d.%m.%Y') as Date, Heading, Folder, is_listed FROM Gallery where ID=$id";
$result = MYSQL_QUERY($query);
$number = MYSQL_NUMROWS($result);
$is_listed = mysql_result($result, $i, "is_listed");
?>
<html>
<head>
<title>Gallery</title>
<link rel="stylesheet" type="text/css" href="NewsStyle2.css" />
<link rel="stylesheet" type="text/css" href="MainStyle2.css" />
</head>
<body>
<table border="0" cellspacing="0" cellpadding="0" align="center">
<tr>
<td>
<table border="0" align="center">
<tr>
<td style="height: 240px"> <br>
<br>
<table width="100%" align="center" border="0" cellspacing="0" cellpadding="0" bgcolor="#555555" height="30">
<tr>
<td height="19">
<div align="center"><font color="#555555"><b><font size="4" color="#FFFFFF" face="Arial,sans-serif"><br>
GALLERY</font></b></font></div>
</td>
</tr>
<tr>
<td height="4"></td>
</tr>
</table>
<br>
<br>
<table width="787" border="0" align="center" cellpadding="4" cellspacing="0">
<tr height="1px">
<td valign="top" width="14%" class="datecell" height="1px">
<font class="datefont"><? if($is_listed) echo mysql_result($result, $i, "Date"); else echo " "; ?></font></td>
<td valign="top" colspan="2" class="headingcell" style="height: 5px"><font class="headingfont"><? echo mysql_result($result, $i, "Heading"); ?></font></td>
</tr>
<tr>
<td valign="top" style="height: 132px">
</td>
<td valign="top" style="height: 132px" align="center">
<table border="5" style="border-color:#c0c0c0; border-style:solid;" cellspacing="0" cellpadding="0" bordercolor="#c0c0c0">
<tr>
<?
$folder = mysql_result($result, 0, "Folder");
$relative_folder = "imggal/galleries/$folder";
$dh = opendir($relative_folder);
$i = 0;
while(($file = readdir($dh)) !== false)
{
if(!is_dir("$relative_folder/$file"))
{
if($i > 0 && $i % 3 == 0)
echo "</tr><tr>"
?>
<td align="center" style="border-color:#c0c0c0; border-style:solid; border-width:5px;" width="113" height="85" style="border-width:5px;"><a href="show_image.php?id=<? echo $id; ?>&image=<? echo "$relative_folder/$file"; ?>"><img border="0" src="/imggal/thumb.aspx?maxwidth=130&maxheight=85&image=<? echo "$folder/$file"; ?>"></a></td>
<?
$i++;
}
}
while($i > 0 && $i % 3 != 0)
{
echo "<td align=\"center\" width=\"113\" height=\"85\" style=\"border-width:5px; border-color:#c0c0c0; border-style:solid;\"> </td>";
$i++;
}
closedir($dh);
?>
</tr></table>
</td>
<td align="center" width="25%" valign="middle">
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
<center><a href="gallery.php"><< back</a></center>
</body>
</html>
<?
MYSQL_CLOSE();
?>
und mein jetztiger show_image.php
Code:
<html>
<head>
<title>Gallery</title>
<link rel="stylesheet" type="text/css" href="NewsStyle2.css" />
<link rel="stylesheet" type="text/css" href="MainStyle2.css" />
</head>
<body>
<center>
<img src="<?echo $_GET["image"]; ?>" border="0"/>
<a href=...><</a>
<a href="show_gallery.php?id=<? echo $_GET["id"]; ?>"><< back</a>
<a href=...>></a>
</table>
</center>
</body>
</html>
man sieht die eingebauten Links, die aber eben noch ohne Funktion sind! Nun steh ich eben voll auf der Leitung. Ich dachte mir ja schon, die Links mit show_prv_image.php zu belegen und im show_gallery.php die nötige Abfrage zu erstellen, aber das funktioniert so auch nicht wirklich.
Auch habe ich versucht eine SQL-Abfrage mit der Abfrage der vorherigen ID in Show_image.php zu erstellen. Und zwar in dieser Weise:
PHP:
$sql = "SELECT * FROM table WHERE id < $id ORDER BY id DESC LIMIT 1";
$res = mysql_query($sql);
$pre_id = $pre_id["id"];
$sql = "SELECT * FROM table WHERE id > $id ORDER BY id LIMIT 1";
$res = mysql_query($sql);
$next_id = $next_id["id"];
und dann eben die Links mit "id" zu belegen, aber das funktioniert eben auch nicht, da ich da anscheinend nen Fehler drin habe.
Ich bin doch schon zu eingerostet!
Vielleicht kann mir ja jemand von euch helfen. Die SQL-DB sollte bestehen bleiben (nicht auf meinen Wunsch hin :angry
DAAANKE!!!
|
|
|
26.05.2011 17:32 Uhr
|
|
splasch
|
Forenposter
|
|
registriert
|
21.04.2008
|
wohnt in
|
|
Beiträge
|
67
|
|
Hier bitte:
PHP:
<?php
/**
* Klasse Seiten ausgabe
* @version 1
* @author Splasch
* Filename: page.php
*
**/
class Page
{
protected $menge; #Maximale Anzahl von Zeilen pro Seite
protected $max_page; #Gesamt Anzahl von Seiten
/**
* Klassen aufruf -
* @param Int $menge enthält einträge pro Seite
* @param Int $summe enthält gesamten Zeilenmenge
*/
public function __construct($menge=15,$summe)
{
$this->menge=$menge;
$ergebnis=ceil($summe/$menge); #Liefert die nächste ganze Zahl, die größer oder gleich ist
if ($ergebnis < 1){$ergebnis=1;}
#Prüfen
$this->max_page=$ergebnis;
}
/**
* start -
* Gibt die Start Zeile für Limit zurück
* @param $page Int Gesuchte Seite
*/
public function start($page)
{
$start = $page * $this->menge- $this->menge;
return $start;
}
/**
* getZeilen -
* Gibt die Zeilemenge zurück*
*/
public function getZeilen()
{
return $this->menge;
}
/**
* getPage -
* Gibt die Zeilemenge zurück*
*/
public function getPage()
{
return $this->max_page;
}
/**
* getLink -
* Gibt die Zeilemenge zurück*
*/
public function getLink($page,$pfad)
{
$link="";
for($i=1; $i <= $this->max_page; $i++)
{
if($page == $i){$link.="<a >$i</a> ";}
else
{$link.="<a href=\"".$pfad."page=$i\">$i</a> ";}
}
return $link;
}
}
PHP:
<?
if (isset($get_post["page"]))$seite = $get_post["page"]; //Abfrage auf welcher Seite man ist
if(!isset($seite)){$seite = 1;} //Wenn man keine Seite angegeben hat, ist man automatisch auf Seite 1
$sql="SELECT
username, lvl, insgexp,status
FROM accounts,game_char
WHERE user_id=f_userid";
$result = mysql_query($sql);
$menge = mysql_num_rows($result);
$page= new Page(18,$menge);
$runde = $page->start($seite);
$gilden = "";
$abfrage = "SELECT
username,gild_name,lvl,insgexp,status,rasse
FROM
accounts
LEFT JOIN gilden_user ON accounts.user_id = gilden_user.f_userid
LEFT JOIN gilden ON gilden_user.f_gildenid=gilden.gilden_id,
game_char
WHERE
user_id=game_char.f_userid
ORDER BY insgexp DESC LIMIT ".$page->start($seite).",".$page->getZeilen();
#echo $abfrage;
$ergebnis = mysql_query($abfrage);
// unsw.
Dieser Beitrag wurde am 26.05.2011 um 17:37:48 Uhr von splasch zum 2. Mal editiert.
|
|
|
31.05.2011 18:33 Uhr
|
|
searchsolution
|
User
|
|
registriert
|
26.05.2011
|
wohnt in
|
|
Beiträge
|
2
|
|
irgendwie schaff ich es nicht, das in meine Gallery so einzubauen, dass es funktioniert. Bin anscheinend zu eingerostet und zu blöd! *grr*
|
|
|
31.05.2011 19:55 Uhr
|
RE:
|
splasch
|
Forenposter
|
|
registriert
|
21.04.2008
|
wohnt in
|
|
Beiträge
|
67
|
|
Zitat: searchsolution
irgendwie schaff ich es nicht, das in meine Gallery so einzubauen, dass es funktioniert. Bin anscheinend zu eingerostet und zu blöd! *grr*
Es ist nix anderes als eine kleine Mathematische Rechnung. Die Anzahl der Datensätze die Pro Seite ausgeben werden sollen. Ergeben die Maximale Seiten Anzahl.
Beispiel 10 Sätze Pro Seiten bei 100 Datenbank einträgen.
Um nun die 5 Seite auszugeben muß man nur noch multiplizieren um zu wissen bei welchen Datensatz die Ausgabe beginnen soll. Also 10*5 = 50 da wir nun aber auch die 10 Seiten ausgeben wollen müssen wird noch davon die 10 Sätze davon abziehen 50-10 = 40
Also beginnt unsere Datensatz ausgabe beim 40 Datensatz für die 5 Seite.
Nun brauchen wir nur noch den Sql befehl an die Datenbank übergeben und mittel Limits das Ergebnis auf 10 Datensätze begrenzen.
Limit Startdatensatz , Anzahl der Datensätze
Daher in unseren fall für die 5 Seite bei 100 Datensätzen limit 40,10
Damit diese Berechnung für jede Seite abgefragt werden kann steht dir die gepostete Klasse zu verfügung.
Sie kann dir auch noch die Link zu allen Seiten ausgeben die Methode dazu lautet: getLink und erwartet 2 Parameter.
Mfg Splasch
|
|
|
Seite:
|
1
|
|
|
Powered by
|
Pascal Landau
|
© 2006
|
MyWebsolution.de
|
Designed by
|
Pascal Landau
|
© 2006
|
MyWebsolution.de
|
|
|
|
|
|