5Danke
ERLEDIGT
NEIN
NEIN
ANTWORTEN
10
10
ZUGRIFFE
647
647
EMPFEHLEN
-
05.05.12 18:00 #1
Mitglied Bronze
- Registriert seit
- Apr 2012
- Beiträge
- 48
Hi, ich lerne gerade PHP und MySQL mit dem Buch "PHP und MySQL für Kids"
Is n gutes Buch, aber ich habe ein paar Fragen zu einem Teil:
Also, ich bin im Kapitel, in dem man ein einfaches CMS bastelt. Bei mir funktioniert es auch soweit. Hier mal der Code:
Also 1.:PHP-Code:<?php
include ("edit/zugriff.inc.php");
?>
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Unser CMS</title>
<style type="text/css">
body {
background: gray;
}
#wrapper {
width: 900px;
border: solid 1px;
background-color: white;
padding: 10px;
}
h1 {
background: gray;
color: white;
}
</style>
</head>
<body>
<div id="wrapper">
<h1>Unser Webtagebuch</h1>
<div>[ <a href="index.php">Home</a> ]</div>
<?php
$start = 0; //Startwert setzen (0 = 1. Zeile)
$step = 2; // Wie viele Einträge gleichzeitig?
$muster = "/^[0-9]+$/"; //reg. Ausdruck für Zahlen
//Startwert verändern
if (isset($_GET['start'])) {
if (preg_match($muster, $_GET['start']) == 0) {
$start = 0; //Bei Manipulation Rückfall auf 0
} else {
$start = $_GET['start'];
}
}
$sql1 = "SELECT * FROM cms";
$sql2 = "SELECT * FROM cms ORDER BY id DESC LIMIT $start, $step";
$result1 = mysql_query($sql1);
$zeilen = mysql_num_rows($result1);
$result2 = mysql_query($sql2);
echo "<p>Anzahl der Einträge: $zeilen</p>\n";
//while-Schleife Anfang
while ($row = @mysql_fetch_assoc($result2)) {
$Eintrag = nl2br($row['Eintrag']);
//Einträge anzeigen
echo "<h3>$row[Headline]</h3>\n" . "<p>$Eintrag</p>" . "<div><small>eingetragen von <b>$row[Name]</b> " . "am <strong>$row[Datum]</strong></small></div><br><br>\n";
} //while-Ende
//Link zu älteren Einträgen einblenden
$start = $start + $step;
echo "<p>";
if ($start < $zeilen) { // if-Anfang
echo "[ <a href=\"index.php?start=$start\"> << Ältere Einträge</a> ]";
}
echo "[ <a href='#wrapper'>nach oben</a> ] </p>\n";
mysql_close();
?>
</body>
</html>
Kann mir einer das mit dem $start und $step noch mal genau erklären? Das verwirrt mich momentan noch irgendwie. Also oben versteh ich es noch, da ist $start bei 0 und $step bei 2. Er soll also bei 0 Anfangen und 2 auflisten, so steht es ja in $sql2
Bloß ab diesem Teil verwirrt es mich:
Da blick ich einfach nicht mehr durch.PHP-Code://Link zu älteren Einträgen einblenden
$start = $start + $step;
echo "<p>";
if ($start < $zeilen) { // if-Anfang
echo "[ <a href=\"index.php?start=$start\"> << Ältere Einträge</a> ]";
}
2.: Eine "Aufgabe" in dem Buch, ist es, das gleiche wie gerade (also das mit den älteren Beiträgen anzuzeigen) mit neueren Beiträgen zu machen.
Habe es so versucht:
Aber das funktioniert nur, wenn es mehr als 4 Beiträge oder so gibt, und das ist ja eigentlich nicht so tollPHP-Code:if ($start > $step && $start <= $zeilen) {
$neuer = $_GET['start'];
$neuer = $neuer - $step;
echo "[ <a href=\"index.php?start=$neuer\"> Neuere Einträge</a> >> ] ";
}

