Anfängerproblem mit Klasse

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

  • Anfängerproblem mit Klasse

    Hallo,

    ich habe mal wieder ein kleines Problemchen mit einer PHP Klasse.

    Ich möchte anhand einer Textdatei (in der zeilenweise "Tabellennamen" stehen, Tabellen anlegen). Problem ist, dass immer nur die erste Tabelle angelegt wird, obwohl auch die Ausgabe des jeweiligen Schleifenpunktes korrekt angezeigt wird.

    Das ist meine Klasse:
    PHP-Code:
    <?php

        
    //Klasse für das Erstellen der einzelnen Tables
        
    class create_table {
            
            var 
    $tablename;
            
            
    //Funktion die Tabelle $tablename erstellt
            
    function settab() {
                
    $query "CREATE TABLE `".DBNAME."`.`".$this->tablename."` ([TABELLENFELDER])";
                
    mysql_query($query);
            }
            
        }

    ?>
    Und hier der Aufruf:
    PHP-Code:
        mysql_connect (DBHOSTDBUSERDBPASS);
        
        
    $table = new create_table;
        
        
    $tablenames file('keywords.txt');
        
        for (
    $i=0;$i<count($tablenames);$i++) {
            
    $table->tablename $tablenames[$i];
            
    $table->settab();  
            
            echo 
    $i $table->tablename "<br />";
        }
        
        
    mysql_close(); 
    Wie gesagt, bin was Klassen angeht noch relativer Einsteiger. Aber habe hier auch nichts im Web gefunden, was mein Problem lösen würde.

    Danke schon mal für euere Hilfe.

    Grüße

  • #2
    Mal ganz davon abgesehen, dass für diese Aufgabe eine Klasse völlig überflüssig ist, würde ich spontan raten, dass es am auslesen der Datei liegt. Versuch mal bei file() die Angaben

    PHP-Code:
    file('keywords.txt'FILE_IGNORE_NEW_LINES FILE_SKIP_EMPTY_LINES); 
    zu benutzen, vielleicht machen die den Query kaputt.
    This is what happens when an unstoppable force meets an immovable object.

    Kommentar


    • #3
      Danke für Deine Hilfe.

      An der file()-Funktion liegt es leider nicht. Habe ich eben probiert.

      Über die Klasse habe ich das ganze geregelt, da ich hier später noch weitere Funktionen mit einbeziehen möchte.

      Wie beschrieben, die Ausgabe über
      PHP-Code:
      echo $i $table->tablename "<br />"
      Funktioniert an sich, beziehungsweise gibt schon die eigentlich korrekten Werte aus.

      Kommentar


      • #4
        Dann liegts an mysql_query. Hast du Error reporting komplett hochgedreht? Da kommt bestimmt ne Fehlermeldung raus.

        Was ist der Rückgabewert von mysql_query?
        This is what happens when an unstoppable force meets an immovable object.

        Kommentar


        • #5
          PHP-Code:
              for ($i=0;$i<count($tablenames);$i++) {
                  
          $table->tablename $tablenames[$i];
                  
          $table->settab(); 
          Das ist ziemlicher Nonsense ...

          Wenn die Methode etwas mit dem Tabellennamen machen soll, dann übergebe ihn ihr als Parameter.

          Wenn du erst mal die Eigenschaft tablename setzt und anschließend settab aufrufst - dann hast du in settab keinerlei Kontrolle darüber, was eigentlich in tablename steht.

          Man könnte deine Klasse dann auch bspw. so verwenden:
          PHP-Code:
          $table = new create_table;
          $table->settab(); // tablename hat noch gar keinen Inhalt - ist es sinnvoll, dass die Methode trotzdem aufrufbar ist?

          $table->tablename 'xyz';
          $table->settab();
          $table->settab();
          $table->settab(); // ist das sinnvoll - dass die Methode mehrfach mit dem selben Tabellennamen aufgerufen werden kann? 
          Jegliche Validierung und Fehlerkontrolle fehlt in deinem Code noch völlig - was dir jetzt u.a. auch erschwert, die Ursache des Fehlers zu finden.
          Du solltest dir erst mal angewöhnen, sowas sauber umzusetzen, bevor du mit OOP anfängst.
          I don't believe in rebirth. Actually, I never did in my whole lives.

          Kommentar


          • #6
            lass dir wengistens mal die erzeugten Querys ausgeben ...

            also

            echo [COLOR=#000000][COLOR=#0000cc]$query."<br>";

            in deine settab-Methode - und

            mysql_query($query) OR die(mysql_error());

            und wenn ich spontan raten müsste, würde ich auf [/COLOR][/COLOR][COLOR=#000000][COLOR=#CC0000]([TABELLENFELDER]) tippen ..
            [/COLOR][/COLOR]
            Zuletzt geändert von eagle275; 23.09.2010, 15:59.
            [font=Verdana]
            Wer LESEN kann, ist klar im Vorteil!
            [/font]

            Kommentar


            • #7
              Das klingt alles irgendwie so, als hättest du längst nicht die Möglichkeiten ausgeschöpft, die du zur Fehlersuche selber durchführen könntest:
              - Error_reporting so sensibel wie möglich
              - Betrachtung der Informationen in mysql_error()
              - Ausgabe der einzelnen Queries und ggf. Einfügen + Ausführen in anderem SQL Tool
              - try .. catch mit Exception Ausgabe
              - etc.

              Hier können wir sonst nur mehr oder weniger raten und das warten aufs (zufällig) richtige Ergebnis kostet mit Sicherheit mehr Zeit als etwas Debugging und das Posten detallierterer Fehlerbeschreibungen.

              Zum Problem selbst:
              Was genau steht bei dir denn normalerweise in [TABELLENFELDER]? Ich schätze ja mal, das ist hier nur ein Platzhalter?

              Mein erster Vorschlag wäre: In der Schleife solltest du den Tabellennamen folgendermaßen setzen:
              PHP-Code:
              $table->tablename trim($tablenames[$i]); 
              not null blog - a developer's worries & solutions

              Kommentar


              • #8
                Kurz gesagt (nicht böse gemeint) deine Klasse ist totaler Schrott.

                Du musst natürlich auch Fehlerbehandlungen einführen.

                - ist die txt Datei existent
                - ist es überhaupt ein Array nachdem du die Datei da rein geladen hast
                - sind alle Werte im Array wie du sie erwartest

                Dann solltest du auch mit trim() dein Array gegen White Spaces bereinigen.

                Die PHP4 Schreibweise solltest du in de Tonne kloppen, wir leben in Zeiten des PHP5, dass heist arbeite mit Zugriffsspezfikationen.

                Benutze einen Konstruktor und übergib dem die Parameter die sowieso immer brauchst wenn du die Klasse benutzt.

                Ich habe mir selber eine Filehandling Class geschrieben die ich immer dann in anderen Klassen nutze wenn ich sie bracuhe, da werden in der Klasse dann schon Fehlerprüfungen gemacht ob das zu ladende File existiert, ob das Array, oder in was auch immer das gelesen werden soll, auch ein Array oder String etc. ist. Meistens arbeite ich beim auslesen von Files mit file(). In der Klasse wird dann auch das Array von White Spaces befreit. Am Ende habe ich ein bereinigtes zur Verarbeitung bereitstehendes Array.

                Das verwende ich dann zur Arbeit in meinen weiteren Klassen. Also du solltest auch mal den Aufgabenbereich deiner Klassen überdenken, eine Klasse hat eine Aufgabe. Also deine Klasse soll Tabellen anlegen für eine Datenbank, dann sollte die Klasse aber nicht auch die Aufgabe übernehmen eine Datei auszulesen etc..

                Ich denke du solltest dich noch mal mit OOP Grundlagen auseinandersetzen, so wie du das angehst wird das nichts.

                Gruß Litter
                Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
                http://www.lit-web.de

                Kommentar

                Lädt...
                X