php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 23-09-2010, 14:31
aberultra
 Registrierter Benutzer
Links : Onlinestatus : aberultra ist offline
Registriert seit: Jun 2010
Beiträge: 21
aberultra befindet sich auf einem aufstrebenden Ast
Standard 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
Mit Zitat antworten
  #2 (permalink)  
Alt 23-09-2010, 14:43
Benutzerbild von ApoY2k ApoY2k
 Registrierter Benutzer
Links : Onlinestatus : ApoY2k ist offline
Registriert seit: Nov 2006
Beiträge: 359
ApoY2k befindet sich auf einem aufstrebenden Ast
ApoY2k eine Nachricht über ICQ schicken ApoY2k eine Nachricht über Skype™ schicken
Standard

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.
Mit Zitat antworten
  #3 (permalink)  
Alt 23-09-2010, 14:50
aberultra
 Registrierter Benutzer
Links : Onlinestatus : aberultra ist offline
Registriert seit: Jun 2010
Beiträge: 21
aberultra befindet sich auf einem aufstrebenden Ast
Standard

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.
Mit Zitat antworten
  #4 (permalink)  
Alt 23-09-2010, 14:53
Benutzerbild von ApoY2k ApoY2k
 Registrierter Benutzer
Links : Onlinestatus : ApoY2k ist offline
Registriert seit: Nov 2006
Beiträge: 359
ApoY2k befindet sich auf einem aufstrebenden Ast
ApoY2k eine Nachricht über ICQ schicken ApoY2k eine Nachricht über Skype™ schicken
Standard

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?
Mit Zitat antworten
  #5 (permalink)  
Alt 23-09-2010, 14:57
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 25.236
wahsaga befindet sich auf einem aufstrebenden Ast
Standard

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.
Mit Zitat antworten
  #6 (permalink)  
Alt 23-09-2010, 16:57
eagle275
 Registrierter Benutzer
Links : Onlinestatus : eagle275 ist offline
Registriert seit: Jun 2010
Beiträge: 403
eagle275 befindet sich auf einem aufstrebenden Ast
Standard

lass dir wengistens mal die erzeugten Querys ausgeben ...

also

echo $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
([TABELLENFELDER]) tippen ..
__________________

Wer LESEN kann, ist klar im Vorteil!

Geändert von eagle275 (23-09-2010 um 16:59 Uhr)
Mit Zitat antworten
  #7 (permalink)  
Alt 24-09-2010, 10:43
reok
 Registrierter Benutzer
Links : Onlinestatus : reok ist offline
Registriert seit: Sep 2010
Beiträge: 22
reok befindet sich auf einem aufstrebenden Ast
Standard

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
Mit Zitat antworten
  #8 (permalink)  
Alt 24-09-2010, 12:03
litterauspirna
 Registrierter Benutzer
Links : Onlinestatus : litterauspirna ist offline
Registriert seit: Nov 2007
Beiträge: 364
litterauspirna ist zur Zeit noch ein unbeschriebenes Blatt
Standard

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
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Anfängerproblem windsurfer76 SQL / Datenbanken 3 24-07-2006 12:16
Anfängerproblem healthdesk SQL / Datenbanken 5 09-12-2005 00:20
DOM / Klasse - Anfängerproblem culthero PHP Developer Forum 0 14-11-2005 18:12
Anfängerproblem ABC-Ritter Projekthilfe 16 12-10-2005 16:04
Anfängerproblem? markusR PHP Developer Forum 1 25-04-2002 12:09

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

ADSMAN V3 - Werbe-Manager ansehen ADSMAN V3 - Werbe-Manager

ADSMAN V3 - mehr als nur ein Bannermanager! Banner, Textanzeigen und PagePeel Manager! Mit ADSMAN PRO haben Sie die Marketinglösung für eine effektive und effiziente Werbeschaltung mit messbaren Ergebnissen. Unterstützt werden Bannerformate in beliebi

25.10.2018 virtualsystem | Kategorie: PHP/ Bannerverwaltung
PHP News und Artikel Script V2

News schreiben, verwalten, veröffentlichen. Dies ist jetzt mit dem neuen PHP News & Artikel System von virtualsystem.de noch einfacher. Die integrierte Multi-User-Funktion und der WYSIWYG-Editor (MS-Office ähnliche Bedienung) ermöglichen...

25.10.2018 virtualsystem | Kategorie: PHP/ News
Top-Side Guestbook

Gästebuch auf Textbasis (kein MySQL nötig) mit Smilies, Ip Sperre (Zeit selbst einstellbar), Spamschutz, Captcha (Code-Eingabe), BB-Code, Hitcounter, Löschfunktion, Editierfunktion, Kommentarfunktion, Kürzung langer Wörter, Seiten- bzw. Blätterfunktion, V

22.10.2018 webmaster10 | Kategorie: PHP/ Gaestebuch
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 14:49 Uhr.