Martin Linden: Kann ich eine DB abdrage auch als variabele speichern?

Hallo,
Kann mir jemand sagen, was an folgendem code falsch ist?

$abfrage = "SELECT * FROM $tabelle";
       $ergebnis = mysql_query($abfrage);

$dbip2 = $row->dbid ".<br>." $ip;
       $uhrzeit2 = $row->uhrzeit".<br>."$now;
       $userserver2 = $row->userserver".<br>."$userserver;
       $proatseite2 = $row->proatseite".<br>."$proatseite;
       $vonhttp2 = $row->vonhttp".<br>."$vonhttp;

$aendern = "UPDATE $tabelle Set dbip = '$dbip2', uhrzeit = '$uhrzeit2', userserver = '$userserver2', proatseite = 'proatseite2', vonhttp = '$vonhttp2' WHERE dbip = '$ip' AND WHERE unixt > $timestamp";

Gruß
Martin

  1. Ja auf jeden fall. Einfach $variable = ... oder meinst du jetzt ne bestimmt abfrage?

    1. Ja, ich meinte die abfrage, in dem Quelltext .

      ich schreib hier noch mal den kompletten Quelltext hin.
      Er soll meine eigene Userstatistik updaten.
      Sprich, wenn die IP adresse schon bekannt ist, und die Unixtime dieser IP adresse nicht älter als 30 Minuten (1800 Sekunden) ist, dann soll keine Neue Zeile in die Datenbank geschrieben werden, sodern dann sollen die alten Werte ausgelesen werden, und die Neuen Werte sollen dann hinzugefügt werden.

      Und wenn die IP nicht bekannt ist oder die Unixtime älter als 30 min ist, dann soll eine ganz neue Zeile Hinzugefügt werden.

      Hier der Quelltext:

      <?

      $timestamp = time();

      $datum = date("d.m.Y",$timestamp);
      $uhrzeit = date("H:i",$timestamp);
      $now = "$datum $uhrzeit";

      include("PASSWORT");

      $ip = $_SERVER['REMOTE_ADDR'];
      $vonhttp = $_SERVER["HTTP_REFERER"];
      $uhrzeit = $now;
      $proatseite = $_SERVER["REQUEST_URI"];
      $ip = getenv("REMOTE_ADDR");

      $ip=getenv("REMOTE_ADDR");
      $userserver = gethostbyaddr($ip);

      $tabelle = "userstatistik";

      $sql = mysql_connect($dbhost, $dbuser, $dbpswd)
        or die("<br>Konnte nicht auf die Datenbank Verbinden");

      $abfrage = "SELECT * FROM $tabelle";
             $ergebnis = mysql_query($abfrage);

      $dbip2 = $row->dbid ".<br>." $ip;
             $uhrzeit2 = $row->uhrzeit".<br>."$now;
             $userserver2 = $row->userserver".<br>."$userserver;
             $proatseite2 = $row->proatseite".<br>."$proatseite;
             $vonhttp2 = $row->vonhttp".<br>."$vonhttp;

      $aendern = "UPDATE $tabelle Set dbip = '$dbip2', uhrzeit = '$uhrzeit2', userserver = '$userserver2', proatseite = 'proatseite2', vonhttp = '$vonhttp2' WHERE dbip = '$ip' AND WHERE unixt > $timestamp"; // Hier wird geguckt ob die IP schon bekannt ist, und pb die Timestamp älter als 1800 Sekunden ist.

      $halbestd = 1800;
             $addition = $timestamp + $halbestd;

      $timestamptree = $addition;

      $update = mysql_query($aendern) or die (
             $dbanfrage = "INSERT INTO $tabelle (dbip, uhrzeit, userserver, proatseite, vonhttp, unixt) VALUES ('$ip', '$uhrzeit', '$userserver', '$proatseite', '$vonhttp', '$timestamptree')";

      if (mysql_db_query ($dbuser, $dbanfrage, $sql))
              );

      ?>

      1. Hi,

        leider muß ich hier weitermachen, aber das sieht doch ganz gut aus. Also geh logisch vor wie der Computer selbst. Du kriegst VAriablen rein und vergleichst sie, ob Sie bereits exestieren. Also hier kommt dann ein if hin wenn die noch nicht da ist und somit ein neuer DAtensatz und wenn es die schon gibt das das else mit dem Update.

        Cu

        1. Folgende Fehlermeldung kommt zu der mit XX gekennzeichneten Zeile:

          Parse error: parse error, unexpected '>' in /www/htdocs/martinli/politik/statistik.php on line 35

          »»XX      $dbip2 = $row->dbid ".<br>." $ip;

          $uhrzeit2 = $row->uhrzeit".<br>."$now;
                 $userserver2 = $row->userserver".<br>."$userserver;
                 $proatseite2 = $row->proatseite".<br>."$proatseite;
                 $vonhttp2 = $row->vonhttp".<br>."$vonhttp;

          Das wird wohl auch für die restlichen Zeilen hier gelten??

          Gruß
          Martin

          1. Hallo Martin,

            Parse error: parse error, unexpected '>' in /www/htdocs/martinli/politik/statistik.php on line 35

            XX      $dbip2 = $row->dbid ".<br>." $ip;

            vertausch mal jeweils die Anführungszeichen und Punkte:
              $dbip2 = $row->dbid."<br>".$ip;

            Das wird wohl auch für die restlichen Zeilen hier gelten??

            ja

            Grüße aus Nürnberg
            Tobias

            --
            Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
      2. Folgende Fehlermeldung kommt zu der mit XX gekennzeichneten Zeile:

        Parse error: parse error, unexpected '>' in /www/htdocs/martinli/politik/statistik.php on line 35

        »»XX      $dbip2 = $row->dbid ".<br>." $ip;

        $uhrzeit2 = $row->uhrzeit".<br>."$now;
               $userserver2 = $row->userserver".<br>."$userserver;
               $proatseite2 = $row->proatseite".<br>."$proatseite;
               $vonhttp2 = $row->vonhttp".<br>."$vonhttp;

        Das wird wohl auch für die restlichen Zeilen hier gelten??

        Gruß
        Martin

  2. Hello Martin,

    Kann mir jemand sagen, was an folgendem code falsch ist?

    $abfrage = "SELECT * FROM $tabelle";
           $ergebnis = mysql_query($abfrage);

    $dbip2 = $row->dbid ".<br>." $ip;
           $uhrzeit2 = $row->uhrzeit".<br>."$now;
           $userserver2 = $row->userserver".<br>."$userserver;
           $proatseite2 = $row->proatseite".<br>."$proatseite;
           $vonhttp2 = $row->vonhttp".<br>."$vonhttp;

    $aendern = "UPDATE $tabelle Set dbip = '$dbip2', uhrzeit = '$uhrzeit2', userserver = '$userserver2', proatseite = 'proatseite2', vonhttp = '$vonhttp2' WHERE dbip = '$ip' AND WHERE unixt > $timestamp";

    Ich kann mir denken, was Du erreichenn willst.
    Du musst Dir dabei einfach nur Gedanken über den Evaluierungszeitpunkt machen.
    Die Werte werden den Variablen zum Zeitpunkt der Zuweisung an $abfrage zugewiesen.

    Nun muss man entweser dafür sorgen dass der String erst später evaluiert wird. Dafür gibt es die Funktion eval() http://de.php.net/manual/de/function.eval.php oder man baut eine eigene Funktion um die Abfrage drum herum, der man dann die relevanten Werte übergibt.

    function select_recs(Parameterliste)
    {
     $abfrage = "SELECT * FROM $tabelle";
            $ergebnis = mysql_query($abfrage);

    $dbip2 = $row->dbid ".<br>." $ip;
            $uhrzeit2 = $row->uhrzeit".<br>."$now;
            $userserver2 = $row->userserver".<br>."$userserver;
            $proatseite2 = $row->proatseite".<br>."$proatseite;
            $vonhttp2 = $row->vonhttp".<br>."$vonhttp;
    }

    Dann ist die Lebensdauer von $abfrage ja immer auf die lebensdauer der Funktion beschränkt und wird bei jedem Aufruf der Funktion neu zugewiesen.

    Harzliche Grüße aus http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau