referrerscript problem=)

  • Hi leute,

    ich bin gerade dabei nen egenes referrer system zu programmieren und jetzt bekomme ich es einfach nicht hin, dass wenn der eintrag einer seite schon vorhanden ist dass dann die anzahl der besuche um eins erhöt wird, könnr ihr mir da evtl helfen? Also es geht nur um den unteren teil mit dem update...der rest funktioniert ja so wie ich es will^^
    Hier mein code:

  • Zuerst einmal:
    Warum ist es schlecht, mit dem Referer zu arbeiten?
    http://php.faq-page.net/q-http-referer.html

    Dann: wo hast du gelesen, dass man seinen Quellcode nicht ordentlich einrücken sollte?

    PHP
    $sql = "SELECT refs FROM websmsreferrer WHERE refs = '$ref'";
        $result = mysql_query($sql) OR die(mysql_error());
        if(!$result)


    Wenn $result false ist, stirbt dein Script schon bei "die", also ist diese Abfrage Quatsch

    PHP
    $anzahl="SELECT anzahl FROM websmsreferrer WHERE refs = '$ref'";
        $anzahlplus = $anzahl+1;


    Du addierst mit einem String!

    PHP
    $aendern = "UPDATE websmsreferrer SET anzahl = '$anzahlplus' WHERE ref = '$ref'";


    Das kann man alles vereinfachen:

    PHP
    $aendern = "UPDATE websmsreferrer SET anzahl = anzahl+1 WHERE ref = '$ref'";


    Und warum fehlt hier mysql_error:

    PHP
    $update = mysql_query($aendern);
    PHP
    elseif($result=true){


    Das ist eine Zuweisung, und wie oben schon erwähnt, völliger Quatsch.

    PHP
    $eintrag = "INSERT INTO websmsreferrer (id, refs, datum ) VALUES ('$ip', '$ref', '$datum' )";


    Da fehlt die Anzahl

    Fazit: Wegschmeißen und neu machen.

  • aalso einrücken kann ich ja noch, die anzahl wird standardmäßig in der datenbank auf eins gesetzt, dass mid dem addieren wusste ich nicht das sman es gleich dort reinschreiben kann, und meines erachtens is es nicht quatsch zu fragen ob die abfrage geklappt hat denn wie will ich den sonst unterscheiden wann jetzt geupdatet werden soll oder wann ein neuer eintrag geschrieben werden soll??

  • aalso einrücken kann ich ja noch


    Jau, wir Deppen können uns ja erst mal durch diese Buchstabenwüste quälen. :(

    und meines erachtens is es nicht quatsch zu fragen ob die abfrage geklappt hat


    Und ob das Quatsch ist! mysql_query liefert beim einem Select eine Resource-ID, völlig unabhängig davon, ob es Treffer gibt oder nicht! Und genau deshalb ist

    PHP
    if (! $result)


    völliger Blödsinn! Und sollte die Abfrage in die Hose gehen, schlägt "die" zu.


    denn wie will ich den sonst unterscheiden wann jetzt geupdatet werden soll oder wann ein neuer eintrag geschrieben werden soll??


    Vielleicht mit mysql_num_rows oder ein Count beim Select?!

  • so jetzt hab ichs gelöst und hoffentlich hat keinber mehr einwände=)

  • Naja, mir fällt da immer noch etwas auf. ;)

    $HTTP_SERVER_VARS['HTTP_REFERER']; ist veraltet, benutze $_SERVER['HTTP_REFERER'];

    PHP
    $eintrag = "INSERT INTO websmsreferrer (id, refs, datum ) VALUES ('$ip', '$ref', '$datum' )";


    Benutze den Typ date_time für das Datum in der MySQL-Tabelle, dann kannst du besser schreiben:

    PHP
    $eintrag = "INSERT INTO websmsreferrer (id, refs, datum ) VALUES ('$ip', '$ref', now() )";