Gästebuch Fehlerbehebung

  • Hallo,
    soweit der Code meines Gästebuches


    Das Problem, das ich im Moment noch habe ist
    -1: Per Email kommt bei mir immer nur "Recource Id 2"an.
    Ich brauche aber die id, mit der der eintrag gespeichert wurde,
    damit ich dann per http://dominiks-fotos.de/sites/freischalten.php
    das Ganze Freischalten kann.


    -2: Wenn ich nur Gästebucheintrag 8 von z.B. 8 freischalte,
    weil die anderen entwegen Spam oder rechtswidrig waren,
    wie kann ich dann die Id's durchlaufen anzeigen?,
    also dass Gästebucheintrag 8 mit 1 beginnt... ?


    -3: Eigentlich kein Problem: Absätze könnte man nur per Javascript machen oder?


    -4: Fällt euch noch sonst ein fehler auf?

  • 1. So, wie du es jetzt hast, werden die ids aller Reihen ausgelesen, das ist dann eine Ressource zur Weiterverarbeitung und nicht die eine id, die du haben willst.
    Die id des letzten INSERT-Befehls, kannst du mit mysql_insert_id() auslesen.
    Es heißt also:

    PHP
    1. <span class="syntaxdefault">id </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> mysql_insert_id</span><span class="syntaxkeyword">();</span><span class="syntaxdefault"> </span>


    2. Du kannst die Gesamtzahl aller Einträge auslesen (mysql_num_rows()), in einer Variable speichern und dann bei jedem Durchlauf deiner Ausgabe-Schleife die aktuelle Nummer um eins verringern (die Variable).

    PHP
    1. <span class="syntaxdefault"></span><span class="syntaxcomment">//   Anzahl der Einträge auslesen;  Eintrag auslesen;                                Anzahl um eins verringern<br /></span><span class="syntaxdefault">for </span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$id </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> mysql_num_rows</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$db_erg</span><span class="syntaxkeyword">);</span><span class="syntaxdefault"> $daten </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> mysql_fetch_array</span><span class="syntaxkeyword">(</span><span class="syntaxdefault"> $db_erg</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> MYSQL_ASSOC</span><span class="syntaxkeyword">);</span><span class="syntaxdefault"> $id</span><span class="syntaxkeyword">--)<br />{<br /></span><span class="syntaxdefault">    </span><span class="syntaxcomment">// Aushabe der Daten<br /></span><span class="syntaxdefault">    echo </span><span class="syntaxstring">"ID: "</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">    echo $id</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">    </span><span class="syntaxcomment">// ... </span><span class="syntaxdefault"></span>


    3. Dafür gibt es die Funktion nl2br(). Mit der Funktion wird bei allen Neue-Zeile-Zeichen (\n, \r\n, \r), ein HTML-Zeilenumbruch eingefügt (<br />).
    Solche Neue-Zeile-Zeichen, sind z.B. auch in einem String aus einer Textarea enthalten, wo der Benutzer Enter gedrückt hat.

    PHP
    1. <span class="syntaxdefault">$_POST</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'eintrag'</span><span class="syntaxkeyword">] = </span><span class="syntaxdefault">nl2br</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$_POST</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'eintrag'</span><span class="syntaxkeyword">]); </span><span class="syntaxdefault"></span>


    4. Mir ist so jetzt nichts aufgefallen.

  • Hallo,


    Danke, hat mir sehr geholfen.
    Gibt es denn eine Möglichkeit (bzgl. des <br> bei der funktion nl2br) bei htmlentities oder htmlspecialchairs <br />/<br> unkonvertiert zu lassen?

  • Nicht das ich wüsste, du kannst nl2br aber auch ganz einfach nach den Überprüfungen durchführen.

  • Hallo,


    ich habe jetzt eine einfache Pagingfunktion für das Gästebuch,
    will jetzt auch dass die Ids richtig angezeigt werden...



    Paging Teil:


    Seitenteil/Ausgabeteil


    Bei $proseite gebe ich an, welches Limit ich bei der Eintragsanzahl pro seite haben möchte,
    bei $db_erg_gesamt wird einmal alles ausgelesen, ohne limit.


    Mein Lösungsansatz wäre jetzt folgender:

    Code
    1. // Anzahl der Einträge auslesen; Eintrag auslesen (hier dann -($proseite * seitenanzahl)); Anzahl um eins verringern
    2. for ($id = mysql_num_rows($db_erg_gesamt); $daten = mysql_fetch_array( $db_erg, MYSQL_ASSOC); $id--)


    Ja.. also ich möchte den Ausgelesenen Eintrag mit der aktuellen Seite * Seitenanzahl subtrahieren.
    Dann müsste ja für jede Seite fortlaufend die Id kleiner werden...
    Nur habe ich keinen Schimmer, wie ich das in Code bringen soll.



    EDIT sagt:

    Code
    1. $seitegesamt=$aktuellseite*$proseite;
    2. //funktion richtige id's'
    3. // Anzahl der Einträge auslesen; Eintrag auslesen; Anzahl um eins verringern
    4. for ($id = mysql_num_rows($db_erg_gesamt); $daten = mysql_fetch_array( $db_erg, MYSQL_ASSOC); $id=$id-$seitegesamt+1)


    Soweit bin ich, aber weiter weiß ich nicht.
    Eigentlich müsste es doch so gehen,
    geht aber nicht...

  • Hallo,


    so also ich habe es raus:


    Code
    1. for ($id = mysql_num_rows($db_erg_gesamt); $daten = mysql_fetch_array( $db_erg, MYSQL_ASSOC); $id = $id - $aktuellseite * $proseite + 1)


    Es funktioniert so fast.
    Ich habe Proseite mal auf 2 gestellt,
    da ich noch nicht so viele Einträge habe...


    Der oberste Eintrag (Orderd by date desc) ist immer 6,
    während der untere abnimmt.
    Woran liegt das?

  • Naja.. vllt daran das je später ein Datum ist der Timestamp wächst?
    So ist der jetzige Moment ein größerer Timestamp als gestern um die selbe Zeit.
    Lassen wir nun unsere Einträge in Umgekehrter Reihenfolge / Absteigend der Zeit sortieren (ORDER BY date DESC | DESC = descending = to descend = absteigen) erhalten wir halt das von dir beschriebene Verhalten. Wir erhalten also die neusten Einträge zuerst.. neuste Einträge = neuste und somit größte Id, was wir ja denke ich hier auch wollen.
    Würdest du zuerst 1 und dann 2,.. haben wollen müsstest du das DESC aus der Query entfernen, dies wäre aber recht ungewohnt, da man meistens die neusten Sachen zuerst anzeigt.

  • Hallo,


    häää?


    Also ich will schon, dass der neueste Eintrag zuerst angezeigt wird.


    Aber die Id's werden nicht in der richtigen Rheinefolge angezeigt...


    Ich müsste ja so subtrahieren,
    dass immer die vorherige Anzahl angezeigter Id's bei der aktuellen Seite abgezogen wird,
    wenn du verstehst was ich meine...


    Müsste mal meine Mathelehrerin fragen, aber die habe ich erst ähhh Montag wieder :( .

  • In einer Datenbank werden die meisten Datensätze anhand eines Primären Schlüssels gespeichert.
    Meist ist dies die ID. Der erste Datensatz erhält die ID 1, der zweite die 2 und so weiter.. der Erste Datensatz ist demnach natürlich auch der Älteste und wird als letztes Angezeigt.
    Demnach werden die ID's in der richtigen Reihenfolge angezeigt.. Du brauchst die also eigentlich garnicht "umdrehen" :/
    Soltlest du es trotzdem umbedingt tun wollen (wieso auch immer) dann versuch einfach aus folgender Gleichung Schlau zu werden:

  • Hallo,


    ich möchte das unbedingt,
    da ich die Beiträge erst per Sichtkontrolle freischalte (wie es ganz am Anfang im Thread steht )und somit immer wieder Lücken in den Id's entstehen können...


    Die Gleichung sehe ich mir mal an und versuche schlau zu werden.

  • Das habe ich noch nie gehört.. wobei, doch einmal :D
    Da wollte eine unserer Kundinnen sowas in der Richtugn auch haben xD Zwar sah mein bei ihr die ID's überhaupt nicht.. aber sie wollte das irgendwie gaaanz speziell haben^^


    Aus welchem Grund zeigst du eig überhuapt die ID an?


    Naja.. Dann wirst du mit 2 Tabellen arbeiten müssen.. oder ich/du wirst dir eine neue Gleichung ausdenken müssen^^

  • Nicht nötig :P
    Der Geistesblitz ist mir nach langem anschauen Deiner Gleichung gekommen,
    warum auch immer....


    Ich muss ja "sagen",
    dass ganz am Anfag vor der Subrahierung die id erst da anfängt, wo die anderen schon abgezogen wurde,
    also eben $id = $anzahl_eintraege_gesamt - $aktuellseite * $proseite + $proseite;

    Code
    1. for ($id = $anzahl_eintraege_gesamt - $aktuellseite * $proseite + $proseite; $daten = mysql_fetch_array( $db_erg, MYSQL_ASSOC); $id-- )
  • Ja, jetzt, wenn du es so erwähnst... :roll:
    aber ich habe es jetzt so gelöst, und solange es funktioniert....


    Ich sehe es so: Ein Problem mehr gelöst, ein wenig mehr PHP gelernt

  • Schon^^ Aber es ist nicht besonders Effizient.. :/
    Ich habe auch schon viele Probleme sehr interessant gelöst :D
    Kleines Beispiel: Ich habe mal ein kleines CMS geschrieben das vollkommen Dynamisch war und das ohne Datenbank! Dazu hatte ich auch noch keine Ahnung von .htaccess
    Dafür wurden immer Dateien erzeugt, die an für sich nur die index.php eingebunden haben und die dann wiederum aus dem Content-Ordner den eigentlich Inhalt geladen haben,..
    Es hat super Funktioniert, aber Effizient ist was anderes.. Freut mich das du das als PHP-Übung siehst und ws gelernt hast (:
    Aber OFFSET wäre hier weitaus bequemer und Effizienter. Und du lernst wieder mehr :D