php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 12.05.2006, 16:57  
Benutzer
 
Registriert seit: 24.11.2005
Beiträge: 65
250Euro
Standard Frage zur Vererbung

Hi
ich habe eine Frage zur Vererbung.
Die mir bis jetzt noch kein Tutorial und Forumeintrag ,den ich bis jetzt dazu gefunden habe beantworten konnet.

Ich habe zwei Klassen, Base als Elternklasse und Messages als Kindklasse.

In Messages gibt es die Funktion MessageRead():
PHP-Code:
  public function MessageRead() {
    
//SQL Statement
    
$sql "SELECT
              m.message_id, m.content, m.betreff, m.datum, b.benutzer, m.autor
            FROM
              messages m, benutzer b
            WHERE 
              m.empfaenger = '" 
$this->Session->get('BenutzerId') . "' AND
              b.benutzer_id = m.autor
            ORDER BY
              m.message_id DESC"
;
//Ausgabe bei Erfolg
    
$this->HtmlReturnSuccess '<table class="tablemessage">
                                   <tr>
                                      <td class=tablemessagebetreffhighlight>
                                         [size="1"]Betreff: ' 
$this->row['betreff'] . '[/size]
                                      </td>
                                      <td class=tablemessageautorhighlight>
                                          [size="1"]Von: ' 
$this->row['benutzer'] . '[/size]
                                      </td>
                                      <td class=tablemessagedatumhighlight>
                                          [size="1"]Am: ' 
$this->row['datum'] . '[/size]
                                      </td>
                                      <td class=tablemessageantworthighlight>
                                          [url="' 
$_SERVER['PHP_SELF'] . '?mode=write&betreff=Re:' $this->row['betreff'] . '&to=' $this->row['benutzer'] . '&' SID '"][size="1"]Antworten[/size][/url]
                                      </td>
                                      <td class=tablemessagedelhighlight>
                                          <input type=checkbox name=del_' 
$this->row['message_id'] . ' value=del_' $this->row['message_id'] . '> 
                                      </td>
                                   </tr>
                                   <tr>
                                      <td class=tablemessagetext colspan=5>
                                        ' 
$this->row['content'] . '
                                      </td>
                                   </tr>
                                 </table>
'
;
    
    
//Ausgabe bei Fehlschlag
    
$this->HtmlReturnFailure "Deine Nachrichen konnten nicht geholt werden.
\n"
;
    
    
//Ausgabe wenn keine Zeile aus der DB geholt wird
    
$HtmlReturnEmpty "Keine Nachrichten vorhanden
\n"
;
    
    
//pruefen ob ein SQL Statement uebergeben wurde
    
if(empty($sql)) {
      echo 
$this->HtmlReturnFailure;
      return 
'SQLEmpty';
    }
    
    echo 
$this->Read($sql$HtmlReturnEmpty);
  } 
Mit dieser rufe ich die Funktion Read() in der Elternklasse auf:
PHP-Code:
   protected function Read($sql$HtmlReturnEmpty) {
     
//Datenbank Verbindung herstellen
     
if(!$this->ConnectDB()) {
       echo 
"Die Verbindung zur Datenbank konnte nicht hergestellt werden";
       return 
$this->HtmlReturnFailure;
     }
     
     
//Das SQL Statement ausfuehren
     //Bei Erfolg $HtmlReturnSuccess ausgeben
     //Bei Fehlschlag $HtmlReturnFailure ausgeben
     
if($result mysql_query($sql)) {
       
       
//feststellen wie viele Zeilen ausgewaehlt wurden
       //wenn keine dann $HtmlReturnEmpty zurueckgeben
       
if(mysql_num_rows($result) == 0) {
       
         return 
$HtmlReturnEmpty;
         
       } else {
//sonst die Tabelle zurueckgeben 
         
$return '';
         while(
$this->row mysql_fetch_assoc($result)) {
           
$return .= $this->HtmlReturnSuccess;
         }
         return 
$return;
       }
     } else {
//wenn der Query nicht ausgefuehrt wurde
       
return $this->HtmlReturnFailure;
     }
   } 
Ich möchte mit der Funktion MessageRead() auf die Funktion Read() zugreifen, einen Query durchführen und dann die gewonnen Daten in der Variabe $row als ein assoziatives Array speichern.
Das klappt auch, aber nun möchte ich die Daten aus dem Array in HTML Code setzen den ich mit $HtmlReturnSuccess überschreibe. Mein Problem besteht darin ,dass die Daten aus $row nicht in den HTML Code gesetzt werden.

Wie kann ich das Problem lösen?
Ich hoffe ihr versteht was ich meine.

MfG und Thx 250
250Euro ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 12.05.2006, 17:55  
Erfahrener Benutzer
 
Registriert seit: 02.03.2005
Beiträge: 305
DerDesian
Standard

Ich verstehe was du meinst
(Hab da mal im 'Lehrbuch für wirres Denken' was gelesen... *reusper*)

Du meinst die Vaiablen innerhalb von $this->HtmlReturnSuccess wären an die $this->row gebunden und damit auch ihr Inhalt...

$this->HtmlReturnSuccess ist aber leider eine Variable.
Der Code, den du zuweißt, wird zu dem Zeitpunkt interpretiert wie du ihn zuweist, nicht wenn du die Variable benutzt.
Und zu dem Zeitpunkt ist halt noch nix in $this->row drin.
mach ne Funktion draus:




PHP-Code:
<?php
   
function HtmlReturnSuccess() {
                         return 
'<table class="tablemessage">
                                   <tr>
                                      <td class=tablemessagebetreffhighlight>
                                         [size="1"]Betreff: ' 
$this->row['betreff'] . '[/size]
                                      </td>
                                      <td class=tablemessageautorhighlight>
                                          [size="1"]Von: ' 
$this->row['benutzer'] . '[/size]
                                      </td>
                                      <td class=tablemessagedatumhighlight>
                                          [size="1"]Am: ' 
$this->row['datum'] . '[/size]
                                      </td>
                                      <td class=tablemessageantworthighlight>
                                          [url="' 
$_SERVER['PHP_SELF'] . '?mode=write&betreff=Re:' $this->row['betreff'] . '&to=' $this->row['benutzer'] . '&' SID '"][size="1"]Antworten[/size][/url]
                                      </td>
                                      <td class=tablemessagedelhighlight>
                                          <input type=checkbox name=del_' 
$this->row['message_id'] . ' value=del_' $this->row['message_id'] . '> 
                                      </td>
                                   </tr>
                                   <tr>
                                      <td class=tablemessagetext colspan=5>
                                        ' 
$this->row['content'] . '
                                      </td>
                                   </tr>
                                 </table>
'
;
                    }

?>
Dann klappts auch mit den Nachbarn
__________________
Wenn dich was ankotzt, machs besser.
DerDesian ist offline   Mit Zitat antworten
Alt 12.05.2006, 18:02  
Gast
 
Beiträge: n/a
Standard

Lass Dir mal $this->HtmlReturnSuccess ausgeben, nachdem Du es erstellt hast.
PHP-Code:
//Ausgabe bei Erfolg
    
$this->HtmlReturnSuccess 
...
';
    echo '
<div>Debugausgabe', $this->HtmlReturnSuccess, '</div>;
    
//Ausgabe bei Fehlschlag 
Du wirst sehen, dass da kein $this mehr drin vorkommt. Die Ersetzung der Variablen hat bereits stattgefunden.
Wenn Du danach $this->row veränderst, ändert sich die Zeichenkette von $this->HtmlReturnSuccess nicht mehr.


Du kannst bspw eine callback-Methode festlegen, die für jeden Datensatz aufgerufen wird.
PHP-Code:
<?php 
class Base {
    protected function 
Read($sql) {
        
// ungefähr wie mysql_query, nur ohne query und ohne mysql
        
$rows = array(
            array(
'message_id'=>1'content'=>'a'),
            array(
'message_id'=>2'content'=>'b'),
            array(
'message_id'=>3'content'=>'c')
        );
            
        while(list(,
$row)=each($rows)) {
            
$this->handleRecord($row);
        }
    }
    
    protected function 
handleRecord($row) {
        return;
    }
}

class 
Derrived extends Base {
    
    
    public function 
MessageRead() {
        
$this->Read('irgendwelches sql');
    }
    
    protected function 
handleRecord($row) {
        echo 
'[Derrived::handleRecord] id:'$row['message_id'],  ' - '$row['content'], "
\n"
;
    }
}

$d = new Derrived;
$d->MessageRead();
?>
edit: na da muss ich ja beim Tippen kurz eingenickt sein
  Mit Zitat antworten
Alt 15.05.2006, 08:53  
Benutzer
 
Registriert seit: 24.11.2005
Beiträge: 65
250Euro
Standard

dankeschön @all

mfg
250Euro ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine 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
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Frage zu spam bots und captcha litterauspirna PHP Tipps 2008 6 20.05.2008 23:56
Frage zu Typen und Performence notyyy PHP-Fortgeschrittene 13 14.11.2007 02:18
Ein kleine Frage zum posten hier im Forum Kein Genie Off-Topic Diskussionen 3 20.03.2006 13:40
Vererbung von Klassen und Performance ggfan PHP Tipps 2006 5 05.03.2006 12:00
Frage zu Speicherreservierung in PHP FiSiHRO PHP Tipps 2005-2 4 13.09.2005 12:00
Frage zu Objekten und Vererbung PHP-Fortgeschrittene 4 12.09.2005 21:41
.htaccess - Frage Stümper PHP Tipps 2005 11 30.05.2005 11:56
Performence Frage PHP-Fortgeschrittene 10 06.05.2005 19:00
Frage zu einem Editformular PHP Tipps 2005 3 25.04.2005 14:58
mal ne Frage PHP Tipps 2005 7 14.04.2005 09:46
Technische Frage zur Realisation einer Online-Umfrage Stefano PHP Tipps 2005 5 16.03.2005 17:39
Frage zu einer Liste? HTML, Usability und Barrierefreiheit 2 15.02.2005 16:56
Hallo und Frage zu dynamischer Veränderung in Textfeldern. PHP Tipps 2004-2 2 27.12.2004 22:29
[Erledigt] Frage zur Funkrionen? PHP Tipps 2004-2 10 01.12.2004 09:42
[Erledigt] Frage! PHP Tipps 2004 4 27.07.2004 11:25

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
keine echo ausgabe in protected function

Alle Zeitangaben in WEZ +2. Es ist jetzt 21:16 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.