kostenloser Webspace werbefrei: lima-city


Fehlerschnitzeljagd

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    0******a

    In diesem Skript steckt ein tag/fehler">Fehler
    http://0-checka.pyrokar.lima-city.de/umfrage.php
    (Link zu Quelltext ist dabei).
    Wer findet ihn? Und dann m?chte ich auch L?sungsvorschl?ge h?ren.

    Hier ein Tip:
    Es ist kein Problem mit MySQL.

    Falls bis morgen niemand den Fehler findet, poste ich hier einen weiteren Tip.
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Ich habe (bis jetzt) keinen Fehler gefunden.
    Bin aber auch erst bei Zeile 174, wo ich ein bi?chen verwundert war, wieso du es so kompliziert machst!

    Zeile 174 :
    if (($dbres = mysql_query("update $db_tablename set reply = \"$answer\", send_time = send_time where msg_id = $msgid", $dbhandle)) == FALSE)

    Wie w?rs wenn du einfach schreibst :

    $dbres = mysql_query("UPDATE `".$db_tablename."` SET reply = '".$answer."', send_time = 'send_time' WHERE msg_id = ".$msgid.", $dbhandle);
    if (!$dbres) {
    // Error
    }

    Ist doch viel einfacher durchzugucken....
    Genauso bei allen anderen Querys.

    Mit deinem $mode hast du auch nen bi?chen ?bertrieben oder?

    Schreib doch einfach
    if (isset($_GET["mode"])) {
    $mode = $_GET["mode"];
    } elseif (isset($_POST["mode"])) {
    $mode = $_POST["mode"]
    } else {
    // ERROR bzw. nichts machen
    }

    Deinen Quelltext mag ich irgendwie nicht so. :biggrin:
    Wieso machst du auch eine extra Funktion, die zur Datenbank connectet?
    Du brauchst doch sowieso f?r jede Seite eine Connection zur Datenbank, also brauch man nicht extra daf?r eine Funktion zu schreiben. :wink:


    edit:
    Wo ich gerad von der Datenbank Connection spreche, wieso baust du zwei Verbindungen auf? (Zeile 101 und Zeile 337)
    Und wieso schlie?t du keine mit mysql_close()? xD
    Und wieso benutzt du nicht wengistens Alopex zuliebe printf?? *lol
  4. Autor dieses Themas

    0******a

    lucas9991 schrieb:
    Wie w?rs wenn du einfach schreibst :

    $dbres = mysql_query('UPDATE `'.$db_tablename.'` SET reply = ''.$answer.'', send_time = 'send_time' WHERE msg_id = '.$msgid.', $dbhandle);
    if (!$dbres) {
    // Error
    }

    Ist doch viel einfacher durchzugucken....
    Genauso bei allen anderen Querys.

    Man merkt ja bereits an deinem Geschriebenen, was der Nachteil bei der Schreibweise ist. Ist dir denn nicht aufgefallen, dass du nach $msgid einen String mit ' ?ffnest und nicht wieder schliesst? Dieses ganze Aneinandergeh?nge ist doch viel un?bersichtlicher.



    lucas9991 schrieb:
    Mit deinem $mode hast du auch nen bi?chen ?bertrieben oder?

    Schreib doch einfach
    if (isset($_GET['mode'])) {
    $mode = $_GET['mode'];
    } elseif (isset($_POST['mode'])) {
    $mode = $_POST['mode']
    } else {
    // ERROR bzw. nichts machen
    }

    Nein, das ist bei mir nicht ?bertrieben, denn da wo du "ERROR bzw. nichts machen" stehen hast, m?sste dann bei mir die ganze ?bersicht mit Formular stehen. Und das ist mir einfach zu un?bersichtlich, so ein Riesenschwanz von else noch dran zu h?ngen.



    lucas9991 schrieb:
    Wieso machst du auch eine extra Funktion, die zur Datenbank connectet?
    Du brauchst doch sowieso f?r jede Seite eine Connection zur Datenbank, also brauch man nicht extra daf?r eine Funktion zu schreiben. :wink:

    Ich brauche nicht f?r jede Seite eine Datenbankfunktion. Da t?uschst du dich.



    lucas9991 schrieb:
    Wo ich gerad von der Datenbank Connection spreche, wieso baust du zwei Verbindungen auf? (Zeile 101 und Zeile 337)
    Und wieso schlie?t du keine mit mysql_close()? xD

    Die eine wird im if-Zweig aufgebaut, der dann am Schluss mit exit() beendet wird. Die zweite wird nur aufgebaut, wenn der if-Zweig ?bersprungen wird. Und nicht schliessen... weisste ja selber.

    lucas9991 schrieb:
    Und wieso benutzt du nicht wengistens Alopex zuliebe printf?? *lol

    Weil printf() nicht so performant ist wie echo.

  5. Man merkt ja bereits an deinem Geschriebenen, was der Nachteil bei der Schreibweise ist. Ist dir denn nicht aufgefallen, dass du nach $msgid einen String mit ' ?ffnest und nicht wieder schliesst? Dieses ganze Aneinandergeh?nge ist doch viel un?bersichtlicher.

    Finde ich nicht, aber es scheint Ansichtssache zu sein.


    Nein, das ist bei mir nicht ?bertrieben, denn da wo du "ERROR bzw. nichts machen" stehen hast, m?sste dann bei mir die ganze ?bersicht mit Formular stehen. Und das ist mir einfach zu un?bersichtlich, so ein Riesenschwanz von else noch dran zu h?ngen.

    Ja, bei dem Quelltext schon, aber ich glaub man k?nnte es trotzdem einfacher machen! :P


    Ich brauche nicht f?r jede Seite eine Datenbankfunktion. Da t?uschst du dich.

    F?r welche denn nicht?
    Es gibt doch nur 3 wirkliche Seiten oder?
    Einmal die Ausgabe, einmal dein Login Bereich und dann noch dein Feld zum Posten.
    Ok, damit habe ich gerad zwei Seiten genannt, wo du keine DB Verbindung brauchst. ^^


    Weil printf() nicht so performant ist wie echo.

    O_o Jetzt gibts Schl?ge von Alopex! :biggrin:

    P.S.: R?ck ma raus mit deinem Tipp! xD
    Ist doch nur noch ne viertel Stunde bis morgen!
  6. Autor dieses Themas

    0******a

    Ups sorry...
    War anderweitig total besch?ftigt, also der Tip:
    Hat was mit den Formatierungen (<b>, <i>, etc.) zu tun.
  7. c*********c

    $answer = str_replace("\"", "&quote;", $answer);

    liegt da der Fehler?



    sonst hab ich keinen gefunden?! Ist da ?berhaupt ein Fehler drin (k?nnte ja sein:biggrin:)
  8. k**********e

    ---- anfang dein mist ----
    // format conversions
    $message = str_replace(" ", "&amp;nbsp;&amp;nbsp;", $message);
    $message = str_replace("&amp;lt;b&amp;gt;", "<b>", $message);
    $message = str_replace("&amp;lt;i&amp;gt;", "<i>", $message);
    $message = str_replace("&amp;lt;u&amp;gt;", "<u>", $message);
    $message = str_replace("&amp;lt;s&amp;gt;", "<s>", $message);
    $message = str_replace("&amp;lt;/b&amp;gt;", "</b>", $message);
    $message = str_replace("&amp;lt;/i&amp;gt;", "</i>", $message);
    $message = str_replace("&amp;lt;/u&amp;gt;", "</u>", $message);
    $message = str_replace("&amp;lt;/s&amp;gt;", "</s>", $message);



    // check for enough closing tags
    $b_count = substr_count($message, "<b>");
    $i_count = substr_count($message, "<i>");
    $u_count = substr_count($message, "<u>");
    $s_count = substr_count($message, "<s>");
    $b_end_count = substr_count($message, "</b>");
    $i_end_count = substr_count($message, "</i>");
    $u_end_count = substr_count($message, "</u>");
    $s_end_count = substr_count($message, "</s>");

    for ($temp = 0; $temp < ($b_count - $b_end_count); $temp++)
    $message .= "</b>";

    for ($temp = 0; $temp < ($i_count - $i_end_count); $temp++)
    $message .= "</i>";

    for ($temp = 0; $temp < ($u_count - $u_end_count); $temp++)
    $message .= "</u>";

    for ($temp = 0; $temp < ($s_count - $s_end_count); $temp++)
    $message .= "</s>";
    ---- ende dein mist ----


    ist ja... ?hm.. s??^^

    der 'fehler' an dieser sache ist, die formatierung geht fl?ten bei den auf krampf eingef?gten endtags.
    au?erdem geht es schneller und einfacher mit preg_replace
    vorausgesetzt man hat etwas kenntnis mit Regex


    ---- anfang mein mist ----
    // die gewollten b u i s tags werden mit anfangs und end tag ersetzt (beides muss vorhanden sein)
    $message = preg_replace('`\&amp;lt;(b|u|i|s)\&amp;gt;(.*?)\&amp;lt;/\\1\&amp;gt;`is', '<\\1>\\2</\\1>', $message);

    // einsame nicht ge?ffnete oder geschlo?ene tags werden kommentarlos aus dem text gel?scht (eine sch?ne formatierung ist alles :biggrin: )
    $message = preg_replace('`\&amp;lt;(b|u|i|s)\&amp;gt;`is', '', $message);
    $message = preg_replace('`\&amp;lt;/(b|u|i|s)\&amp;gt;`is', '', $message);
    ---- ende mein mist ----


    selbe wirkung weniger code^^

    p.s.: bin ich froh, dass ich eine sch?ne modulare klasse f?r bb-code hab^^
  9. Nabnd, alle zusammen!

    lucas9991 schrieb:
    Und wieso benutzt du nicht wengistens Alopex zuliebe printf?? *lol

    Weil printf() nicht so performant ist wie echo.

    Hiho lucas9991!

    Es kommt der Tag, da wirst auch du einsehen, das print() und Kollegen durchaus Sinn machen.

    Au?erdem: 0-checka ist hier der Mod und daher muss ich vor ihm kriechen (und nicht umgekehrt).

    @0-checka:
    Zur Performance von printf() kann ich nichts sagen, aber print() ist tats?chlich um ca. 6 Prozent langsamer als echo() (wenn man die Ausf?hrungszeit von echo() mit 100 Prozent ansetzt). Zumindest, wenn man dieser Seite glauben will:

    http://dynacker.dotgeek.org/printvsecho/

    Ich verneige mich vor deiner Weisheit. Aber: Diese 6 Prozent verbr?t dein Skript, wenn es auf den Datenbankserver wartet (was mit ****** nicht der Fall w?re). Au?erdem d?rfte die l?ngere Laufzeit der Tatsache zuzuschreiben sein, dass print() einen R?ckgabewert erzeugt, echo() aber nicht.

    @kirschbluete

    ist ja... ?hm.. s??^^


    :biggrin: 100% ack!

    Ich habe auch gestaunt, dass der gro?e 0-checka offensichtlich eine Aversion gegen RegExp's hat. Ich hoffe mal, er wei? schon, dass es sie gibt, wollte sie uns beschr?nkten Usern aber nicht zumuten. Nat?rlich kann es auch sein, dass er hier (PCRE vs. normale String-Funktionen) den gleichen Irrt?mern (Vorurteilen?) unterliegt, wie im Vergleich SQLite vs. MySQL. Gro?er 0-checka, dein unw?rdiger Mitleser harrt deiner kompetenten Antwort ... *im_Dreck_kriech*

    Wo gibts die modulare BBCode-Klasse?

    MfG
    alopex
  10. k**********e

    @alopex
    die hab ich selbst gezeichnet :biggrin:

    nein im ernst, hab ich mir selbst zurecht geschrieben, da ich zB f?r ein g?stebuch weniger brauche als f?r ein newssystem. au?erdem kann ich meine klasse bequem an eine datenbank anschlie?en, wenn ich neue formatierungen haben m?chte
  11. Autor dieses Themas

    0******a

    kirschbluete schrieb:
    der 'fehler' an dieser sache ist, die formatierung geht fl?ten bei den auf krampf eingef?gten endtags.

    Na ja... nicht so ganz, aber geht schon in die richtige Richtung. Von der Formatierung geht nichts verloren. Es ist eher das Gegenteil (<-- Neuer Tip).


    alopex schrieb:
    Ich habe auch gestaunt, dass der gro?e 0-checka offensichtlich eine Aversion gegen RegExp's hat. Ich hoffe mal, er wei? schon, dass es sie gibt, wollte sie uns beschr?nkten Usern aber nicht zumuten.

    Ich wollte sie einfach mir selbst nicht zumuten. Ich komme mit den entsprechenden Funktionen nicht zurecht bzw. habe keine Lust, mich mit ihnen zu besch?ftigen. Ich bin eingefleischter C-Programmierer und brauche es Low-Level *g*. Also Aversion kommt meinem Gef?hl schon recht nahe. Hast dich mal wieder gut eingeschleimt ;-)
  12. Ich bin eingefleischter C-Programmierer und brauche es Low-Level *g*. Also Aversion kommt meinem Gef?hl schon recht nahe.


    Vorsicht! Ich bin der Webrecherche f?hig:
    ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/
    Irgendwo d?rfte ein Paket f?r deinen C-Compiler dabei sein ...
    PCRE ist ein frei erh?ltliches Softwarepaket f?r so ziemlich alles was mit Programmieren zu tun hat.

    Hast dich mal wieder gut eingeschleimt ;-)


    Regel Nummer Eins f?r den gew?hnlichen 08-15-User: Besch?dige niemals (?ffentlich) das Ansehen des Moderators!^^

    Der Nachteil deiner str_replace()-L?sung liegt aber vor allem darin, dass man f?r eventuelle ?nderungen oder Erweiterungen der Syntax mehrere Zeilen Code ?ndern muss. Es w?re besser, das in eine Unterfunktion auszulagern, die mit einem "Replace-Array" arbeitet, in dem die zu ersetzenden Tags und die Ersetzungen festgelegt werden.

    MfG
    alopex

    P.S.:
    Die Sache mit dem Performance-Unterschieden bei den print()-Befehlen geht mir nicht mehr aus dem Kopf. W?re mal jemand bereit, ein Test-Script dazu zu schreiben? Wenn man damit wirklich ein PHP-Script "tunen" k?nnte, w?re das eine feine Sache. (Notfalls auch mit echo() statt mit print(f)() ).

    *nachtr?glich_einf?g*
    Die komplette Adresse f?r Bastelwillige:
    ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/Contrib/


  13. Autor dieses Themas

    0******a

    alopex schrieb:
    ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/
    Irgendwo d?rfte ein Paket f?r deinen C-Compiler dabei sein ...

    Nee, isch schreib mir meine Bibliotheken lieber selber...
  14. k**********e

    das du alle ge?ffneten tags schlie?t ist ja niedlich (sorry^^)
    aber die formatierung geht dabei fl?ten^^, da du nicht wei? wo es sonst geschlo?en worden w?re. also ab ans ende damit...
    was den text echt sch**** aussehen lassen kann. gelle?

    ich w?rd ja einen kleinen spam beitrag in dein dingda schreiben und dir dann zeigen was ich meine... *gleich ma schreib*


  15. alopex schrieb:
    [...]
    P.S.:
    Die Sache mit dem Performance-Unterschieden bei den print()-Befehlen geht mir nicht mehr aus dem Kopf. W?re mal jemand bereit, ein Test-Script dazu zu schreiben? Wenn man damit wirklich ein PHP-Script 'tunen' k?nnte, w?re das eine feine Sache. (Notfalls auch mit echo() statt mit print(f)() ).
    [...]


    Bitte sch?n...
    -> http://lucas9991.lima-city.de/echo_vs_print.php
    Das sind aber legendlich Vergleichswerte, denn es wird einfach ein langer String ausgegeben und verglichen welche Funktion l?nger braucht!



  16. alopex schrieb:
    [...]
    P.S.:
    Die Sache mit dem Performance-Unterschieden bei den print()-Befehlen geht mir nicht mehr aus dem Kopf. W?re mal jemand bereit, ein Test-Script dazu zu schreiben? Wenn man damit wirklich ein PHP-Script 'tunen' k?nnte, w?re das eine feine Sache. (Notfalls auch mit echo() statt mit print(f)() ).
    [...]


    Bitte sch?n...
    -> http://lucas9991.lima-city.de/echo_vs_print.php
    Das sind aber legendlich Vergleichswerte, denn es wird einfach ein langer String ausgegeben und verglichen welche Funktion l?nger braucht!


    lol
    Sicher, das du da nicht was falsch gemacht hast?


    Die Funktion "echo()" ben?tigte -0.45411 Sekunden f?r die Ausgabe
    Die Funktion "print()" ben?tigte 0.21723 Sekunden f?r die Ausgabe



    Die Funktion "echo()" ben?tigte 0.00027 Sekunden f?r die Ausgabe
    Die Funktion "print()" ben?tigte -0.39623 Sekunden f?r die Ausgabe


    Jens
  17. Ach lucas991, du baust langsam ab:


    Die Funktion "echo()" ben?tigte 0.58902 Sekunden f?r die Ausgabe
    Die Funktion "print()" ben?tigte -0.76065 Sekunden f?r die Ausgabe


    Dann w?re ja print() tats?chlich schneller als echo(). Und was wohl Einstein dazu sagen w?rde, dass PHP-Funktionen in der Zeit r?ckw?rts funktionieren? Hoffentlich hast du nicht meine essentials.php dazu benutzt (die Funktion calculate_runtime()).

    @jacr

    Da du hier schon mitliest, h?ttest du wenigstens auch deine(?) BBCode-Library vorstellen k?nnen:
    http://jacr.milten.lima-city-webspace.de/wiki/index.php/BBCode%3Aphp
    Es schlagen sich sicherlich noch andere mit diesen Formatierungsproblemen herum. Da sind Beispielcodes immer eine Hilfe.

    @0-checka

    Verr?tst du uns auch irgendwann mal die L?sung des Problems oder wenigstens die exakte Fehlerstelle, die du gemeint hast?

    P.S.: Die fehlende Neun ist Absicht (wegen dem Abbau ...).


    *nachtr?glich_einf?g (2005-06-26)*

    @jacr

    Ich zitiere mich mal selbst (mein erster Post in diesem Thread):

    http://dynacker.dotgeek.org/printvsecho/


    ?tsch, ich war erster! Durch diesen Link (von der PHP-Online-Doku) bin ich ja erst auf das Geschwindigkeitsph?nomen gesto?en. Bisher war ich der Meinung, echo() und print() seien nur Synonyme f?r ein und diesselbe PHP-interne Funktion, so ?hnlich wie es bei split() und explode() ist.

    @t4sh


    'print' ben?tigte 0.00022792816162109 Sekunden f?r die Ausgabe.
    'echo' ben?tigte 8.1062316894531E-05 Sekunden f?r die Ausgabe.


    Die Laufzeiten d?rften wohl etwas zu weit auseinanderliegen. Wie sieht der Quellcode aus?

    *noch_nachtr?glicher_einf?g* (2005-07-05)

    Ich habe jetzt auch einen Benchmark-Test:
    http://alopex.pyrokar.lima-city.de/index.php/PHP/Geschwindigkeitsvergleich.html

    Die ermittelten Zeiten sind aber eher verwirrend. Kann an meinem Quellcode liegen. Ich hab ihn mit draufgepackt. Wer will, kann ihn verbessern.
  18. t**h

    http://t4sh.xardas.lima-city.de/echo_vs_print.php

    Das ganze verwundert mich jetzt ein wenig, da wenn ich das ganze lokal ausprobiere, echo wieder schneller ist ... auf lima-city, allerdings print wobei der Wert f?r echo auch nicht ann?hernd an mein lokales Ergebnis rankommmt :confused:
  19. Hallo

    Das habe ich mit einer bekannten Suchmaschine gefunden.
    http://dynacker.dotgeek.org/printvsecho/

    Jens
  20. Autor dieses Themas

    0******a

    Na mal wieder zum Thema:
    Der Fehler liegt darin, dass zwar ?berpr?ft wird, dass f?r ?ffnende Tags auch schliessende vorhanden sind, aber wenn der schliessende vor dem ?ffnenden notiert wird, wird die Formatierung nicht korrekt beendet, sondern erstreckt sich auch auf nachfolgende Teile.
  21. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!