3. Is jetzt ein bisschen Offtopic, aber ich möchte für so was kein neuen Thread öffnen:
In dem Code ist das hier:
Damit kann man ja nicht nur prüfen, ob Zahlen enthalten sind. Sondern auch, ob irgendetwas anderes 'vorhanden' ist (oder?)PHP-Code:$muster = "/^[0-9]+$/"; //reg. Ausdruck für Zahlen
Aber wie heißt so was? Und wie setzt sich das zusammen?
Danke schon mal für eure Hilfe
Lg
Dennis
-
05.05.12 18:24 #2
Erstmal: Wenn du den Code, den du hier eingefügt hast, vom Buch hast, dann würde ich mir schleunigst ein anderes Buch zulegen!!
Da sind so viele unnütze Codestellen und Fehler drin, die man alle vermeiden sollte und auch sehr leicht kann!
Nun ja, zu deinen Fragen:
1.) Deine Tabelle ist im Prinzip eine lange Liste von Datensätzen (Zeilen mit Daten).
Nun stellt $start eben die "Anfangsleseposition" dar und $step repräsentiert die Anzahl der zu lesenden Datensätze.
Dieser Code gibt einfach einen Link aus, der die nächsten Datensätze anzeigt bzw. die älteren Einträge aufgrund der Sortierung im MySQL-Query.PHP-Code://Link zu älteren Einträgen einblenden
$start = $start + $step;
echo "<p>";
if ($start < $zeilen) { // if-Anfang
echo "[ <a href=\"index.php?start=$start\"> << Ältere Einträge</a> ]";
2.) Der Code müsste so lauten:
Du ziehst einfach $step vom aktuellen $start ab. D.h. wenn der Benutzer auf "Ältere Einträge" geklickt hat, machst du dies somit rückgängig.PHP-Code:$newStart = $start-$step;
if ($newStart<0)
{
$newStart = 0;
}
echo "[ <a href=\"index.php?start=$newStart\"> Neuere Einträge</a> >> ]";
Ansonsten kann es beim Start der Auflistung ($start=0) dann dazu kommen, dass $newStart<0 wird; dies verhindern wir mit dem IF-Block!
3.) Eigentlich kannst du statt diesem regulären Ausdruck auch is_numeric() verwenden.
Wenn andere Zeichen als Zahlen im String vorkommen, gibt preg_match() 0 zurück, da im Regex-Pattern ^ und $ benutzt worden sind.
^ stellt den Anfang eines Strings dar, wobei $ das Ende repräsentiert.mfg ComFreek
Falls ich dir geholfen habe, würde ich mich über ein DANKE freuen!
Kenn mich am besten aus in C++, WEB-Sprachen (PHP, HTML, JavaScript) und vllt. mehr
[PHP] Überprüfen, ob Website erreichbar • Sicherheit in PHP-Codes schaffen • Google Chrome-Extension für tutorials.de • json_compress()
-
05.05.12 18:49 #3
Mitglied Bronze
- Registriert seit
- Apr 2012
- Beiträge
- 48
Hey, danke

