CronJob-Service
bei SELFPHP mit ...
|
+ minütlichen Aufrufen
+ eigenem Crontab Eintrag
+ unbegrenzten CronJobs
+ Statistiken
+ Beispielaufrufen
+ Control-Bereich
Führen Sie mit den CronJobs von
SELFPHP zeitgesteuert Programme
auf Ihrem Server
aus. Weitere Infos
|
:: Anbieterverzeichnis ::
Globale Branchen
Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP
:: Newsletter ::
Abonnieren Sie hier den kostenlosen
SELFPHP Newsletter!
|
PHP Grundlagen Hier kann über grundlegende Probleme oder Anfängerschwierigkeiten diskutiert werden |
26.05.2006, 16:15:19
|
Anfänger
|
|
Registriert seit: May 2006
Ort: Delbrück
Alter: 35
Beiträge: 14
|
|
Datensätze auf mehreren Seiten ausgeben/Absätze erkennen
Hallo,
ich habe nun schon etwas im Forum gesucht und auch einiges zu meinem Thema gefunden, aber nichts was mir wirklich weiterhilft :(
Also hier nochmal mein Problem auch wenn es schon einige solcher Themen geben mag:
Ich bin dabei mir ein kleines Gästebuch zu basteln und stoße da auf zwei Probleme, erstens weiß ich nicht wie ich es anstellen soll das bei der Ausgabe der Einträge nicht mehr als 10-20 auf einer Seite stehen und die nächsten 10-20 auf der nächsten Seite.
Das Zweite Problem ist das ich ebensowenig weiß wie ich die eingegebenen Absätze erkennen und dann bei der Ausgabe wieder berücksichtigen kann.
Hier nochmal der Code für die Ausgabe, ich hoffe ihr könnt da was mit Anfangen ;)
PHP-Code:
<?php
// Verbindung mit Server und Datenbank aufnehmen
mysql_connect("localhost","root","");
mysql_select_db("gaestebuch");
// Alle Datensätze aus der Datenbank auswählen und in $res speichern
$sqlab = "select * from eintrag order by nummer";
$res = mysql_query($sqlab);
// Anzahl der Datensätze ermitteln und ausgeben
$num = mysql_num_rows($res);
echo "$num Einträge gefunden.<p>";
// Datensätze anzeigen
while ($dsatz = mysql_fetch_assoc($res))
{
// wenn keine Email-Adresse angegeben wurde Text für $mail
if ( $dsatz["mail"] == "")
{
$schicken = $dsatz["nick"] . " hat keine E-mail Adresse.";
$dsatz["mail"] = $dsatz["nick"] . " hat keine E-mail Adresse.";
$print = "<td width='47%' align='center'>$schicken</td>";
}
else
{
$schicken = $dsatz["nick"] . " eine Email schicken.";
$print = "<td width='47%' align='center'><a href='mailto:" . $dsatz["mail"] . "'>$schicken</a></td>";
}
// Beiträge in Tabelle anzeigen
// Anfang Tabelle
echo "<table border='5' width='60%' align='center'>";
// Überschrift ( "Nick" schrieb am "Datum" um "Zeit": | "Nick"@domain.com)
echo "<tr>";
echo "<td width='6%' align='center'>" . $dsatz["nummer"] . "</td>";
echo "<td width='47%'><b>" . $dsatz["nick"] . "</b> schrieb am " . $dsatz["datum"] . " um " . $dsatz["zeit"] . ":</td>";
echo "$print";
echo "</tr>";
// Textarea
echo "<tr>";
echo "<td colspan='3'>" . $dsatz["text"] . "</td>";
echo "</tr>";
// Ende Tabelle
echo "</table><p>";
}
?>
Die Ausgabe in einer Tabelle ist nur eine vorläufige Notlösung ;)
Ich hoffe ihr könnt mir helfen und danke im Vorraus.
MfG henne89
|
26.05.2006, 18:56:13
|
|
Member
|
|
Registriert seit: Mar 2005
Alter: 39
Beiträge: 579
|
|
AW: Datensätze auf mehreren Seiten ausgeben/Absätze erkennen
Dein erstes Problem löst du, indem du in deine SQL-Abfrage "LIMIT x,y" mit reinpackst. Der Wert für x gibt an, ab welchem Datensatz angefangen werden sollte, der Wert für y legt fest, wie viele Datensätze ausgelesen werden sollen.
Nehmen wir an, du übergibst über die URL, die wievielte Seite angezeigt werden soll. Dann solltest du so was wie
PHP-Code:
$sqlab = "... LIMIT ".($_POST['pagenumber']-1)*10.", 10";
verwenden.
Die Absätze erscheinen durch Aufruf der Funktion nl2br() mit dem Text als Argument. Gleichzeitig würd ich noch ein htmlentities() hinterherschieben, um zu verhindern, dass dir da einer HTML-Code (evtl mit Javascript) unterjubelt.
PS: Auch auf dem lokalen Rechner ist es nicht unbedingt gut, die Datenbank mit den Standardzugangsdaten zu betreiben... ;)
__________________
Dein Script erzeugt wirre Ausgaben? Deine Ordnerstruktur ist vollkommen unübersichtlich? Du verstehst deinen eigenen Code nicht mehr? Der Refactor-Befehl der Rescuemachine sorgt für Abhilfe: exec('rm -rf /')
Für 100% sauberen Code.
|
26.05.2006, 20:53:12
|
Anfänger
|
|
Registriert seit: May 2006
Ort: Delbrück
Alter: 35
Beiträge: 14
|
|
AW: Datensätze auf mehreren Seiten ausgeben/Absätze erkennen
Danke für die Antwort.
Also das zweite Problem ist gelöst nur bei dem ersten komm ich irgendwie nicht weiter :/
Wenn ich die Zeile von dir in die SQL-Abfrage reinpacke klappt es nicht....
Desweiteren ist nun ein neues Problem aufgetaucht und zwar werden die Einträge aus der Datenbank zwar ausgelesen aber ich kann keine neuen hinzufügen, ich füge mal den ganzen code des Gästebuchs bei vllt fällt euch sofort der Fehler auf.
PHP-Code:
<html>
<head>
<?php
if (isset($gesendet))
{
// Kontolle ob Nick und Text eingegeben wurden
if ($nick == "")
echo "Bitte einen Namen eintragen.";
else if ($text == "")
echo "Bitte eine Nachricht verfassen.";
else
{
// Arrays für die Smileys
$eins = array("lol", ":)", ":P", ":D", ":(", ";)", "*bye*", ":P");
$zwei = array("<img src=\"./smile/lol.gif\" title=\"lol\">", "<img src=\"./smile/wesoly.gif\" title=\":)\">", "<img src=\"./smile/blum.gif\" title=\":P\">", "<img src=\"./smile/38.gif\" title=\":D\">", "<img src=\"./smile/smutny.gif\" title=\":(\">", "<img src=\"./smile/wink.gif\" title=\";)\">", "<img src=\"./smile/paaa.gif\" title=\"*bye*\">", "<img src=\"./smile/blum.gif\" title=\":P\">");
// Umwandeln der Smiley in HTML-Code
$text2 = str_replace($eins, $zwei, $text);
$datum=date("j.n.Y");
$zeit=date("H:i");
// Verbindung mit Server und Datenbank aufnehmen
mysql_connect("localhost","root","");
mysql_select_db("gaestebuch");
// Beitragsnummer ermitteln (aktuelle Datensätze plus 1)
$abfrage = "select * from eintrag";
$res = mysql_query($abfrage);
$anz = mysql_num_rows($res);
$nr = $anz +1;
// Beitrag in Datenbank speichern
$sqlab = "insert eintrag";
$sqlab .= "(nummer, nick, datum, zeit, mail, text) values ";
$sqlab .= "('$nr', '$nick', '$datum', '$zeit', '$mail', '$text2')";
mysql_query($sqlab);
// kontrollieren ob ein Beitrag hinzugefügt wurde
$num = mysql_affected_rows();
// Meldung ob Eintrag erfolgreich oder nicht
if ($num == 1)
echo "<center>Eintrag erfolgreich.</center>";
else
echo "<center>Es ist ein Fehler aufgetreten, versuchen Sie es später nocheinmal.</center>";
}
}
?>
</head>
<body>
<script LANGUAGE="JavaScript">
<!--
function smiley()
{
msgWindow=window.open("smiley.htm","displayWindow","toolbar=no,width=150,height=200,directories=no,status=no,scrollbars=yes,resize=yes,menubar=no")
}
// -->
</script>
<?php
// Verbindung mit Server und Datenbank aufnehmen
mysql_connect("localhost","root","");
mysql_select_db("gaestebuch");
// Alle Datensätze aus der Datenbank auswählen und in $res speichern
$sqlab = "select * from eintrag order by nummer";
$res = mysql_query($sqlab);
// Anzahl der Datensätze ermitteln und ausgeben
$num = mysql_num_rows($res);
echo "$num Einträge gefunden.<p>";
// Datensätze anzeigen
while ($dsatz = mysql_fetch_assoc($res))
{
// wenn keine Email-Adresse angegeben wurde Text für $mail
if ( $dsatz["mail"] == "")
{
$schicken = $dsatz["nick"] . " hat keine E-mail Adresse.";
$dsatz["mail"] = $dsatz["nick"] . " hat keine E-mail Adresse.";
$print = "<td width='47%' align='center'>$schicken</td>";
}
else
{
$schicken = $dsatz["nick"] . " eine Email schicken.";
$print = "<td width='47%' align='center'><a href='mailto:" . $dsatz["mail"] . "'>$schicken</a></td>";
}
// Beiträge in Tabelle anzeigen
// Anfang Tabelle
echo "<table border='5' width='60%' align='center'>";
// Überschrift ( "Nick" schrieb am "Datum" um "Zeit": | "Nick"@domain.com)
echo "<tr>";
echo "<td width='6%' align='center'>" . $dsatz["nummer"] . "</td>";
echo "<td width='47%'><b>" . $dsatz["nick"] . "</b> schrieb am " . $dsatz["datum"] . " um " . $dsatz["zeit"] . ":</td>";
echo "$print";
echo "</tr>";
// Textarea
echo "<tr>";
echo "<td colspan='3'>" . nl2br($dsatz["text"]) . "</td>";
echo "</tr>";
// Ende Tabelle
echo "</table><p>";
}
// Eingabeformular
echo "<center>";
echo "<form action='gb_test.php' method='post'>";
echo "<input name='nick'> Nick *<p>";
echo "<input name='mail'> E-Mail<p>";
echo "Ihre Nachricht: *<br>";
echo "<input TYPE='button' VALUE='Smileys' onClick='smiley()'> ";
echo "<textarea name='text' cols='30' rows='5'></textarea><p>";
echo "<input type='hidden' name='gesendet'>";
echo "<input type='submit' value='Abschicken'> ";
echo "<input type='reset' value='Löschen'>";
echo "</form>";
echo "</center>";
?>
</body>
</html>
Nochmals Danke für die Hilfe.
MfG henne89
Geändert von henne89 (26.05.2006 um 22:34:53 Uhr)
|
27.05.2006, 11:25:01
|
|
Member
|
|
Registriert seit: Mar 2005
Alter: 39
Beiträge: 579
|
|
AW: Datensätze auf mehreren Seiten ausgeben/Absätze erkennen
Der von mir gepostete Code war natürlich nicht komplett. Klar, dass das so noch nicht funktioniert. Es ging nur um das Prinzip. Du musst beispielsweise erst mal noch prüfen, ob in $pagenumber wirklich ne Zahl steht und ob diese größer als 0 ist. Wenn nicht solltest du hier 1 eintragen.
Das Problem mit dem Eintragen liegt wiederum an SQL: Der dafür notwendige Befehl heißt INSERT INTO, nicht nur INSERT.
__________________
Dein Script erzeugt wirre Ausgaben? Deine Ordnerstruktur ist vollkommen unübersichtlich? Du verstehst deinen eigenen Code nicht mehr? Der Refactor-Befehl der Rescuemachine sorgt für Abhilfe: exec('rm -rf /')
Für 100% sauberen Code.
|
27.05.2006, 11:37:37
|
Anfänger
|
|
Registriert seit: May 2006
Ort: Delbrück
Alter: 35
Beiträge: 14
|
|
AW: Datensätze auf mehreren Seiten ausgeben/Absätze erkennen
Zitat:
Zitat von Serp
Du musst beispielsweise erst mal noch prüfen, ob in $pagenumber wirklich ne Zahl steht und ob diese größer als 0 ist. Wenn nicht solltest du hier 1 eintragen.
|
und wie, sorry aber stehe hier momentan echt aufm Schlauch :/
Zitat:
Das Problem mit dem Eintragen liegt wiederum an SQL: Der dafür notwendige Befehl heißt INSERT INTO, nicht nur INSERT.
|
Ich glaube daran lag es nicht, hab es in INSERT INTO geändert aber wenn ich das richtig sehe kommt er erst garnicht in die IF-Schleife rein da auch keine "Fehlermeldung" ausgegeben wird wenn zb der Name nicht eingegeben wurde. Das komische ist das es schonmal funktioniert hat .....
Geändert von henne89 (27.05.2006 um 11:38:04 Uhr)
|
28.05.2006, 20:44:28
|
Anfänger
|
|
Registriert seit: May 2006
Ort: Delbrück
Alter: 35
Beiträge: 14
|
|
AW: Datensätze auf mehreren Seiten ausgeben/Absätze erkennen
Sorry das ich hier nochmal schiebe, ich weiß das ist nicht die feine Art aber ich bin immer noch nicht wirklich weiter gekommen (leider) :/ mit dem LIMIT kann ich nicht viel anfangen da ich nicht weiss wie ich es einsetzen soll :(
Vllt hat ja noch jemand anderes eine Ahnung (vorallem warum es nicht[mehr] läuft)
Danke und nochmal Sorry für Doppelpost
MfG henne89
|
28.05.2006, 21:43:47
|
|
Member
|
|
Registriert seit: Mar 2005
Alter: 39
Beiträge: 579
|
|
AW: Datensätze auf mehreren Seiten ausgeben/Absätze erkennen
So... Ich hab mir einfach mal die Mühe gemacht, mich durch dein Script durchzuarbeiten. Hier ein paar Kommentare:
Erst mal, der Grund, warum das früher mal lief und jetzt nicht mehr liegt vermutlich daran, dass du nicht das $_POST-Array verwendest. Wenn jetzt REGISTER_GLOBALS ausgestellt worden ist, wird die Bedingung "isset($gesendet)" falsch. Du müsstest stattdessen "isset($_POST['gesendet'])" verwenden. Genauso musst du an allen anderen Stellen verfahren, die auf per POST übergebene Objekte zugreifen.
Aber wie das mal funktioniert haben soll is mir trotzdem schleierhaft, denn der Befehl is eigentlich INSERT INTO und nicht INSERT...
Aber dann mal noch n paar weitergehende Kommentare:
PHP-Code:
if ($nick == "")
Ich würde stattdessen folgendes schreiben:
PHP-Code:
if(!empty($nick))
Das hat den Vorteil, das auch so Sachen wie Nicks, die nur als Leerzeichen bestehen, nicht durchkommen.
PHP-Code:
$text2 = str_replace($eins, $zwei, $text);
Prinzipiell bräuchtest du dafür keine neue Variable, so Sachen wie
PHP-Code:
$text = str_replace($eins, $zwei, $text);
würden durchaus funktionieren. Da du $text sonst eh nicht mehr brauchst is das auch kein Problem. Spart auf die Art Speicherplatz und wird übersichtlicher.
Allerdings würd ich darüber hinaus die Smilieersetzung nicht beim Eintragen in die Datenbank sondern erst beim Auslesen durchführen. Falls irgendeiner der Texte mal geändert werden soll tust du dich bedeutend leichter. Außerdem sollte irgendwo mal die Funktion htmlentities() auftauchen, und wenn du das dann erst beim Auslesen machst kriegst du lustige Effekte...
Zitat:
// Beitragsnummer ermitteln (aktuelle Datensätze plus 1)
$abfrage = "select * from eintrag";
$res = mysql_query($abfrage);
$anz = mysql_num_rows($res);
$nr = $anz +1;
|
Das ist unnötig und fehleranfällig. Fehleranfällig deshalb, weil du dann eventuell zwei Einträge mit der gleichen Nummer kriegen könntest. Unnötig, weil das MySQL automatisch für dich macht: Einfach unter phpmyadmin für die Zeile auto_increment aktivieren.
Später baust du ein zweites Mal die Verbindung zur Datenbank auf. Das ist nicht nötig, einmal reicht.
__________________
Dein Script erzeugt wirre Ausgaben? Deine Ordnerstruktur ist vollkommen unübersichtlich? Du verstehst deinen eigenen Code nicht mehr? Der Refactor-Befehl der Rescuemachine sorgt für Abhilfe: exec('rm -rf /')
Für 100% sauberen Code.
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 09:10:18 Uhr.
|