Tabelle mit n Einträgen und möchte auf jeder Seite m anzeigen.
Sascha
- php
Hallo,
ich habe ein Problem, bei dem ich nicht weiterkomme.
Ich möchte sozusagen eine Blätterfunktion (x Einträge pro Seite) gemäss Beispiel der FAQ:
14.16 Ich habe eine Tabelle mit n Einträgen und möchte auf jeder Seite m davon anzeigen.
http://www.koehntopp.de/php/faq-database_mysql.html#database_mysql-16
in meinem Webprojekt realisieren.
Ich habe diese Funktion in meine Configdatei reingeschrieben. Sobald ich diese Funktion in meiner Config drin habe, lässt sich meine Startdatei nicht mehr fehlerfrei ausführen. Der Fehler muß also in dieser Funktion meines Wissen nach drin sein, denn sobald die Funktion draussen ist, funktioniert alles bestens.
Kann mir jemand sagen, was an meiner nachfolgenden Funktion falsch ist? Ich habe mich an das Beispiel aus der FAQ gehalten und es an mein Script entsprechend anzupassen.
//Blätterfunktion Test Beginn
function showonelinktest($id,$schriftfarbe,$schriftart,$h_titel,$h_beschr) {
// Datendefinition für Datenbankverbindung.
$table = "downloadprogramme"; // Der Name der Datenbanktabelle
// Datendefinition für die Clientausgabe
$start = (isset($start)) ? abs((int)$start) : 0;
$limit = 5; // Datensätze pro Ausgabeseite
// Feststellen der Anzahl der verfügbaren Datensätze.
$resultID = @mysql_query("SELECT COUNT(ID) FROM ".$table);
$total = @mysql_result($resultID,0);
// Ggf. $start korrigieren (falls Parameter in
// der URL manipuliert wurde)
$start = ($start >= $total) ? $total - $limit : $start;
// Datenbankabfrage ausführen.
$abfrage = "SELECT ID,* FROM ".$table
." LIMIT ".$start.",".$limit;
$resultID = @mysql_query($abfrage);
list($id,$titel,$beschreibung,$preis,$braucht,$hits,$bb,$neu,$datum,$bereich
,$hplink,$programmlink,$screenshotlink,$emaillink,$sprache,$lizenz,$gross,$m
asseinheit,$kurzbeschreibung) = mysql_fetch_row($abfrage);
if ($neu=='5') {
$dead = "#C67878";
} else {
$dead = "#CDCDCD";
}
$hplink = urlencode($hplink);
$programmlink = urlencode($programmlink);
$screenshotlink = urlencode($screenshotlink);
$datum_array = split("-","$datum");
$datum = "$datum_array[2].$datum_array[1].$datum_array[0] ";
if ($bb=='') {
$bb = "-";
}
// Ergebnisse lesen und an den Client ausgeben
while ($data = mysql_fetch_array($resultID))
{
echo "
<table border rules=groups width="500" border="1" cellpadding="2"
cellspacing="1">
<tr>
<td colspan="2" align="left" nowrap bgcolor="$h_titel">
<font face="$schriftart" size="2"> <b>";
echo '<a href="index.php4?session=dl&id='. urlencode ($id) . '">' .
htmlspecialchars ($titel) . '</a>';
echo "</b></font>
</td>
</tr>
<tr>
<td bgcolor="$h_beschr">
<div align="left"><font face="$schriftart"
size="1">Aufgenommen am: $datum </font></div>
</td>
</tr>
<tr>
<td bgcolor="#FFFFFF" valign="top">
<div align=justify><font face="$schriftart"
size="2">Kurzbeschreibung:<br><br>$kurzbeschreibung</font></div>
</td>
</tr>
<tr>
<td bgcolor="$h_beschr" height="20">
<div align="left"> <img src="$sprache" alt="Sprache"
border="0"> <font face="$schriftart"
size="1">Lizenz: $lizenz </font>
<font face="$schriftart" size="1">System-Voraussetzung:
$braucht</font></div>
</td>
</tr>
<tr>
<td bgcolor="$h_titel">
<!--<div align="left"><font face="$schriftart" size="2"> <a
href="deadlink.php4?id=$id&bereich=$bereich"><font
color="#FF0000">[Defekter Link?]</font></a> </font></div>-->
<div align="left"><font face="$schriftart" size="2"> Dateigröße:
$gross $masseinheit </font> | <font face="$schriftart"
size="2">Hits: $hits | Vote: $bb </font></div>
</td>
</tr>
</table> <br><br> ";
}
// Zurück- und Vorblättern
if ($start > 0)
{
$newStart = ($start - $limit < 0) ? 0 : ($start-$limit);
echo "<a href=".$PHP_SELF."?start=".$newStart
."><< zurück</a>";
}
if ($start + $limit < $total)
{
$newStart = $start + $limit;
echo " <a href=".$PHP_SELF."?start=".$newStart
.">vor >></a>";
}
//Blätterfunktion Test Ende
Über eine Hilfe wäre ich sehr dankbar. Im voraus besten Dank.
Mfg.
Sascha
Hi Sascha,
Ich habe diese Funktion in meine Configdatei reingeschrieben. Sobald ich diese Funktion in meiner Config drin habe, lässt sich meine Startdatei nicht mehr fehlerfrei ausführen. Der Fehler muß also in dieser Funktion meines Wissen nach drin sein, denn sobald die Funktion draussen ist, funktioniert alles bestens.
Es wäre hilfreich zu wissen welche Fehler ausgetreten sind - dann wird die Fehlersuche gleich um einiges einfacher, aber mal von kurz drüberfliegen:
// Datenbankabfrage ausführen.
$abfrage = "SELECT ID,* FROM ".$table
." LIMIT ".$start.",".$limit;
$resultID = @mysql_query($abfrage);
$abfrage enthält nur den String für die eigenliche Abfrage, erst $resultID führt diese dann durch, daher kann
list($id,$titel,$beschreibung,$preis,$braucht,$hits,$bb,$neu,$datum,$bereich
,$hplink,$programmlink,$screenshotlink,$emaillink,$sprache,$lizenz,$gross,$m
asseinheit,$kurzbeschreibung) = mysql_fetch_row($abfrage);
auf keinen Fall funktionieren, da wie gesagt $abfrage nur den String deiner Abfrage enthält.
// Ergebnisse lesen und an den Client ausgeben
while ($data = mysql_fetch_array($resultID))
{
erst hier werden die Ergebnisse wirklich ausgelesen ($resultID)
htmlspecialchars ($titel) . '</a>';
daher können deine Ausgaben in dieser Form auch nicht funktionieren - richtiger wäre hier statt $titel -> $data[Titel] (falls die Spalte in der Datenbank wirklich _Titel_ heisst)
Wie gesagt, am besten mal die Fehlermeldung oder das Problem schildern, dann wirds einfacher.
liebe gruesse aus oesterreich
Martin
Hallo Martin,
erstmal besten Dank für deine Antwort im Forum von SELFHTML.
Nun habe ich mal mein Script verändert aufgrund deiner Antwort und es sieht
nun so aus:
//Blätterfunktion Test Beginn
//diese Funktion ist eingebunden in config.php4
function showonelinktest($id,$schriftfarbe,$schriftart,$h_titel,$h_beschr) {
// Datendefinition für Datenbankverbindung.
$table = "downloadprogramme"; // Der Name der Datenbanktabelle
// Datendefinition für die Clientausgabe
$start = (isset($start)) ? abs((int)$start) : 0;
$limit = 5; // Datensätze pro Ausgabeseite
// Feststellen der Anzahl der verfügbaren Datensätze.
$resultID = @mysql_query("SELECT COUNT(ID) FROM ".$table);
$total = @mysql_result($resultID,0);
// Ggf. $start korrigieren (falls Parameter in
// der URL manipuliert wurde)
$start = ($start >= $total) ? $total - $limit : $start;
// Datenbankabfrage ausführen.
$abfrage = "SELECT ID,* FROM ".$table
." LIMIT ".$start.",".$limit;
$resultID = @mysql_query($abfrage);
if ($neu=='5') {
$dead = "#C67878";
} else {
$dead = "#CDCDCD";
}
$hplink = urlencode($hplink);
$programmlink = urlencode($programmlink);
$screenshotlink = urlencode($screenshotlink);
$datum_array = split("-","$datum");
$datum = "$datum_array[2].$datum_array[1].$datum_array[0] ";
if ($bb=='') {
$bb = "-";
}
// Ergebnisse lesen und an den Client ausgeben
while ($data = mysql_fetch_array($resultID))
{
echo "
<table border rules=groups width="500" border="1" cellpadding="2"
cellspacing="1">
<tr>
<td colspan="2" align="left" nowrap bgcolor="$h_titel">
<font face="$schriftart" size="2"> <b>";
echo '<a href="index.php4?session=dl&id='. urlencode $data[id] . '">' .
htmlspecialchars $data[titel] . '</a>';
echo "</b></font>
</td>
</tr>
<tr>
<td bgcolor="$h_beschr">
<div align="left"><font face="$schriftart"
size="1">Aufgenommen am: $data[datum] </font></div>
</td>
</tr>
<tr>
<td bgcolor="#FFFFFF" valign="top">
<div align=justify><font face="$schriftart"
size="2">Kurzbeschreibung:<br><br>$data[kurzbeschreibung]</font></div>
</td>
</tr>
<tr>
<td bgcolor="$h_beschr" height="20">
<div align="left"> <img src="$data[sprache]"
alt="Sprache" border="0"> <font
face="$schriftart" size="1">Lizenz: $data[lizenz] </font>
<font face="$schriftart" size="1">System-Voraussetzung:
$data[braucht]</font></div>
</td>
</tr>
<tr>
<td bgcolor="$h_titel">
<!--<div align="left"><font face="$schriftart" size="2"> <a
href="deadlink.php4?id=$id&bereich=$bereich"><font
color="#FF0000">[Defekter Link?]</font></a> </font></div>-->
<div align="left"><font face="$schriftart" size="2"> Dateigröße:
$data[gross] $data[masseinheit] </font> | <font
face="$schriftart" size="2">Hits: $data[hits] | Vote:
$data[bb] </font></div>
</td>
</tr>
</table> <br><br> ";
}
// Zurück- und Vorblättern
if ($start > 0)
{
$newStart = ($start - $limit < 0) ? 0 : ($start-$limit);
echo "<a href=".$PHP_SELF."?start=".$newStart
."><< zurück</a>";
}
if ($start + $limit < $total)
{
$newStart = $start + $limit;
echo " <a href=".$PHP_SELF."?start=".$newStart
.">vor >></a>";
}
//Blätterfunktion Test Ende
Nur ich bekomme nach wie vor nach Einbindung von dieser Funktion in meiner
config.php4 einen Haufen an Fehlermeldungen, wenn ich die index.php4
aufrufe, obwohl in der index.php4 die Funktion noch nicht mal eingefügt bzw.
aufgerufen wird per Funktionsnamen.
Hier die Fehlermeldungen:
Warning: Can't connect to local MySQL server through socket
'/tmp/mysql.sock' (111) in /homepages/beta-version/index.php4 on line 262
Warning: MySQL Connection Failed: Can't connect to local MySQL server
through socket '/tmp/mysql.sock' (111) in /homepages/beta-version/index.php4
on line 262
Warning: MySQL: A link to the server could not be established in
/homepages/beta-version/index.php4 on line 262
Warning: Supplied argument is not a valid MySQL result resource in
/homepages/beta-version/index.php4 on line 264
Warning: Can't connect to local MySQL server through socket
'/tmp/mysql.sock' (111) in /homepages/beta-version/config.php4 on line 78
Warning: MySQL Connection Failed: Can't connect to local MySQL server
through socket '/tmp/mysql.sock' (111) in
/homepages/beta-version/config.php4 on line 78
Warning: MySQL: A link to the server could not be established in
/homepages/beta-version/config.php4 on line 78
Warning: Supplied argument is not a valid MySQL result resource in
/homepages/beta-version/config.php4 on line 79
Warning: Can't connect to local MySQL server through socket
'/tmp/mysql.sock' (111) in /homepages/beta-version/config.php4 on line 78
Warning: MySQL Connection Failed: Can't connect to local MySQL server
through socket '/tmp/mysql.sock' (111) in
/homepages/beta-version/config.php4 on line 78
Warning: MySQL: A link to the server could not be established in
/homepages/beta-version/config.php4 on line 78
Warning: Supplied argument is not a valid MySQL result resource in
/homepages/beta-version/config.php4 on line 79
Ich frage mich echt, warum da in der index.php4 diese Fehler auftauchen,
zumal diese Funktion dort noch nicht eingebunden ist!?
Hast du darauf vielleicht eine Erklärung bzw. eine Lösung, wie ich das
funktionsfähig bekommen könnte?
Besten Dank im voraus.
Mfg.
Sascha
Hi Sascha,
Ich habe diese Funktion in meine Configdatei reingeschrieben. Sobald ich diese Funktion in meiner Config drin habe, lässt sich meine Startdatei nicht mehr fehlerfrei ausführen. Der Fehler muß also in dieser Funktion meines Wissen nach drin sein, denn sobald die Funktion draussen ist, funktioniert alles bestens.
Es wäre hilfreich zu wissen welche Fehler ausgetreten sind - dann wird die Fehlersuche gleich um einiges einfacher, aber mal von kurz drüberfliegen:
// Datenbankabfrage ausführen.
$abfrage = "SELECT ID,* FROM ".$table
." LIMIT ".$start.",".$limit;
$resultID = @mysql_query($abfrage);
$abfrage enthält nur den String für die eigenliche Abfrage, erst $resultID führt diese dann durch, daher kann
list($id,$titel,$beschreibung,$preis,$braucht,$hits,$bb,$neu,$datum,$bereich
,$hplink,$programmlink,$screenshotlink,$emaillink,$sprache,$lizenz,$gross,$m
asseinheit,$kurzbeschreibung) = mysql_fetch_row($abfrage);
auf keinen Fall funktionieren, da wie gesagt $abfrage nur den String deiner Abfrage enthält.
// Ergebnisse lesen und an den Client ausgeben
while ($data = mysql_fetch_array($resultID))
{
erst hier werden die Ergebnisse wirklich ausgelesen ($resultID)
htmlspecialchars ($titel) . '</a>';
daher können deine Ausgaben in dieser Form auch nicht funktionieren - richtiger wäre hier statt $titel -> $data[Titel] (falls die Spalte in der Datenbank wirklich _Titel_ heisst)
Wie gesagt, am besten mal die Fehlermeldung oder das Problem schildern, dann wirds einfacher.
liebe gruesse aus oesterreich
Martin
Hallo Sascha,
zuerst mal zu deinen Fehlermeldungen:
Warning: Can't connect to local MySQL server through socket
'/tmp/mysql.sock' (111) in /homepages/beta-version/index.php4 on line 262
Das ist wohl die wichtigste - da dürfte was mit deinen Verbindungsdaten zum MySQL-Server nicht stimmen - überprüf mal die Einträge in den Zeilen, wo diese Fehlermeldung ausgeworfen wird.
Zum Script:
// Feststellen der Anzahl der verfügbaren Datensätze.
$resultID = @mysql_query("SELECT COUNT(ID) FROM ".$table);
Hast du zu diesem Zeitpunkt eine Datenbankverbindung offen ? - sonst müsstest du als zweiten Paramter in mysql_query die Verbindungskennung definieren.
// Datenbankabfrage ausführen.
$abfrage = "SELECT ID,* FROM ".$table
." LIMIT ".$start.",".$limit;
$resultID = @mysql_query($abfrage);
siehe oben
$hplink = urlencode($hplink);
$programmlink = urlencode($programmlink);
$screenshotlink = urlencode($screenshotlink);
$datum_array = split("-","$datum");
In der ersten Version hattest du die Variblen $hplink, ... zuvor definiert - nun durch den Umbau des Scripts gibts diese Variablen zu diesem Zeitpunkt noch nicht.
Es scheint so, als ob du dein Script einfach um ein weiters erweiterst - das ist meist nicht so einfach. Entweder du nimmst das zweite Script als Vorlage und bindest dann deinen gewünschten Code ein, oder du nimmst deinen Code als Vorlage und nimmst den zweiten nur zum Verständnis und schreibst an deinem Programm mit den neu gewonnenen Kenntissen weiter.
liebe gruesse aus oesterreich
Martin