Array-Problem bei Datenbankabfrage

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

  • Array-Problem bei Datenbankabfrage

    Hallo PHP-User,

    ich habe ein, für Euch warscheinlich, kleines Probelm und hoffe
    hier auf eine Hilfestellung oder Lösung des Problems.

    Ich habe folgendes Scrip :

    PHP-Code:
    <HTML>
    <
    HEAD>
    <
    TITLE>Abfrage der SQL-Tabelle Sortierte Liste</TITLE>
    </
    HEAD>
    <
    font size=4>Abfrage der SQL-Tabelle Sortierte Liste</font><br>

    <
    script language="php">
      
    $db_server "xxx";
    /* Datenbankname */
      
    $db_name "xxx1";
    /* Datenbankuser */
      
    $db_user "xxx";
    /* Datenbankpasswort */
      
    $db_passwort "xxx";
    $db = @MYSQL_CONNECT($db_server,$db_user,$db_passwort);

      
    //Wenn keine Checkbox geklickt ist, dann wird nur hostname benutzt

    if (empty($sortnach)) {

      
    $sortnach[] = "hostname";

    }

    //Bilden des benötigten Strings für SQL Query

    for ($i=0;$i<=count($sortnach)-1;$i++) {

      
    $statement .= $sortnach[$i];

      if (
    $i count($sortnach)) {

        
    $statement .= ", ";

      }

    }

    print 
    "sortiert nach $statement <br>";


    $abfrage MySQL_db_query("xxx","select $statement , count($sortnach) as hits from pphl_85245_logs as hits GROUP BY $statement ORDER BY hits DESC LIMIT 0,10");

    $z=MySQL_num_rows($abfrage);    
    $s=MySQL_num_fields($abfrage);    

    print 
    "<table border=1 bgcolor=lightgreen>\n";
      print 
    "<tr bgcolor=red>";
      for (
    $j=0$j<$s$j++) { $fn=MySQL_fieldname($abfrage,$j); print "<td><b>$fn</b></td>";}
      print 
    "</tr>";
      for (
    $i=0$i<$z$i++)
        {
          print 
    "<tr>\n";
          
    $zeile=MySQL_fetch_array($abfrage);
          for (
    $j=0$j<$s$j++) { print "  <td>$zeile[$j]</td>\n";}
          print 
    "</tr>\n";
        }
      print 
    "</table>\n";
      print 
    date("Y-m-d H:i:s");
    </
    script>

    <
    FORM action=award.php method=POST>

    Neu Sortieren nach:

      <
    input type=checkbox name=sortnach[] value="hostname">

      <
    input type=checkbox name=sortnach[] value="ip">

      <
    input type=checkbox name=sortnach[] value="referer">

      <
    input type=checkbox name=sortnach[] value="proxy">

      <
    input type=checkbox name=sortnach[] value="Proxy_ip">

      <
    input type=checkbox name=sortnach[] value="Proxy_hostname">



      <
    input type="submit" Value="Sortieren">

    </
    FORM>

    </
    BODY>
    </
    HTML
    Nun bei der Abfrage
    PHP-Code:
    $abfrage MySQL_db_query("xxx","select $statement , count($sortnach) as hits from pphl_85245_logs as hits GROUP BY $statement ORDER BY hits DESC LIMIT 0,10"); 
    bekomme ich nach Fehlerausgabe mit "echo mysql_errno()." ".mysql_error();" folgendes ausgegeben :

    1064 You have an error in your SQL syntax near ' count(Array) as hits from pphl_85245_logs as hits GROUP BY hostname, ORDER BY ' at line 1
    Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /usr/local/httpd/htdocs/kunden/web625/html/award.php on line 45

    Warning: mysql_num_fields(): supplied argument is not a valid MySQL result resource in /usr/local/httpd/htdocs/kunden/web625/html/award.php on line 46

    Natürlich habe beim "xxx" den Datenbanknamen stehen !

    Für eine Antwort wäre ich dankbar :-)

    Gruß Manuela

  • #2
    Hallöchen, wie ich sehe gibt es noch immer Probleme. Also du hast folgendes Problem. Du willst einem String einfach nur einen Array namens $sortnach geben. Das geht natürlich nicht.
    Um das ganze zu testen, ersetze das $sortnach einfach mal durch $sortnaach[0]. Das ist die leichteste möglichkeit. Dann funktioniert das ganze schon.

    Du kannst dem String nicht einfach den Array geben. Du musst dem String die einzelenen Elemente des Arrays geben. Das geschieht in dem du einen Zeiger auf ein bestimmtes Arrayelement setzt.

    Beispiel

    PHP-Code:
    echo $sortnach[0]; //Sprint den ersten Datensatz in dem Array $sortnach an 
    Dein Problem verstanden oder gibt es noch Fragen?
    Ans Ziel kommt nur der, der auch eins hat. www.e-cross.info

    Kommentar


    • #3
      mach mal aus

      $sortnach[] = "hostname";

      ein

      $sortnach = "hostname";
      TBT

      Die zwei wichtigsten Regeln für eine berufliche Karriere:
      1. Verrate niemals alles was du weißt!


      PHP 2 AllPatrizier II Browsergame

      Kommentar


      • #4
        Ne das ist doch nicht im Sinne des Erfinders, schau Dir mal das ganze Skript an?!

        Greatz
        Ans Ziel kommt nur der, der auch eins hat. www.e-cross.info

        Kommentar


        • #5
          ups, sorry,

          dann mach in der Query ein


          ","select $statement , count(".implode("",$sortnach).") as hits from pphl_85245

          dann darf aber nur eine Checkbox aktiviert sein.

          Sind es mehrere, mußte ein

          list(..)= each ($sortnach) machen
          TBT

          Die zwei wichtigsten Regeln für eine berufliche Karriere:
          1. Verrate niemals alles was du weißt!


          PHP 2 AllPatrizier II Browsergame

          Kommentar


          • #6
            mhhhh, das hört sich ja schon SUPER an,
            jedoch kannst Du mir das mit dem 'list(..)= each ($sortnach) '
            nochmal genauer erklären,denn ich bin absoluter Anfänger in Sachen
            PHP+SQL und vor allen die Abfragen - wäre Super :-)

            Acho so .... ja es sollen mehrere Checkboxen aktiviert werden können !

            D A N K - Gruß Manuela

            Kommentar


            • #7
              Re: Array-Problem bei Datenbankabfrage

              hallo,

              zb ich wähle ip und referer ..

              PHP-Code:
              $abfrage MySQL_db_query("xxx","select $statement , count($sortnach) as hits from pphl_85245_logs as hits GROUP BY $statement ORDER BY hits DESC LIMIT 0,10"); 
              gibt: "select ip, referer, count(Array) as hits from pphl_85245_logs as hits GROUP BY hostname, ORDER BY hits DESC LIMIT 0,10"

              geht so nicht:

              1) du kannst normale abfragen und count() / max() (etc) nicht verknüpfen
              2) count(Array) -> ich nehme nicht an dass du ein feld namens Array hast ..
              und dass count(Array) herauskommt liest du schon aus der fehlermeldung ..

              PHP-Code:
              <script language="php">
                
              $db_server "xxx";
              /* Datenbankname */
                
              $db_name "xxx1";
              /* Datenbankuser */
                
              $db_user "xxx";
              /* Datenbankpasswort */
                
              $db_passwort "xxx";
              $db = @MYSQL_CONNECT($db_server,$db_user,$db_passwort);

                
              //Wenn keine Checkbox geklickt ist, dann wird nur hostname benutzt

              if (empty($sortnach)) {

                
              $sortnach[] = "hostname";

              }

              //Bilden des benötigten Strings für SQL Query

              $statement implode(", "$sortnach);

              print 
              "sortiert nach $statement <br>";

              $abfrage MySQL_db_query("xxx","select $statement from pphl_85245_logs GROUP BY $statement DESC LIMIT 0,10");

              $z=MySQL_num_rows($abfrage);    
              $s=MySQL_num_fields($abfrage);    

              print 
              "<table border=1 bgcolor=lightgreen>\n";
                print 
              "<tr bgcolor=red>";
                for (
              $j=0$j<$s$j++) { $fn=MySQL_fieldname($abfrage,$j); print "<td><b>$fn</b></td>";}
                print 
              "</tr>";
                for (
              $i=0$i<$z$i++)
                  {
                    print 
              "<tr>\n";
                    
              $zeile=MySQL_fetch_array($abfrage);
                    for (
              $j=0$j<$s$j++) { print "  <td>$zeile[$j]</td>\n";}
                    print 
              "</tr>\n";
                  }
                print 
              "</table>\n";
                print 
              date("Y-m-d H:i:s");
              </
              script
              ps. ich weiß nicht was du mit hits bezweckst .. vielleicht postest mal die datenbankstruktur
              mfg,
              [color=#0080c0]Coragon[/color]

              Kommentar


              • #8
                O.K.,

                also ich habe folgendes vor.
                Ich möchte eine Tabelle erstellen, in der Logdaten von meiner
                Datenbank integriert werden sollen.

                z.B. wenn Hostname und IP in den Checkboxen ausgewält werden soll es folgender maßen aussehen :



                Als Beispiel dient SQL-Abfrage
                ! DAUERT ETWAS LÄNGER, DA KEIN LIMIT GESTZT IST !

                Und wenn man mehr auswählt, dann werden auch die anderen Informationen entweder daneben unter unten drunter angezeigt und jeweils auch die Hits ( bei dem Counter, wie oft war die besagte IP oder der Hostname auf einer bestimmten Seite - daher auch die HITS )

                Meine Datenbank sieht folgender maßen aus :



                Die Tabellen bestehen aus folgenden Spalten :

                logid, userid, hostname, tld, ip,entryid, path, referer, seareng
                agentid, res_w, res_h, color, time, t_reload, online, mp, proxy
                proxy_ip, proxy_hostname

                Desweiteren hätte ich noch vor gehabt hinter den Spalten,
                den Unix-Timestamp durch ein aufklappbare Box anzeigen zu lassen
                an welchen Tagen eine bestimmte IP oder Hostname auf die Seite zugegriffen hatte - aber das nur nebenbei !

                Gruß Manuela

                Kommentar


                • #9
                  ich sehs leider nicht heraus ..
                  gehören hostname und ip zusammen ?

                  wenn ja, warum habes sie verschiedene hits ?

                  tut mir leid, aber aus deiner tabellen struktur werd ich nicht ganz schlau ..
                  wie heissen die ? wo fängt eine neue an ?

                  ahja .. bei deinem link crasht mein ie .. bzw ich hab ihn abgewürgt ..
                  mach doch bitte ein limit
                  mfg,
                  [color=#0080c0]Coragon[/color]

                  Kommentar


                  • #10
                    Hallo Coragon Rivito,

                    so kompliziert ist doch die Tabelle nicht - ODER ?

                    Es handelt sich um einen Counter,
                    der unter anderem den Hostnamen und die IP des Besuchers loggt
                    und in die Tabelle schreibt.

                    Leider kann es sein, daß der Counter eine IP oder Hostname
                    nicht loggen kann oder, das der Hostname gleich bleibt, sich jedoch die
                    IP geändert hat, daher die verschiedenen HITS !

                    Das Limit habe ich auf 10 gesetzt, sollte nun funktionieren.

                    Danke für die Mühe

                    Gruß Manuela

                    Kommentar


                    • #11
                      PHP-Code:
                      for ($i=0;$i<=count($sortnach)-1;$i++) {

                        
                      $select .= $sortnach[$i] . ", count(".$sortnach[$i].") as hits";
                        
                      $group .= $sortnach[$i];

                        if (
                      $i count($sortnach)) {

                          
                      $select .= ", ";
                          
                      $group .= ", ";

                        }


                      PHP-Code:
                      $abfrage MySQL_db_query("xxx","select $select from pphl_85245_logs GROUP BY $group DESC LIMIT 0,10"); 
                      probier das ganze doch mal so

                      würde zb die abfrage "select ip, count(ip) as hits, hostname, count(hostname) as hits from pphl_85245_logs GROUP BY ip, hostname DESC LIMIT 0, 10´" erstellen ..
                      mfg,
                      [color=#0080c0]Coragon[/color]

                      Kommentar


                      • #12
                        Hallo, ersteinmal danke für die laufende Hilfe,
                        jedoch bekomme ich den selben Fehler wieder ausgegeben :-(

                        Hier der geänderte Code :

                        PHP-Code:
                        <HTML>
                        <
                        HEAD>
                        <
                        TITLE>Abfrage der SQL-Tabelle Sortierte Liste</TITLE>
                        </
                        HEAD>
                        <
                        font size=4>Abfrage der SQL-Tabelle Sortierte Liste</font><br>
                        <
                        script language="php">

                          
                        $db_server "xxx";
                        /* Datenbankname */
                          
                        $db_name "xxx";
                        /* Datenbankuser */
                          
                        $db_user "xxx";
                        /* Datenbankpasswort */
                          
                        $db_passwort "xxx";
                        $db MYSQL_CONNECT($db_server,$db_user,$db_passwort);

                          
                        //Wenn keine Checkbox geklickt ist, dann wird nur hostname benutzt

                        if (empty($sortnach)) {

                          
                        $sortnach[] = "hostname";

                        }

                        //Bilden des benötigten Strings für SQL Query

                        for ($i=0;$i<=count($sortnach)-1;$i++) {

                          
                        $select .= $sortnach[$i] . ", count(".$sortnach[$i].") as hits";
                          
                        $group .= $sortnach[$i];

                          if (
                        $i count($sortnach)) {

                            
                        $select .= ", ";
                            
                        $group .= ", ";

                          }

                        }

                        print 
                        "sortiert nach $statement <br>";


                        $abfrage MySQL_db_query("xxx","select $select from pphl_85245_logs GROUP BY $group DESC LIMIT 0,10");

                        $z=MySQL_num_rows($abfrage);
                        $s=MySQL_num_fields($abfrage);

                        print 
                        "<table border=1 bgcolor=lightgreen>\n";
                          print 
                        "<tr bgcolor=red>";
                          for (
                        $j=0$j<$s$j++) { $fn=MySQL_fieldname($abfrage,$j); print "<td><b>$fn</b></td>";}
                          print 
                        "</tr>";
                          for (
                        $i=0$i<$z$i++)
                            {
                              print 
                        "<tr>\n";
                              
                        $zeile=MySQL_fetch_array($abfrage);
                              for (
                        $j=0$j<$s$j++) { print "  <td>$zeile[$j]</td>\n";}
                              print 
                        "</tr>\n";
                            }
                          print 
                        "</table>\n";
                          print 
                        date("Y-m-d H:i:s");
                        </
                        script>

                        <
                        FORM action=award2.php method=POST>

                        Neu Sortieren nach:

                          <
                        input type=checkbox name=sortnach[] value="hostname">

                          <
                        input type=checkbox name=sortnach[] value="ip">

                          <
                        input type=checkbox name=sortnach[] value="referer">

                          <
                        input type=checkbox name=sortnach[] value="proxy">

                          <
                        input type=checkbox name=sortnach[] value="Proxy_ip">

                          <
                        input type=checkbox name=sortnach[] value="Proxy_hostname">



                          <
                        input type="submit" Value="Sortieren">

                        </
                        FORM>

                        </
                        BODY>
                        </
                        HTML
                        Vielleicht habe ich ja einen Fehler im Einbau gemacht !

                        Gruß Manuela

                        Kommentar


                        • #13
                          möglicherweise passt es mysql nicht wenn du (bzw ich) mehrere male den alias hits vergibst, ..

                          wenn folgende erweiterung nicht klappt weiß ich nimmer weiter ..
                          evtl noch über mehrer queries ..

                          PHP-Code:
                          for ($i=0;$i<=count($sortnach)-1;$i++) {

                            
                          $select .= $sortnach[$i] . ", count(".$sortnach[$i].") as hits_$sortnach[$i]";
                            
                          $group .= $sortnach[$i];

                            if (
                          $i count($sortnach)) {

                              
                          $select .= ", ";
                              
                          $group .= ", ";

                            }


                          mfg,
                          [color=#0080c0]Coragon[/color]

                          Kommentar


                          • #14
                            Nö, klappt nicht :-(

                            Aber trotzdem Super Dank für Deine Mühe,
                            dann kann ich mir diese Idee halt abschminken.

                            Gruß Manuela

                            Kommentar


                            • #15
                              naja, wie gesagt pro $sortnach ein query mit der spalte und nem count ..
                              musst dir eben irgendwas einfallen lassen die zeilen nebeneinander darzustellen ..
                              mfg,
                              [color=#0080c0]Coragon[/color]

                              Kommentar

                              Lädt...
                              X