Frank Gläser: Wieso kommt hier ein Fehler?

Hallo,
habe folgende Abfrage,

$dbanfrage = "INSERT INTO $tabelle (dbip, uhrzeit, userserver, seite, vonhttp, unixt) VALUES ('$ip', '$uhrzeit', '$userserver', '$seite', '$vonhttp', '$timestamptree')";

Allerdings kommt hier folgende Fehlermeldung:

Parse error: parse error, unexpected ';' in /www/htdocs/frankb/abfr/skript.php on line 51

  1. Hi,

    habe folgende Abfrage,
    $dbanfrage = "INSERT INTO $tabelle (dbip, uhrzeit, userserver, seite, vonhttp, unixt) VALUES ('$ip', '$uhrzeit', '$userserver', '$seite', '$vonhttp', '$timestamptree')";

    das ist eine String-Verarbeitung. Wie die daraus resultierende Abfrage lautet, wäre in der Tat sehr viel interessanter.

    Parse error: parse error, unexpected ';' in /www/htdocs/frankb/abfr/skript.php on line 51

    Was steht kurz vor/nach Zeile 51?

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hier der ganze quellcode

      <?

      $timestamp = time();

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

      include("pswd.php");

      $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";

      $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. Moin Moin !

        $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))

        )

        ... or die ( $dbanfrage="string"; if () )

        Da würde ich wahrscheinlich auch einen Parse Error von mir geben ... ;-)

        Alexander

        --
        Nein, ich beantworte keine Fragen per eMail. Dafür ist das Forum da.
        Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".
        1. Aber wie soll ich das denn sonst machen??
          Ich mein, mit if geht das ganze ja auch nicht so einfach oder??

          kann ich das so schreiben:

          if ($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";

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

          $timestamptree = $addition;

          $update = mysql_query($aendern)
          )
          else
          {
          $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. Moin Moin !

            Aber wie soll ich das denn sonst machen??
            Ich mein, mit if geht das ganze ja auch nicht so einfach oder??

            kann ich das so schreiben:

            Nein. Vielleicht solltest Du erstmal ein wenig in der PHP-Doku lesen. Und du solltest vielleicht etwas mehr nachdenken, bevor Du ans Code schreiben gehst.

            Ein bewährtes Schema:

            function dosomething(...) # returns error message or empty string if ok
            {
              prepare step 1;
              code=execute step 1;
              if (code != ok) return "step 1 failed";
              prepare step 2;
              code=execute step 2;
              if (code != ok) return "step 2 failed";
              finish;
              return "";
            }

            error=dosomething(...);
            if (retval!="") {
              print "panic: "+error;
            } else {
              print "ok";
            }

            DAS IST KEIN PHP! (Das ist nichtmal JS, perl oder C.)

            Und Java-Programmierer rotieren, weil sie das Ganze sinngemäß so schreiben (müssen):

            try {
              prepare step 1;
              code=execute step 1;
              if (code != ok) throw new Exception("step 1 failed");
              prepare step 2;
              code=execute step 2;
              if (code != ok) throw new Exception("step 2 failed");
              finish;
              print "ok";
            } catch (Exception e)  {
              print "panic: "+e.toString();
            }

            Oder à la Basic / Batch:

            10  prepare step 1;
             20  code=execute step 1;
             30  if (code == ok) goto 40
             31  let error="step 1 failed";
             32  goto 100
             40  prepare step 2;
             50  code=execute step 2;
             60  if (code == ok) goto 70
             61  let error="step 2 failed";
             62  goto 100
             70  finish;
             80  print "ok";
             90  end
            100  print "panic: "+e.toString();

            Siehst Du das Schema?

            Alexander

            --
            Nein, ich beantworte keine Fragen per eMail. Dafür ist das Forum da.
            Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".
            1. So,
              ich hab jetzt den veränderten Code noch mal hier hin gestellt:

              <?

              $timestamp = time();

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

              include("pswd.php");

              $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";

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

              $timestamptree = $addition;

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

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

              }

              ?>

              Ist es nicht so, dass wenn das $update nicht funktioniert hat der wert FALSE zurückgegeben wird, un dann automatisch das "else" in kraft tritt??

              Gruß
              martin

              1. jepp, sollte so sein

                1. Aber irgendwas funktioniert da trotzdem noch nicht.
                  ------------

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

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

                  }    //dies ist Zeile 55 ! ! ! !
                  -------
                  Habe folgende Fehlermeldung:
                  -------
                  Parse error: parse error, unexpected '}' in /www/htdocs/user/politik/statistik.php on line 55
                  -------
                  Siehe Zeile 55

                  Gruß
                  frank

                  1. mach mal

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

                    also das Semikolon setzen

                    1. mach mal

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

                      also das Semikolon setzen

                      Hm, ne da sagt er, Unexpectes ;

                      Ich check es einfach nicht

                      1. Hi,

                        (mysql_db_query ($dbuser, $dbanfrage, $sql));
                        Ich check es einfach nicht

                        ich "check" nicht, was Du mit den vielen Klammern bezweckst.

                        Cheatah

                        --
                        X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
                        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
                        X-Will-Answer-Email: No
                        X-Please-Search-Archive-First: Absolutely Yes
                        1. Also ich hab es jetzt mal auf die "meiner Meinung nach" wichtigen Klammern gekürtzt:

                          if ($update = mysql_query($aendern) )
                                 { //wenn ich diese Klammern nicht setze, dann bekomme ich einen Fehler
                                 }
                                 else
                                {  // und diese Klammern müssen wohl auch sein
                                 $dbanfrage = "INSERT INTO $tabelle (dbip, uhrzeit, userserver, proatseite, vonhttp, unixt) VALUES ('$ip', '$uhrzeit', '$userserver', '$proatseite', '$vonhttp', '$timestamptree')";

                          mysql_db_query ($dbuser, $dbanfrage, $sql)

                          }

                          ?>

                          1. Hallo

                            mysql_db_query ($dbuser, $dbanfrage, $sql)

                            warum $dbuser?
                            da sollte der Datenbankname stehen

                            1. Ja, das ist schon richtig so,
                              bei mir ist das richtig so, weil ich immer nur pro Subdomail eine Datenbank einrichten kann.
                              Und die heißt dann halt direkt wie der Subdomain User
                              Gruß
                              Frank

                        2. Hallo

                          ich "check" nicht, was Du mit den vielen Klammern bezweckst.

                          vielleicht hat er die so lieb ^^

                  2. Hallo Frank,

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

                    hat die Klammer um die Funktion einen tieferen Sinn?

                    Grüße aus Nürnberg
                    Tobias

                    --
                    Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
      2. $update = mysql_query($aendern) or die

        (

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

        ähm was soll das denn werden??
        die() erwartet einen String und nicht die belegung einer Variablen.. oder sollen die ( und ) etwa {   } sein? dann würd da viell ein If oder so fehlen

        der fehler kommt, weil du jetzt da stehen hast

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

        und das ist sicher nicht das was du willst !

        1. Ich will, dass wenn das Updaten nicht funktioniert hat,
          dass dann eine ganz neue Zeile in die Tabelle geschrieben wird.
          Gruß
          Martin

          1. versuche mal

            if (!$update = mysql_query($aendern)) {

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

            ... }

  2. Moin Moin !

    Sieh Dir mal die nähere Umgebung der Zeile an, oftmals fehlen irgendwo vorher Quotes oder sind doppelt. Ein guter Editor kann sowas finden oder zumindest die Suche erleichtern.

    Alexander

    --
    Nein, ich beantworte keine Fragen per eMail. Dafür ist das Forum da.
    Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".