Ankündigung

Einklappen
Keine Ankündigung bisher.

Probleme mit Script nach Umstellung auf Mysqli

Einklappen

Neue Werbung 2019

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

  • Probleme mit Script nach Umstellung auf Mysqli

    Hallo Community,

    ich habe ein Script, welches mir auf einfach weiße ermöglicht, die Anzahl der Nutzer auf einer Seite festzustellen. Sind es mehr als 10 Nutzer wird weitergeleitet.

    Mein Problem ist, dass das Script unter MySql ohne Fehlermeldung funktioniert, während ich nach Umstellung auf Mysql I eine Fehlermeldung nach der Anderen bekomme:

    PHP-Code:
    <?php
        $sql 
    "SELECT
                    COUNT(*) as Anzahl
                FROM
                    Online
                WHERE
                    IP = '"
    .$_SERVER['REMOTE_ADDR']."'
                And 
                URL = '"
    .$_SERVER['REQUEST_URI']."'";
        
    $result mysql_query($sql) OR die(mysql_error());
        
    $row mysql_fetch_assoc($result);
        if(
    $row['Anzahl']) {
            
    // Nur Datum Updaten
            
    $sql "UPDATE
                        Online
                    SET
                        Datum = NOW()
                    WHERE
                        IP = '"
    .$_SERVER['REMOTE_ADDR']."'
                    And 
                URL = '"
    .$_SERVER['REQUEST_URI']."'";
            
    mysql_query($sql) OR die(mysql_error());
        } else {
            
    // Neuer eintra
            
    $sql "INSERT INTO Online
                        (IP, Datum, URL)
                    VALUES
                        ('"
    .$_SERVER['REMOTE_ADDR']."', NOW(),'".$_SERVER['REQUEST_URI']."' )";
            
    mysql_query($sql) OR die(mysql_error());
        }

        
    // alte Datensätze löschen
        
    $sql "DELETE FROM
                    Online
                WHERE
                    DATE_SUB(NOW(), INTERVAL 5 MINUTE) > Datum"
    ;
        
    mysql_query($sql) OR die(mysql_error());

        
    // Anzahl Ausgeben
        
    $sql "SELECT
                    COUNT(*) as Anzahl
                FROM
                    Online
                WHERE
                    URL = '"
    .$_SERVER['REQUEST_URI']."'";
        
    $result mysql_query($sql) OR die(mysql_error());
        
    $row mysql_fetch_assoc($result);
    if (
    $row['Anzahl'] > 10 ){
    header'Location: /tl/index.php/1047' ) ; }
     
    ?>
    Laut Abwärtskombatibliät, müsste ich ja einfach alle mysql durch mysqli ersetzen. Dies führt jedoch zu folgenden Fehlern:

    Code:
    Warning: mysqli_query() expects at least 2 parameters, 1 given in D:\xampp\htdocs\tltest\templates\counter.xhtml on line 10
    und

    Code:
    Warning: mysqli_error() expects exactly 1 parameter, 0 given in D:\xampp\htdocs\tltest\templates\counter.xhtml on line 10
    Nehme ich alle or die mysqli sachen raus... bleibt noch:

    Code:
    Warning: mysqli_query() expects at least 2 parameters, 1 given in D:\xampp\htdocs\tltest\templates\counter.xhtml on line 10
    Code:
    Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, null given in D:\xampp\htdocs\tltest\templates\counter.xhtml on line 11
    Wo genau liegt mein Fehler?


  • #2
    Wo genau liegt mein Fehler?
    Steht doch in den jeweiligen Fehlermeldungen!

    http://www.lmgtfy.com/?q=Warning%3A+...t+2+parameters

    mfg Wolf29
    while (!asleep()) sheep++;

    Unterschätze nie jemanden der einen Schritt zurück geht! Er könnte Anlauf nehmen.

    Kommentar


    • #3
      Wie interpretierst du denn eine Meldung wie diese?

      Warning: mysqli_query() expects at least 2 parameters, 1 given

      Kommentar


      • #4
        Das ist ja schon richtig... der erwartet 2 Paramater bekommt aber nur einen... aber warum erwartet er jetzt 2, wenn das Script unter Mysql ganz normal läuft?

        Kommentar


        • #5
          weils unter mysqli anders ist, d'oh
          http://php.net/manual/de/mysqli.query.php
          Relax, you're doing fine.
          RTFM | php.de Wissenssammlung | Datenbankindizes | Dateien in der DB?

          Kommentar


          • #6
            Die mysqli-Funktionen sind zwingend an die jeweilige DB-Verbindung gebunden (bzw. die mysqli-Instanz). Beim objektorientierten Aufruf ($mysqli->query(…)) besteht der Kontext über die Instanz, bei der prozeduralen Variante muss eben immer das Objekt mit übergeben werden.

            Bei mysql gab es die Option auch, der Parameter konnte aber weggelassen werden. (In dem Fall wurde die letzte geöffnete Verbindung angenommen.)

            Doku wurde ja verlinkt.

            Kommentar


            • #7
              Also müssen meine Aufrufe jetzt wie folgt aussehen....

              PHP-Code:
               $result mysql_query($myconnectSELECT
                              COUNT
              (*) as Anzahl
                          FROM
                              Online
                          WHERE
                              IP 
              '".$_SERVER['REMOTE_ADDR']."'
                          
              And 
                          
              URL '".$_SERVER['REQUEST_URI']."'"; ) 
              Correct?

              Kommentar


              • #8
                Nicht Korrekt, da fehlt ein "
                Die Deutsche Rechtschreibung ist Freeware! Du darfst sie kostenlos nutzen, allerdings ist sie nicht Open Source, d.h. Du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

                Kommentar


                • #9
                  Von der Idee her korrekt. Nur solltest du auch die mysqli-Funktion verwenden.

                  Escaping kann auch nie schaden. (Hier der Übersicht halber noch in sprintf gepackt.)

                  PHP-Code:
                  <?php

                  $myconnect 
                  mysqli_connect(/*...*/);

                  $query sprintf("
                      SELECT
                              COUNT(*) AS Anzahl
                      FROM
                              Online
                      WHERE
                              IP = '%s'
                          AND
                              URL = '%s'
                      "
                  ,
                      
                  mysqli_real_escape_string($myconnect$_SERVER['REMOTE_ADDR']),
                      
                  mysqli_real_escape_string($myconnect$_SERVER['REQUEST_URI'])
                  );

                  $result mysqli_query($myconnect$query);

                  Kommentar


                  • #10
                    Ich danke dir!.

                    Komischer Weise, gab es mit deiner Schreibweise ncoh ein Problem....
                    PHP-Code:
                    <?php
                    $myconnect 
                    mysqli_connect('localhost' ,'' ,'' ,''); 

                        
                    $result mysqli_query($myconnect"SELECT
                                    COUNT(*) as Anzahl
                                FROM
                                    Online
                                WHERE
                                    IP = '"
                    .$_SERVER['REMOTE_ADDR']."'
                                And 
                                URL = '"
                    .$_SERVER['REQUEST_URI']."'") ;
                        
                    $row mysqli_fetch_assoc($result);
                       

                       if(
                    $row['Anzahl']) {
                            
                    // Nur Datum Updaten
                            
                    mysqli_query($myconnect,"UPDATE
                                        Online
                                    SET
                                        Datum = NOW()
                                    WHERE
                                        IP = '"
                    .$_SERVER['REMOTE_ADDR']."'
                                    And 
                                URL = '"
                    .$_SERVER['REQUEST_URI']."'" ) ;
                        } else {
                            
                    // Neuer eintra
                             
                    mysqli_query($myconnect"INSERT INTO Online
                                        (IP, Datum, URL)
                                    VALUES
                                        ('"
                    .$_SERVER['REMOTE_ADDR']."', NOW(),'".$_SERVER['REQUEST_URI']."' )") ;
                        }

                        
                    // alte Datensätze löschen
                        
                    mysqli_query($myconnect"DELETE FROM
                                    Online
                                WHERE
                                    DATE_SUB(NOW(), INTERVAL 1 MINUTE) > Datum" 
                    ) ;

                        
                    // Anzahl Ausgeben
                        
                    $result mysqli_query($myconnect"SELECT
                                    COUNT(*) as Anzahl
                                FROM
                                    Online
                                WHERE
                                    URL = '"
                    .$_SERVER['REQUEST_URI']."'" ) ;
                        
                    $row mysqli_fetch_assoc($result);
                    if (
                    $row['Anzahl'] > 10){
                    header'Location: /tltest/index.php/test.html' ) ; }
                     
                    ?>
                    Damit funktioniert es nun wieder!

                    Kommentar

                    Lädt...
                    X