Problem bei EXCEL like Autofilter Skript LANG!!

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

  • Problem bei EXCEL like Autofilter Skript LANG!!

    Hallo,

    ich habe ein Skript geschrieben, das es ermöglicht eine Tabelle darzustellen und ähnlich
    einem Autofilter die Inhalte zu selektieren.
    Es funktioniert soweit ganz gut.

    Außer:
    1. Wenn ich den Enter Button drücke ohne etwas selektiert zu haben bekomme ich eine SQL
    Fehlermeldung. Ich habe versucht das abzufangen, aber es nicht hinbekommen.
    Bekomme ich mit Exceptionhandling bessere Meldunden?

    2. Beim zusammenbasteln der SQL Strings aus den verschiedenen Dropdownmenüs
    Wird immer der erste und danach der erste + zweite Query übergeben.

    Ich bin schon den ganzen Tag am Debugen. Vielleicht sehe ich den Wald vor lauter Bäumen
    nicht mehr. Vielleicht hat jemand auf anhieb ne Lösung.

    Ich bin neu in PHP also bitte gnädig sein. Tips zur allgemeinen Verbesserung
    des Skriptes sind aber auf jeden Fall erwünscht.

    Ich habe den Code reichlich auskommentiert, dass man sich zurechtfindet.
    Vor allem ich selbst :-)


    Here we go:
    PHP-Code:

    <? /* PHP begins */

        //Class  DB healt die Verbindungsdaten und stellt die Verbindung zur 
        // (MySQL) Datenbank her. Sie enthaelt weiter Methoden zum absetzen von Queries
        include ("DB.php");

        // Objekt der Klasse excel instanzieren
        $excel = new Excel();
        
        // Wenn der "Enter" Button aktiviert wurde wird die Methode writeHTML mit dem Parameter "entered" aufgerufen
        if(isset($_POST['enter']))
        {
            $excel->writeHTML(entered);
        }
        // Startzustand: "Enter" ist noch nicht aktiviert, oder "Filter Löschen" wurde aktiviert
        else
        {
            $excel->writeHTML(not_entered);
        
        }
        

    //Class --> begins <--
    class Excel
    {
        //Kapseln der Daten mit PRIVATE
        private $result = NULL;
        private $query = NULL;
        private $TableName = person;
        private $my_col_names = NULL;
        
        // Parameterloser Konstruktor in PHP5 Syntax, erzeugt ein Objekt dieser Klasse
        public function _construct(){
        }
        
        // Methode um die Daten aus der Tabelle zu holen und in HTML anzuzeigen
        // Bekommt uebergeben ob der "Enter" Button gedrueckt wurde oder nicht
        public function writeHTML($set)
        {
            
            // ist der Button "Enter" gedrueckt wird die Filterfunktion losgetreten
            if ($set == entered)
            {
                
                    // In diesem Teil wird ein SQL Query aus den versch. Dropdownlisten zusammengesetzt  
                    // --> start concatenate <--
                 
                    $sel_filters = array();
                    $fil_col = array();
                    $filter = $_REQUEST['filter'];
                    $col = $_REQUEST['col'];
                
                    if ($filter)
                    {
                        $this->query = "SELECT * FROM ".$this->TableName." WHERE  ";
                        $sfc=0;
                        $cc=0;
                    
                        foreach ($filter as $my_filter)
                        {
                            if ($my_filter!="") 
                            {
                                $sel_filters[$sfc]=$my_filter;
                                $fil_col[$sfc]=$cc;
                                $sfc++;
                            }
                        $cc++;
                        }
                        
                        
                        foreach ($sel_filters as $new_filter)
                        {     
                            $fc=0;    
                            if ($fc > 0)
                            {
                                $this->query.="AND ";
                            }
                            $this->query.="`".$col[$fil_col[$fc]]."` = '".$new_filter."' ";
     
                            $fc++;
                        
                            echo $this->query;
                        }
                    }
            }
            // --> end concatenate <--
            
            else 
            // ist der Button "Enter" nicht gedrueckt wird die gesammte Tabelle ausgegeben
            {
                $this->query = "SELECT * FROM ".$this->TableName;
            }
            

            // Neues Objekt von DB zur Datenbankverbindung initialisieren
            $db = new DB;
            // Array das die Spaltennamen aufnimmt
            $this->my_col_names = array();
            // In result wird die Rückgabe der DB abfrage gespeichert   
            $this->result = $db->queryDB($this->query);
            
            //Das Formular wird ab hier aufgebaut
            echo "<form name='filters' action='".$_SERVER['PHP_SELF']."' method='POST' >";
            echo "<TABLE BORDER=1 bgcolor=#E0E0E0>";
            echo "<TR>";
        
            //Baut die Kopfzeile der Tabelle mit den Dropdownfeldern auf
            for ($i = 0; $i < mysql_num_fields($this->result); $i++)
            {
                    //filtert die Spalte "id" aus
                    if (mysql_field_name($this->result, $i) != "id")
                    {
                        echo "<TD>";    
                        echo "<select name='filter[]' size='1'>";  
                        // Erzeugt die Aufschrift des Dropdown Menues, es enthaelt die Spaltennamen
                        echo "<option value=''> Nach ".mysql_field_name($this->result, $i)." filtern "."</option>";
                
                        // Schickt eine Anfrage an die DB und gibt nur einen Wert fuer jeden Eintrag zurueck ("DISTINCT")
                        // um mehrfacheintraege von Werten zu verhindern
                        $sub_Query = "SELECT DISTINCT`".mysql_field_name($this->result, $i)."` FROM ".$this->TableName;
                        $sub_Result = $db->queryDB($sub_Query);    
                        
                        // Die Schleife nimmt immer die erste Zeile des Ergebnis und schreibt den ersten
                        // Wert (Array beginnt bei 0) der Zeile als neachsten Eintrag in das Dropdown Menue
                        while ($sub_Row = mysql_fetch_row ($sub_Result))
                        {
                            echo "<option value='".$sub_Row[0]."'>".$sub_Row[0]."</option>"; 
                        }
               
                        echo "</select>";
                        //Speichert die Spaltenueberschriften in einem Array ab
                        echo "<input type='hidden' name='col[]' value='".mysql_field_name($this->result, $i)."'>";
                    
                        // Speichert die Spaltennamen der DB Tabelle zeilenweise in das Array
                        // Wird in der naechsten Schleife benoetigt
                        $my_col_names[$i] = mysql_field_name($this->result, $i);
                   
                    }
            }
            echo "</TR>";
            echo "</FORM>";   
         
            echo "<TR>";        
            
            // Schreibt jetzt die Spaltennamen der DB als Spaltenuebrschrift in die Tabelle
            for ($j = 0; $j < ($i-1); $j++)
            {
                $outstring = $my_col_names[$j+1];
                echo "<TD><b>".$outstring."</b></TD>";
            }//for
            
            echo "</TR>";
            
            // Schreibt die Eintraege der DB Tabelle zeilenweise in die Tabelle
            while ($my_Row = mysql_fetch_array ($this->result))
            {
                echo "<TR>";
                
                for ($i = 0; $i < mysql_num_fields($this->result);  $i++)
                {
                    $lc = 0;
                    // Dieses if filtert wieder die Spalte "id" aus
                    if ($lc!=$i)
                    {
                        echo "<TD>$my_Row[$i]</TD>";
                    }
                }
                
                echo "</TR>";
                
            }     

            // Tabellenzeile die den Enter Button enthaelt und die Formularaktion ausloest
            echo "<TR><TD colspan='5' align='right'>";
            ?> <input type="submit" name="enter" value="Enter">
               <input type="submit" name="delete" value="Filter l&ouml;schen">
            <?
            echo "</td>";
            echo "</TR></TD>";
            echo "</TABLE>"."<br />";
            
        }//writeHTML
    }//Class --> ends <--
        
    /* PHP ends */ ?>
Lädt...
X