bleicher: "Geiterfunktion"?

Grüße,
bin wieder mal dabei verrückt zu werden-
was ein einfaches logScript sein sollte-

  
<?php  
if($_SESSION['sts']!="1"){  
  
echo "####################################";  
$ip=mysql_real_escape_string(htmlentities($_SERVER['REMOTE_ADDR']));  
$referrer=mysql_real_escape_string(htmlentities($_SERVER['HTTP_REFERER']));  
$agent=mysql_real_escape_string(htmlentities($_SERVER['HTTP_USER_AGENT']));  
$adress=mysql_real_escape_string(htmlentities($_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']));  
  
$log="INSERT INTO `log` (`ip` ,`referrer` ,`agent` ,`adress`)VALUES ('$ip', '$referrer', '$agent', '$adress');";  
  
sql($log);  
}  
$_SESSION['sts']="1";  
?>  

der wird in den index.php includet.

macht mich nun verrückt - es kommt nämlich bei JEDEM Aufruf der Site ein neues EIntrag in die Tabelle.

die Zeile mit "###" sollte der KOntrolle dienen - die wird nicht merhfach ausgegeben, anscheinend wird das if() richtig ausgwertet - $_SESSION[] wird auch richtig gesetzt (print_r zeigt den entpsrechendne ientrag)

nur kommt bei jedem Refresh eine weitere Zeile in die datenbank ;(

habe die sql() um entsprechendes echo erweitert - DIE wird auch NICHT ausgeführt (asugabe erfolgt wirklich nur einmalig)

bin ratlos.

Hoffe auf baldige Hilfe oder gute klapsmühlenempfehlung

MFG
bleicher

  1. Ahoi,

    wenn sts nicht 1, schreibs rein.

    dann setze sts auf 1.

    ist das sinnig oder hab ich was falsch verstanden?

    wo aber beginnt die session? hast du dir zu dem zeitpunkt im if mal ein var_dump($_SESSION) ausgegeben um zu schauen, wie das $_SESSION["sts"]aussieht?

    Dank und Gruß,

    frankx

    1. Grüße,

      wenn sts nicht 1, schreibs rein.

      dann setze sts auf 1.

      so habs vorgesehen

      ist das sinnig oder hab ich was falsch verstanden?

      schon richtig - die idee ist, das besucherskript jeden besucher nahc möglichkeit einmal auswertet - um unnötigviele einträge zu vermeiden

      wo aber beginnt die session? hast du dir zu dem zeitpunkt im if mal ein var_dump($_SESSION) ausgegeben um zu schauen, wie das $_SESSION["sts"]aussieht?

      session wird in der index.php in der 2en Zeile initialisiert - habe es mit

      print_r($_SESSION);

      versucht - sts wird reingeschrieben - wie gesagt - dies IF wird tatsächlich nur EINMAL ausgeführt  die zeile mit ######### wird nur einmal angezeigt ;(

      MFG
      bleicher

      1. Hi,

        versucht - sts wird reingeschrieben - wie gesagt - dies IF wird tatsächlich nur EINMAL ausgeführt  die zeile mit ######### wird nur einmal angezeigt ;(

        verstehe ich nicht, denn wenn die if ausgeführt wird "muss" ja ein neuer Eintrag entstehen.

        Hans

        1. Grüße,

          | versucht - sts wird reingeschrieben - wie gesagt - dies IF wird tatsächlich nur EINMAL ausgeführt  die zeile mit ######### wird nur einmal angezeigt ;(
          |

          verstehe ich nicht, denn wenn die if ausgeführt wird "muss" ja ein neuer Eintrag entstehen.

          genau - beim ersten aufruf sehe ich die zeile mit ##### und ein neuer eintrag wird erstellt

          nur wird er auch nach JEDEM refresh erstellt - selbst wenn die ### NICHT angezeigt werden

          ich verstehe nicht was die einträge erzeugt ;( echo im sql() wird auch ordnungsgemäß nur beim ersten aufruf angezeigt.

          MFG
          bleicher

          1. Hi,

            ich verstehe nicht was die einträge erzeugt ;( echo im sql() wird auch ordnungsgemäß nur beim ersten aufruf angezeigt.

            also beim Refresh, keine Raute? Hmmm. Normalerweise würd ich auf ein Problem bei $_SESSION['sts']!="1" tippen und mal versuchen einen definitiven String zu nutzen also zb. $_SESSION['sts']!='abcde', aber da die Raute nicht kommt, ist das schleierhaft und nicht nachvollziehbar. Oder speichert deine sql() Funktion den Query nich irgendwo zwischen um ihn später einzusetzen?

            Hans

            1. Grüße,
              hab den if um else ergänzt - der wird auch angezeigt - was aber gaanz lustig ist - unter firefox tritt es nicht auf ;(

              gaanz genau betrachtet wird jedes mal Operas anfrage an
              locahost/favicon.ico
              geloggt - ?
              MFG
              bleicher

              1. Hi,

                hab den if um else ergänzt - der wird auch angezeigt - was aber gaanz lustig ist - unter firefox tritt es nicht auf ;(

                gaanz genau betrachtet wird jedes mal Operas anfrage an
                locahost/favicon.ico
                geloggt - ?

                Und, hast du ein Favicon angelegt?
                Wenn nein, wie sieht dein ErrorDocument für 404 aus? Kann es sein, dass da noch mal die index.php - oder ein anderes die Log-Funktion aufrufendes Script - ausgeliefert wird?

                MfG ChrisB

                --
                Light travels faster than sound - that's why most people appear bright until you hear them speak.
                1. Grüße,

                  Und, hast du ein Favicon angelegt?

                  nein

                  Wenn nein, wie sieht dein ErrorDocument für 404 aus? Kann es sein, dass da noch mal die index.php - oder ein anderes die Log-Funktion aufrufendes Script - ausgeliefert wird?

                  danke - das wars^^
                  MFG
                  bleicher

      2. Ahoi,

        dann nimm mal den mysql-code aus dem if raus. was ist dann? und zudem zum if ein "else", was dir statt rauten nichtrauten ausgibt.

        Dank und Gruß,

        frankx

  2. Moinmoin.

    Ich nix Ahnung von PHP, würde aber wie folgt "rangehen":

    1. Kein Echo - Schreibs Dir den Debug in ein Logfile mit absoluter Pfadangabe.

    2. mysql.log aktivieren und mim SQL im Script rumspielen.

    Testen und das Debug wie auch das mysql.log verfolgen.

    Grüße

  3. echo $begrüßung;

    $ip=mysql_real_escape_string(htmlentities($_SERVER['REMOTE_ADDR']));

    mysql_real_escape_string() ist ja schon mal gut. Aber was haben die HTML-Entitys in der Datenbank verloren? Die gehören ins HTML und nur dorthin. Außerdem reicht htmlspecialchars().

    echo "$verabschiedung $name";