Klaus: Class-Problem

Guten Morgen Zusammen,

ich muss in meinen Informatik-Kurs (Klasse 12) ein kleines PHP-System entwickeln und soll dabei mit Class arbeiten.

Ich habe mir auch einige Beispiele angeschaut, jedoch bin ich nicht recht schlau daraus geworden. Ich hoffe man kann mir hier helfen

Problem:

Ich habe meine Kurs-Mitteilnehmer in eine Datenbank eingefügt und auch mittels PHP-Standart-Ausgabe ausgeben lassen. Dies war auch nicht das Problem.

Jedoch möchte ich nun das ganze über Class regeln, und ich glaube mein Problem besteht hier in der Ausgabe?!?

Hier mein Class-Code

class Info12{  
  
  
	public function Teilnehmer() {  
	  
	include('../application/config/setting.inc.php');  
	$db_table = 'xy_tabelle';  
	  
	$teilnehmer_db = "SELECT name, vorname FROM ".$db_table." WHERE name != 0 ORDER BY name ASC;";  
	$teilnehmer_result = mysql_query($teilnehmer_db) or die( mysql_error() );  
	  
	}  
}

hier meine Ausgabedatei:

<?php $kurs = new Info12();  
echo $kurs->Teilnehmer($row['name']);	  
?>
  1. moin,

    $teilnehmer_db = "SELECT name, vorname FROM ".$db_table."

    .........................^
    ....................................................^

    Hier dürfte der Parser schon meckern, siehe Log. Wenn Außernrum geqouted ist, kannst Du auch so notieren: "... FROM $db_table..." und gut.

    Dann schau Dir nochmal an, wie ein Record rausgefischt wird. Sofern nur einer zu erwarten ist, geht das so:

      
    // einen Record auslesen  
    $q = "SELECT nick FROM talker WHERE sessionid='$id'";  
    $res = $dbh->query($q);  
    $row = $res->fetch_assoc(); // nur eine Zeile erwartet  
    $nick = $row['nick'];       // im Kontext ein String  
    
    

    Hotti

    1. Hi!

      $teilnehmer\_db = "SELECT name, vorname FROM ".$db\_table."  
      

      .........................^
      ....................................................^
      Hier dürfte der Parser schon meckern, siehe Log.

      Nein, syntaktisch alles bestens.

      Wenn Außernrum geqouted ist, kannst Du auch so notieren: "... FROM $db_table..." und gut.

      Kann, aber nicht muss. Und außerdem "doppelt geqoutet", denn bei einfachen Quotes ...

      Lo!

      1. Hi!

        $teilnehmer\_db = "SELECT name, vorname FROM ".$db\_table."  
        

        .........................^
        ....................................................^
        Hier dürfte der Parser schon meckern, siehe Log.

        Nein, syntaktisch alles bestens.

        Mist, ich hatte die Glotzn noch zu, tschuldigung!

        Wenn Außernrum geqouted ist, kannst Du auch so notieren: "... FROM $db_table..." und gut.

        Kann, aber nicht muss. Und außerdem "doppelt geqoutet", denn bei einfachen Quotes ...

        Ok ;-)

        Hotti

        --
        Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.
  2. Hi!

    ich muss in meinen Informatik-Kurs (Klasse 12) ein kleines PHP-System entwickeln und soll dabei mit Class arbeiten.

    Das Ziel ist vermutlich, das Arbeiten mit Klassen zu praktizieren. Das heißt jedoch nicht: "Ich mach um die Funktion man ein class drumrum und fertig ist die Laube." Der Sinn von Klassen beziehungsweise OOP besteht darin, Daten und Verarbeitungsmethoden zu koppeln. Am Ende soll ein möglichst universell einsetzbares Stück Code entstehen. Wie bei jeder Wiederverwendbarkeit dürfen dabei so wenig wie möglich Abhängigkeiten von außen existieren.

    public function Teilnehmer() {
    include('../application/config/setting.inc.php');

    Auch wenn PHP das erlaubt, ist das konzeptionell Mist. Wenn die Klasse zum Funktionieren Daten braucht, so übergibt man diese beim Instantiieren. Ansonsten ist diese Klasse von genau dieser Datei abhängig und in anderen Szenarien schwerlich einsetzbar. Also: Erstell einen Konstruktor, der die notwendigen Daten übergeben bekommt und sie in Objektvariablen ablegt, so dass die Methoden darauf zugreifen können.

    Vermutlich öffnest du im inkludierten Code auch die DB-Verbindung. Das muss dann in den Konstruktor (zumindest der Einfachheit halber. In realen Projekten löst man das idealerweise anders, doch das lass ich mal weg, sonst wird es zu komplex.)

    $teilnehmer_db = "SELECT name, vorname FROM ".$db_table." WHERE name != 0 ORDER BY name ASC;";

    Welcher Teilnehmer heißt denn 0 mit Namen? $teilnehmer_db ist auch ein komischer Name, denn es handelt sich beim Inhalt um ein SQL-Statement (query/sql) und nicht um eine Datenbank (db).

    $teilnehmer_result = mysql_query($teilnehmer_db) or die( mysql_error() );

    "or die()" ist eine der unschönsten Fehlerreaktionen, aber sei es drum.

    }

    Und nun? Was machst du mit der Ergebnismenge? Willst du die nicht abfragen und das Ergebnis zurückgeben?

    echo $kurs->Teilnehmer($row['name']);

    Hast du überhaupt schon mal mit Funktionen außerhalb von OOP hantiert? Du übergibst hier einen Parameter und erwartest einen Rückgabewert, aber weder übernimmst du hier einen Parameter

    public function Teilnehmer() {

    noch gibst du in der Funktion/Methode ein Ergebnis zurück (return).

    Lo!