Dynamische js datei mit php

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

  • Dynamische js datei mit php

    hallo

    ich habe ein script geschrieben, das die ip des besuchers in die dantenbank speichert mit einem timestamp.
    dann wird ein js script aussgegeben (per echo)

    beim zweiten aufruf wird geprüft, ob die ip schon existiert , wenn ja dan
    wind ein anderes js script ausgegeben.

    wenn ich das script direct aufrufe, und mehrmals aktualisiere sehe ich das jedes 2 mal wieder von vorne anfängt, und in der db weden die einträge überschrieben. was auch komisch ist.

    könnt ihr mir bitte helfen, ich weiss echt nicht warm es nicht geht.

    mfg Roland

    Das Script:

    PHP-Code:

    <?php
    /* Einstellungen */


    /* Zeit in sekunden in dem das neue fenster nicht angezeit werden soll */
    $max_no_script 3600;   // 3600 Sekunden = 1 Stunde



    /* Ende Einstellungen Nichts mehr ändern */



    if ($_SERVER["HTTP_X_FORWARDED_FOR"]) {
            
    $ip $_SERVER["HTTP_X_FORWARDED_FOR"];
    } else {
            
    $ip $_SERVER["REMOTE_ADDR"];


    //verbindungsaufbau
    mysql_connect("localhost","root","xxx") or die ("Keine Verbindung moeglich");
    mysql_select_db("xxx") or die ("Die Datenbank existiert nicht");
    clear(); // löscht alle zeilen mit ips die ällter als 1 h sind (die func ist unten)
    $ergebnis mysql_query("SELECT * FROM `ip_log` WHERE `ip` = '".$ip."'");

    if (
    mysql_num_rows($ergebnis) > "0"){
        echo 
    "function winopen(){\n";
        echo 
    "\n";
        echo 
    "}\n";
        
    } else {
        
    $time=time(); 
        
    mysql_query("INSERT INTO `ip_log` (`id`, `ip`, `time`) VALUES ('', '".$ip."', '".$time."')");
        echo 
    "function winopen(){\n";
        echo 
    "window.open(\"http://domain.ch\",width=800,height=800)\n";
        echo 
    "}\n";
    }


    function 
    clear(){

        
    $ergebnis2 mysql_query("SELECT * FROM `ip_log`");


        while(
    $row mysql_fetch_object($ergebnis2)){
                
    $ende time();
                
    $zeit $ende $row->time;
                if(
    $zeit $max_no_script){
                        
    mysql_query("DELETE FROM `ip_log` WHERE `id` = '".$row->id."'");
                        
                }
        }
    }


    ?>
    Zuletzt geändert von Rolandbar; 02.01.2005, 12:10.
    Onlie Browsergame: http://www.war-of-empire.de <-- 2. Weltkrieg

  • #2
    Wie kommt die Variable $max_no_time in die Funktion clear?

    Warum löschst du in deiner DB eigentlich jede Zeile mit einem einzelnen Query?

    Warum speicherst du Zeiten nicht in den dafür vorgesehenen Datentypen (DATETIME, TIMESTAMP, etc)?

    OffTopic:
    W T F ?
    hopka.net!

    Kommentar


    • #3
      Wie kommt die Variable $max_no_time in die Funktion clear?
      $max_no_time existiert nicht sie heist $max_no_script und die wird bei
      der if abfrage gebraucht



      Warum löschst du in deiner DB eigentlich jede Zeile mit einem einzelnen Query?
      Mir ist keine andre lösung eingefalen, wir ich die geschieckter löschen könnte



      Warum speicherst du Zeiten nicht in den dafür vorgesehenen Datentypen (DATETIME, TIMESTAMP, etc)?
      wuste ich nicht das es die gibt


      W T F ?
      hä????
      Onlie Browsergame: http://www.war-of-empire.de <-- 2. Weltkrieg

      Kommentar


      • #4
        hi rolandbar,

        um dein script nachzubauen, wäre zumindest die tabellenstruktur deiner datenbank nicht schlecht.

        PHP-Code:
        if (mysql_num_rows($ergebnis) > "0"
        bei dieser zeile würde ich die 0 nicht als string übergeben, das kann zu falschen interpretationen führen.

        dein function clear kannst du auch verbessern / verkürzen. wenn du z.b. einen Timestamp als spaltentyp benutzt, dann kannst du dir die schleife sparen, weil eine einzige abfrage genügt in der form:

        Lösche alle zeilen von der tabelle xy in welcher der wert des Timestamp kleiner als jetzt minus intervalle ist.

        hoffe konnte dir eine kleine hilfe geben

        Kommentar


        • #5
          --
          -- Tabellenstruktur für Tabelle `ip_log`
          --

          CREATE TABLE `ip_log` (
          `id` int(32) NOT NULL auto_increment,
          `time` varchar(128) NOT NULL default '',
          `ip` varchar(128) NOT NULL default '',
          PRIMARY KEY (`id`)
          ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=75 ;

          die tabellenstruktur (achtung benutze mysql 4.1.7)

          danke für den tipp werde mir das mal genauer anschauen.
          Onlie Browsergame: http://www.war-of-empire.de <-- 2. Weltkrieg

          Kommentar


          • #6
            Original geschrieben von Rolandbar
            $max_no_time existiert nicht sie heist $max_no_script und die wird bei der if abfrage gebraucht
            Genau, die meinte ich
            Aber die ist innerhalb deiner Funktion trotzdem nicht bekannt, weil sie außerhalb der Funktion definiert wird - Stichwort lokale und globale Variablen.


            Und deine SQL-Schleife geht besser ungefähr so:
            Code:
            DELETE FROM ip_log WHERE time < ( UNIX_TIMESTAMP() - 3600 )
            hopka.net!

            Kommentar


            • #7
              ja jetzt geht es, vielen dank euch allen.

              mfg Roland
              Onlie Browsergame: http://www.war-of-empire.de <-- 2. Weltkrieg

              Kommentar

              Lädt...
              X