Like Tree5Danke
  • 1 Beitrag von ComFreek
  • 1 Beitrag von ComFreek
  • 1 Beitrag von ComFreek
  • 1 Beitrag von Yaslaw
  • 1 Beitrag von Yaslaw
ERLEDIGT
NEIN
ANTWORTEN
10
ZUGRIFFE
889
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
  1. #1
    d3mueller ist offline Mitglied Silber
    Registriert seit
    Apr 2012
    Beiträge
    61
    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:
    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&auml;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\"> &lt;&lt; &Auml;ltere Eintr&auml;ge</a> ]";
    }
    echo 
    "[ <a href='#wrapper'>nach oben</a> ] </p>\n";
    mysql_close();
    ?>
    </body>
    </html>
    Also 1.:
    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:
    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\"> &lt;&lt; &Auml;ltere Eintr&auml;ge</a> ]";

    Da blick ich einfach nicht mehr durch.





    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:
    PHP-Code:
    if ($start $step && $start <= $zeilen) {
        
    $neuer $_GET['start'];
        
    $neuer $neuer $step;
        echo 
    "[ <a href=\"index.php?start=$neuer\"> Neuere Eintr&auml;ge</a> >> ] ";

    Aber das funktioniert nur, wenn es mehr als 4 Beiträge oder so gibt, und das ist ja eigentlich nicht so toll


    3. Is jetzt ein bisschen Offtopic, aber ich möchte für so was kein neuen Thread öffnen:
    In dem Code ist das hier:
    PHP-Code:
    $muster "/^[0-9]+$/"//reg. Ausdruck für Zahlen 
    Damit kann man ja nicht nur prüfen, ob Zahlen enthalten sind. Sondern auch, ob irgendetwas anderes 'vorhanden' ist (oder?)
    Aber wie heißt so was? Und wie setzt sich das zusammen?


    Danke schon mal für eure Hilfe

    Lg
    Dennis
     

  2. #2
    Avatar von ComFreek
    ComFreek ist offline Mod | @comfreek
    tutorials.de Moderator
    Registriert seit
    Jun 2009
    Beiträge
    3.250
    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.

    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\"> &lt;&lt; &Auml;ltere Eintr&auml;ge</a> ]"
    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.


    2.) Der Code müsste so lauten:
    PHP-Code:
    $newStart $start-$step;

    if (
    $newStart<0)
    {
      
    $newStart 0;
    }
    echo 
    "[ <a href=\"index.php?start=$newStart\"> Neuere Eintr&auml;ge</a> >> ]"
    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.
    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.
    d3mueller bedankt sich. 
    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 erreichbarSicherheit in PHP-Codes schaffenGoogle Chrome-Extension für tutorials.dejson_compress()

  3. #3
    d3mueller ist offline Mitglied Silber
    Registriert seit
    Apr 2012
    Beiträge
    61
    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
     

  4. #4
    Avatar von ComFreek
    ComFreek ist offline Mod | @comfreek
    tutorials.de Moderator
    Registriert seit
    Jun 2009
    Beiträge
    3.250
    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.html
    d3mueller bedankt sich. 
    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 erreichbarSicherheit in PHP-Codes schaffenGoogle Chrome-Extension für tutorials.dejson_compress()

  5. #5
    d3mueller ist offline Mitglied Silber
    Registriert seit
    Apr 2012
    Beiträge
    61
    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?

    PHP-Code:
    $newStart $_GET['start'] - $step;

    if (
    $newStart 0)
    {
      
    $newStart 0;
    }
    echo 
    "[ <a href=\"index.php?start=$newStart\"> Neuere Eintr&auml;ge</a> >> ]"
    So funktioniert das bei mir.
     

  6. #6
    Avatar von ComFreek
    ComFreek ist offline Mod | @comfreek
    tutorials.de Moderator
    Registriert seit
    Jun 2009
    Beiträge
    3.250
    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:
    PHP-Code:
    if (isset($_GET['start']))
    {
      
    $start intval($_GET['start']);
      if (
    $start<0)
      {
        
    $start 0;
      }

    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:
    $newStart $start-$step;

    if (
    $newStart<0)
    {
      
    $newStart 0;
    }
    if (
    $newStart!=$start)
    {
      echo 
    "[ <a href=\"index.php?start=$newStart\"> Neuere Eintr&auml;ge</a> >> ]";

    d3mueller bedankt sich. 
    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 erreichbarSicherheit in PHP-Codes schaffenGoogle Chrome-Extension für tutorials.dejson_compress()

  7. #7
    d3mueller ist offline Mitglied Silber
    Registriert seit
    Apr 2012
    Beiträge
    61
    Hi, danke, hab das jetzt so gemacht:
    PHP-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&auml;ge</a> >> ]";
      }

    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 ich)
     

  8. #8
    d3mueller ist offline Mitglied Silber
    Registriert seit
    Apr 2012
    Beiträge
    61
    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.
    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\"> &lt;&lt; &Auml;ltere Eintr&auml;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&auml;ge</a> >> ]";
      }
    }
    Also das mit dem anzeigen funktioniert schon, je nachdem welchen Wert ich bei $step eingebe, zeigt er entsprechend viele Einträge an.
    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
     

  9. #9
    Avatar von Yaslaw
    Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    7.046
    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
    d3mueller bedankt sich. 
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements¨in PHP-Code 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 Code-Tags verwenden

  10. #10
    d3mueller ist offline Mitglied Silber
    Registriert seit
    Apr 2012
    Beiträge
    61
    hi, danke, ich änder es mal

    naja, "einfach" sieht das überhaupt nicht aus, ich weiß nicht, ob das mit dem Aufbau meiner Seite funktioniert.
     

  11. #11
    Avatar von Yaslaw
    Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    7.046
    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.
    d3mueller bedankt sich. 
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements¨in PHP-Code 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 Code-Tags verwenden

Thema nicht erledigt

Ähnliche Themen

  1. Daten aus MySQL zeigen Umlaute falsch
    Von DarkRaver im Forum PHP
    Antworten: 0
    Letzter Beitrag: 08.11.10, 18:55
  2. Antworten: 7
    Letzter Beitrag: 27.01.10, 17:28
  3. Update auf neuere Version von MySQL bringt mich zum Verzweifeln...
    Von C4D_Joe im Forum Relationale Datenbanksysteme
    Antworten: 3
    Letzter Beitrag: 28.03.06, 14:02

Stichworte