Und ja, der Code ist exakt der aus dem Buch.
Kennst du vllt eins, das für Anfänger geeignet, und besser ist als das hier? Weil wenn du sagst, das da unnütze stellen und Fehler drin sind, dann wär es besser, sowas nicht zu lernen, oder?
Habe das halt vor 3 Jahren gekauft, und damals kein anderes gefunden, was so für Anfänger ist.
Lg
Dennis
-
05.05.12 18:55 #4
Ich würde folgendes empfehlen: PHP 5.4 und MySQL 5.5
Aber du kannst auch mal in Empfehlungen anderer Nutzer stöbern: http://www.tutorials.de/content/1451...s-de-shop.htmlmfg ComFreek
Falls ich dir geholfen habe, würde ich mich über ein DANKE freuen!
Kenn mich am besten aus in C++, WEB-Sprachen (PHP, HTML, JavaScript) und vllt. mehr
[PHP] Überprüfen, ob Website erreichbar • Sicherheit in PHP-Codes schaffen • Google Chrome-Extension für tutorials.de • json_compress()
-
05.05.12 19:35 #5
Mitglied Bronze
- Registriert seit
- Apr 2012
- Beiträge
- 48
Das Buch sieht gut aus.
Das werd ich mir, denke ich, zulegen.
wegen dem Code bei 2.
Irgendwie geht der bei mir nicht.
Wenn ich den unten drunter einfüge, dann erscheint nur ein Link zum aktuellen Wert von $start.
Muss ich das vllt so machen?
So funktioniert das bei mir.PHP-Code:$newStart = $_GET['start'] - $step;
if ($newStart < 0)
{
$newStart = 0;
}
echo "[ <a href=\"index.php?start=$newStart\"> Neuere Einträge</a> >> ]";
-
05.05.12 19:43 #6
Bist du dir sicher, dass du min. 1 Mal auf "Ältere Beiträge anzeigen" geklickt hast?
Sonst verweist der Link nämlich auf ?start=0;
Ist im Prinzip dasselbe. Aber eigentlich sollte $_GET['start'] schon vom Typ Integer sein.
Eigentlich kannst du den IF-Block mit isset($_GET['start']); so abändern:
Du kannst den Link zu den neueren Einträgen auch nur einblenden, wenn es welche relativ von der aktuellen Ansicht aus auch gibt:PHP-Code:if (isset($_GET['start']))
{
$start = intval($_GET['start']);
if ($start<0)
{
$start = 0;
}
}
PHP-Code:$newStart = $start-$step;
if ($newStart<0)
{
$newStart = 0;
}
if ($newStart!=$start)
{
echo "[ <a href=\"index.php?start=$newStart\"> Neuere Einträge</a> >> ]";
}
mfg ComFreek
Falls ich dir geholfen habe, würde ich mich über ein DANKE freuen!
Kenn mich am besten aus in C++, WEB-Sprachen (PHP, HTML, JavaScript) und vllt. mehr
[PHP] Überprüfen, ob Website erreichbar • Sicherheit in PHP-Codes schaffen • Google Chrome-Extension für tutorials.de • json_compress()
-
05.05.12 19:58 #7
Mitglied Bronze
- Registriert seit
- Apr 2012
- Beiträge
- 48
Hi, danke, hab das jetzt so gemacht:
Habe im Prinzip nur noch einen if-Block hingemacht, dass wenn $_GET["start"] nicht existert, es nicht angezeigt werden soll, denn dann ist es ja auch auf der aktuellsten seite, und somit kann es auch nicht weiter vorwärts gehen (glaub ichPHP-Code:@$newStart = $_GET['start'] - $step;
if (isset($_GET['start']))
{
$start = intval($_GET['start']);
if ($start<0)
{
$start = 0;
}
}
if ($newStart<0)
{
$newStart = 0;
}
if ($newStart!=$start)
{
if (isset($_GET['start'])) {
echo "[ <a href=\"index.php?start=$newStart\"> Neuere Einträge</a> >> ]";
}
}
)
-
06.05.12 12:49 #8
Mitglied Bronze
- Registriert seit
- Apr 2012
- Beiträge
- 48
Hi, ich bins nochmal.
Also der Code funktioniert eigentlich.
Jetzt wollte ich ihn aber in meine News-Seite einbauen, die im Prinzip dasselbe ist. Also sie greift auch auf eine Datenbanktabelle zu. Habe den Code so eingebaut:
srym dass der Code so lang ist, aber ich wieß halt nicht, bei welcher Stelle im Code was nicht stimmt.
Also das mit dem anzeigen funktioniert schon, je nachdem welchen Wert ich bei $step eingebe, zeigt er entsprechend viele Einträge an.PHP-Code:<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
$db = @new MySQLi('localhost', 'root', '', 'newsscript');
if (mySQLi_connect_errno()) {
die('in news.php: Konnte keine Verbindung zu Datenbank aufbauen, MySQL meldete: '.mysqli_connect_error());
}
//Hier setze ich $start und $step
$start = 0; //Startwert setzen (0 = 1. Zeile)
$step = 2; // Wie viele Einträge gleichzeitig?
$sqlrows = "SELECT * FROM news";
$result = mysql_query($sqlrows);
$zeilen = mysql_num_rows($result);
$sql = "SELECT * FROM news ORDER BY datum DESC LIMIT $start, $step";
$result = $db->query($sql);
if (!$result) {
die ('Konnte den Folgenden Query nicht senden: '.$sql."<br />\nFehlermeldung: ".$db->error);
}
if (!$result->num_rows) {
echo "<fieldset class=\"fehler\">Es sind keine Newsbeiträge vorhanden</fieldset>";
} else {
while ($row = $result->fetch_assoc()) {
echo '<section class="news-box"><section class="news-box-titel">'.$row['titel']." | \n";
echo '<span>'.$row['datum']."</span></section>\n";
echo '<p><img src="'.$row['bild'].'" width="200px" height="200px"></p>'. "\n";
echo ''.$row['inhalt']."</p></section>\n";
}
}
?>
<br><br>
<?php // Hier habe ich den Code von gestern eingefügt, der eigentlich funktioniert hat.
$start = $start + $step;
echo "<p>";
if ($start < $zeilen) {
echo "[ <a href=\"index.php?action=news&start=$start\"> << Ältere Einträge</a> ]"; // Hier musste ich noch ?action=news einfügen, denn die Seite arbeitet mit includes
}
@$newStart = $_GET['start'] - $step;
if (isset($_GET['start']))
{
$start = intval($_GET['start']);
if ($start<0)
{
$start = 0;
}
}
if ($newStart<0)
{
$newStart = 0;
}
if ($newStart!=$start)
{
if (isset($_GET['start'])) {
echo "[ <a href=\"index.php?action=news&start=$newStart\"> Neuere Einträge</a> >> ]";
}
}
Aber wenn ich dann auf den Link zu den älteren Beiträgen klicke, verweist er auf ?start=2, aber die angezeigten Einträge sind noch die selben. Und wenn ich noch einmal druafklicke, verweist er immer noch auf ?start=2
Wo liegt mein Fehler?
Danke schon mal
Lg
Dennis
-
07.05.12 09:59 #9
Du arbeitest deinen Code immer mit start=0, step=2 ab. Denn $_GET wertest du erst nach der Ausgabe der DB-Daten aus.
Ich persönlich würde nicht mit LIMIT abreiten. Es verkompliziert die Sache nur.
[PHP] Einfache Seitennavigation---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
07.05.12 13:43 #10
Mitglied Bronze
- Registriert seit
- Apr 2012
- Beiträge
- 48
hi, danke, ich änder es mal
naja, "einfach" sieht das überhaupt nicht aus, ich weiß nicht, ob das mit dem Aufbau meiner Seite funktioniert.
-
07.05.12 14:17 #11
Einfach Aussehen heisst nicht das es einfach ist. Ist sind 'viele' Zeilen. Wobei das meiste nur Definition sind. Der eigentliche Kern 'Erstellen der Navigation' ist nicht so besonders komplex und kann eigentlich so übernommen werden.
Aber selber eine Navigation bauen ist auch etwas interessantes. Darum will ich dir meine Lösung auch nicht aufdrängen - es war mehr als Input gedacht.---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
Ähnliche Themen
-
Daten aus MySQL zeigen Umlaute falsch
Von DarkRaver im Forum PHPAntworten: 0Letzter Beitrag: 08.11.10, 18:55 -
[PHP&MYSQL] Neue Beiträge/Threads anzeigen in selbstprogrammiertem Forum
Von BadKiss im Forum PHPAntworten: 7Letzter Beitrag: 27.01.10, 17:28 -
Update auf neuere Version von MySQL bringt mich zum Verzweifeln...
Von C4D_Joe im Forum Relationale DatenbanksystemeAntworten: 3Letzter Beitrag: 28.03.06, 14:02




Zitieren

Login