Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] MySQL via PHP Include - merkwürdiges Problem

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] MySQL via PHP Include - merkwürdiges Problem

    Hallo Leute!

    Ich bin mit meinem Latein gerade total am Ende. Ich habe ein eigenes kleines Skript gebastelt, welches die Seitenaufrufe einer Webpage in eine MySQL-Tabelle schreiben soll.

    Das Skript sieht wie folgt aus:
    PHP-Code:
    $hitip $_SERVER['REMOTE_ADDR'];
    $hitref $_SERVER['HTTP_REFERER'];
    $hitbrowser $_SERVER['HTTP_USER_AGENT'];
    $hitisp gethostbyaddr($_SERVER['REMOTE_ADDR']);
    $hittime date("d.m.Y H:i");

    $suchelement "meine-seite-xxx.de";
    $getpos strpos($hitref$suchelement);
    if (
    $getpos !== false) {
    $hitstatus 1;
    }
    elseif(
    $hitref == "") {
    $hitstatus "E"; }
    else {
    $hitstatus 2; }

    $hithost "meine-seite-xxx.de";
    $hituser "xxxx";
    $hitpass "xxxx";
    $hitdaba "xxxx";
    $hitdz mysql_connect($hithost$hituser$hitpass);
    mysql_select_db($hitdaba$hitdz);
             
    $query "INSERT into pagehits"
             
    ."(hitid, hittime, hitip, hitisp, hitref, hitbrowser, hitstatus)"
             
    ."VALUES "
             
    ."('$hitid', '$hittime', '$hitip', '$hitisp', '$hitref', '$hitbrowser', '$hitstatus')";
              
    mysql_close($hitdz); 
    Soweit so gut, das ganze funktioniert auch, aber...

    ...ich habe dieses Skript in eine extra Datei geschrieben (logschreiben.php), die ich via PHP in die entsprechenden Webseiten einbinde.
    Das ganze sieht wie folgt aus:

    Code:
    <?php
    include 'logschreiben.php';
    ?>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <!-- blubb blabla -->
    </html>
    Das für mich völlig unverständliche:
    Alle Seiten des Webprojekts (insgesamt 8 Seiten) liegen im gleichen Verzeichnis und sind genau gleich aufgebaut, alle beginnen exakt wie im obigen HTML-Code angegeben.
    Trotzdem verursachen die unterschiedlichen acht Seiten völlig unterschiedliche Anzahlen an MySQL-Tabelleneinträgen. Der Datensatz soll pro Seitenaufruf logischer Weise nur einmal in die DB geschrieben werden. Bei 2 von 8 Seiten funktioniert das auch, die anderen Seiten erzeugen 3, 8 oder sogar 11 identische Datensätze. Ich sehe überhaupt keinen logischen Grund für diese Tatsache, da das Skript auf allen Seiten, an gleicher Stelle, gleich eingebunden ist....

    Hat da jemand mal einen Tip für mich?



    EDIT:
    Habe das ganze auch mit require getestet... aber es kommt zum selben Problem...

  • #2
    evtl. hast du es auf seiten eingefügt, die du auch auf anderen seiten einbindest.

    versuchs mal mit
    PHP-Code:
    include_once 
    dass bindet die seite nur einmal ein, wenn sie schon eingebunden wurde wird der rest ignoriert

    Kommentar


    • #3
      Zitat von Screeze Beitrag anzeigen
      versuchs mal mit
      PHP-Code:
      include_once 
      dass bindet die seite nur einmal ein, wenn sie schon eingebunden wurde wird der rest ignoriert
      Vielen Dank für den Tipp - leider funktioniert es auch nicht mit include_once.
      Ich verstehe halt nicht, warum ein und dasselbe Skript unterschiedliche Anzahlen an Datensätzen erzeugt... es ist gerade so, als würde das Skript mehrfach hintereinander ausgeführt.

      Kommentar


      • #4
        mach doch mal ein echo 'test' in das Script rein und schau dir an, ob es nicht vielleicht doch mehrfach abläuft.


        BTW
        Du nutzt Elemente aus $_SERVER in MySql-Statements und solltest dir darüber bewust sein, dass dieser Array vom User kommt und mithin wie $_POST, $_GET und $_COOKIE mit Vorsicht zu betrachten ist.

        Kommentar


        • #5
          habe jetzt mal ein echo "Hallo"; in das Skript gebastelt und dieses Hallo wird nur 1x ausgegeben

          Kommentar


          • #6
            So, das Problem ist erledigt!

            Ich habe im oben geposteten PHP-Code einfach die Variable $query in $query3 umbenannt und jetzt funktioniert es.
            Ich kann zwar kein Verständnis dafür aufbringen und schon gar keine Logik erkennen, aber Hauptsache es läuft.

            Wenn mir jedoch jemand erklären kann, warum es zwischen dem Variablennamen $query und $query3 einen Unterschied gibt, der sich auf die Funktion des Skriptes auswirkt, bin ich um Aufklärung sehr dankbar!

            Kommentar


            • #7
              wage vermutung: du benutzt an andrer stelle in deinem script $query, und überschreibst den ursprünglichen wert durch dein include, weshalb bei jedem benutzen von $query dein includeter aufgerufen wird. das würde es erklären... du musst bedenken, dass wenn du etwas includest, das script nicht extern läuft, sondern bestandteil der aufrufenden seite wird.

              Kommentar


              • #8
                Zitat von Screeze Beitrag anzeigen
                wage vermutung: du benutzt an andrer stelle in deinem script $query, und überschreibst den ursprünglichen wert durch dein include, weshalb bei jedem benutzen von $query dein includeter aufgerufen wird. das würde es erklären... du musst bedenken, dass wenn du etwas includest, das script nicht extern läuft, sondern bestandteil der aufrufenden seite wird.
                Ja, nach genauerer Betrachtung muss ich feststellen, dass Du Recht hast. $query hatte ich tatsächlich mehrfach verwendet
                Allerdings nicht 9x!

                Kommentar

                Lädt...
                X