• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

methode aufrufen wenn befüllt

Yosh™

Mitglied
Hallöchen,

ich will aus meiner Klasse eine Methode ausgeben, aber nur wenn sie zuvor aus einer Methode aus der selbigen Klasse befüllt wurde und dann soll sie an einem bestimmten Punkt auf der Hompage ausgegeben werden und nicht oben am Rand :D
Folgende Struktur meiner datein:

-> function.php (Funktion um methoden automatisch aufzurufen)
-> acp.class.php (Klasse)
->acp.php (Ausgabe & HTML Code)

function.php
PHP:
function getFunction($acp, $main, $pdo){
        if(isset($_POST['fnc'])){
            $acp = new acp($pdo);
            $acp->$_POST['fnc']();

        }


acp.class.php
PHP:
class acp{
    
     function getRequestParameter($param){
         if(isset($_REQUEST[$param])){
             return $_REQUEST[$param];
         } else {
             return false;}
         }

    function uploadHompage(){
       if($this->getRequestParameter('test') == 'richtig'){
            return true;
       } else {
            return $this->addErrorToDisplay('Nur PNG Formate erlaubt.');
      }
   }
}


acp.php
PHP:
<?php
require('class/acp.class.php');
require("models/functions.models.php");
?>
<div id="header"></div>

<div id="wrapper">
<!--  HIER SOLL DIE FEHLERMELDUNG AUSGEGEBEN WERDEN -->

<form methode="post">
   <input type="hidden" fcn="test">
   <input type="test" name="test">
<input type="submit">

</form>
</div>

Wie kriege ich das ganze jetzt hin, das die Methode nur ausgegeben wird, wenn sie auch befüllt wurde?
Mit <?=$acp->addErrorToDisplay('')?> erwartet er ein parameter von mir, den ich aber ja nicht gebe, sondern Methoden in der Klasse, sofern ein False zurück geliefert wird.

Hoffe man kann verstehen was ich erreichen will.

MfG
 
Werbung:
Setz den Parameter doch optional.

Mit null belegen und wenn es was anderes außer null ist, dann kannst ausgeben lassen.

Bitte bitte nicht "abc.class.php" schreiben. Das brauch man in der heutigen Zeit nicht mehr. "Abc.php" reicht völlig aus. :D Klassennamen fangen am besten auch immer mit einem Großbuchstaben an. ;)
 
Okay, klingt logisch, danke übrigends für die Tipps :D,

Allerdings wenn ich
Acp->addErrorToDisplay(NULL) ausgebe, nimmt er ja immer NULL.

Ich möchte es ja in der Ausgabe an einem bestimmten Punkt haben bzw in einem bestimmten DIV (wrapper).

Standartmäßig gibt er echos ja immer oben am Bildschirm aus.
Also wie wäre der Code für acp.php (Ausgabe und HTML Code) :x.
acp.php
PHP:
<?php if($acp->addErrorToDisplay(NULL)){echo $acp->addErrorToDisplay('');}?>

Klasse
PHP:
function addErrorToDisplay($message){
if($message != NULL){
return '<div class="errorMessage">'.$message.'</div>';} else {
return false;}
}
So würde ich es machen, würde aber keinerlei Sinn ergeben.
 
Werbung:
PHP:
public function addErrorToDisplay($message = null) {}

Die Ausgabe kannst du doch in der View dort platzieren wo du Sie haben möchtest.

Klassenmethoden müssen mit public, private oder protected definiert werden. Methoden ohne jede explizite Deklaration sind als public definiert.
Wäre trotzdem nicht schlecht, wenn du ein public vorne dran hängst ;)
 
Zuletzt bearbeitet:
Okay, das hat mir weiter geholfen :D!

PHP:
public function addErrorToDisplay($message = null){
        if($message != null){
            return '<div class="errorMessage">'.$message.'</div>';
        } else {
            return false;
        }
    }

PHP:
<?=$acp->addErrorToDisplay();?>

Also, ich hab jetzt mal ne Test funktion geschrieben welche dann addErrorToDisplay aufruft.
Und darunter nochmal nen echo geschrieben um zu schauen ob er in die methode rein geht.

Das echo gibt er aus, allerdings addErrorToDisplay nicht :s

Wenn ich hingegen in der Ausgabe direkt reinschreibe
PHP:
<?=$acp->addErrorToDisplay('Test');?>
gibt er mir die fehlermeldung aus
 
Entweder reden wir aneinander vorbei oder ich verstehe etwas falsch.

Wenn du deine Methode aufrufst ohne einen Parameter zurück zu geben, wird lediglich false zurückgegeben. Dh. keine Ausgabe erfolgt. Wenn ein Parameter mitgegeben wurde soll die Fehlermeldung ausgegeben werden?


PHP:
public function addErrorToDisplay($message = null){
        if(!is_null($message)){
            return '<div class="errorMessage">'.$message.'</div>';
        }
   }

PHP:
<?php echo $acp->addErrorToDisplay('Error'); ?>
 
Werbung:
Jain, ich will in meiner klasse selber die methode addErrorToDisplay aufrufen können um dann (Wie der Methodenname schon sagt) dem User eine Fehlermeldung ausgeben.

Da ich diese aber in einem bstimmten Teil meines HTML Codes aufrufen will, damit die Platzierung der Fehldermeldung auch stimmt, muss ich ja irgendwo im HTML code angeben

Wenn in meiner Klasse methode addErrorToDisplay aufgerufen, platziere mir adderrortodisplay im div "wrapper" und nicht einfach oben am Browserrand, wo PHP ja echo's gerne hinpackt sofern sie in einer klasse oder funktion stehen, die aber im HTML code selber nicht aufgerufen wird.

Wie du es jetzt geschrieben hast, funktioniert es ja auch, nur ebend muss ich dem Parameter im HTML code selber angeben. und müsste jedes mal schreiben

PHP:
if($acp->methodeDieEinenFehlerausgebenSoll == FALSE){
  $acp->addErrorToDisplay('Fehlermeldung');
}

Das ganze will ich mir aber ersparen, indem ich das schon direkt in der Methode "methodeDieEinenFehlerAusgebenSoll" festlege.

PHP:
class acp{
function addErrorToDisplay($message = null){
echo $message;
}

function einfachEineFunktion(){
if(1==2){
return true;
} else {
return $this->addErrorToDisplay('Fehlermeldung');
}
}
}


Und jetzt sollte im HTML code sein:
PHP:
<head>
</head>

<body>
<div id="header">
</div>

<div id="wrapper">
Wenn in der Class acp die Methode addErrorToDisplay aufgerufen wird, platziere mir die Fehlermeldung genau hier.
</div>
</body>
 
Zuletzt bearbeitet:
Das echo hat in einer Funktion / Klasse eigentlich nichs zu suchen. Solle rein in der View vorhanden sein. Mit PHP bleibt dir nichts anderes übrig als die Fehlermeldung auch genau dort vorher zu platzieren. Arbeitest mit dem MVC Prinzip?
 
Versuche es zumindest nach dem MVC prinzip.

nur hab ich derzeit ledeglich Klassen und Views :DD Models arbeite ich noch ein.
Models sind ja für Datenbeschaffung
Controller für Datenverarbeitung
und Views für Ausgaben da.

Später werde ich aus den Controllern jegliche Datenbeschaffungen in Models auslagern.
 
Werbung:
Ja, dann übergibst du doch im Controller im optimal Fall deine Fehlermeldung an die View.

Beispiel:

Controller:
PHP:
class TestController {

     public function indexAction() {
            // Hier passiert irgendwas

           // Wenn Fehler speichere Nachricht
          $message = 'Fehler';

          return ['message' => $message];
    }
}

View:
PHP:
<div id="fehlermeldung">
<?php if(isset($message) && !empty($message)) : ?>
<p><?php echo $message; ?></p>
<?php endif; ?>
</div>
 
Tschuldige, hatte zutun.

Selbst so erkennt er es nicht.
Ein Echo im Controller wird zwar ausgegeben, aber ein return wird im views aus irgendeinem grund, nicht erkannt.
 
Tschuldige, hatte zutun.

Selbst so erkennt er es nicht.
Ein Echo im Controller wird zwar ausgegeben, aber ein return wird im views aus irgendeinem grund, nicht erkannt.
Kein Problem.

Du musst ja auch den Rückgabewert in der View mit einem echo ausgeben. :D

Ich kann dir nicht weiterhelfen, solange ich nicht weiß wie dein Projekt aufgebaut ist. Wie deine Controller etwas weitergeben und und und.
 
Werbung:
Also:
ich arbeite mit includes, heißt:

Ich habe eine index.php mit folgendem Code:

PHP:
<html>

<head>
</head>

<body>
<?php
    require("class/pdo.php");  //DB Verbindung
    require("class/main.php"); //Controller
    require("class/function.php")  // Funktionen

    $myClass= new main($pdo);
?>
<?php$includeDir = ".".DIRECTORY_SEPARATOR."templates".DIRECTORY_SEPARATOR;$includeNotExist = $includeDir."404.html";if(isset($_GET['template']) && !empty($_GET['template'])){
$pro = str_replace("\0", '', $_GET['template']);$includeFile = basename(realpath($includeDir.$pro.".php"));$includePath = $includeDir.$includeFile;if(!empty($includeFile) && file_exists($includePath)){
include($includePath);} else {
include($includeNotExist);}
} else {
include('templates/home.php');}
?>
</body>
</html>
Erstmal meine function.php (dient dazu Methoden aus klassen aufzurufen)

PHP:
function getFunction($acp, $main, $pdo){
    if(strpos($_SERVER['REQUEST_URI'], "&acp=")){
        if(isset($_POST['fnc'])){
            $acp = new acp($pdo);
            $acp->$_POST['fnc']();

        }
    } else {
        if(isset($_POST['fnc'])){
            $myClass = new main($pdo);
            $myClass->$_POST['fnc']();
        }
    }
}

function.php klappt einwandfrei, weil er ruft die Methoden ja auf, bzw führt Sachen aus.

Dann habe ich mein Controller:

PHP:
<?php
function getRequestParameter($param){
        if(isset($_REQUEST[$param])){
            return $_REQUEST[$param];
        } else {
            return false;
        }
    }
    public function addErrorToDisplay($message = null){
        if($message != null){
            return $message;
        } else {
            return false;
        }
    }

function setAddress(){
        if($_GET['ucp'] == 'address'){
            if(ctype_digit($this->getRequestParameter('postalcode'))) {
             die;
            } else {  
                  $this->addErrorToDisplay('Die PLZ besteht nicht nur aus Nummern.');
            }
        }
    }
?>

Und zu guter letzt mein address.php (view)

HTML:
<?php if(isset($message) && $message != NULL){echo '<div class="errorMessage">'.$message.'</div>';}?>

<h2>Anschrift ändern</h2><br><form method="post"> <table style="width:500px;"> <tr> <th>Straße/Hausnummer:</th> <td><input style="width:200px;" type="text" name="street"><input type="text" style="margin-left:5px; width:25px;" name="streetNumber"> </td> </tr> <tr> <th>PLZ:</th> <td><input type="text" name="postalcode"></td> </tr> <tr> <th>Stadt:</th> <td><input type="text" name="town"></td> </tr> <tr> <td colspan="2"><button class="btn" type="submit" name="fnc" value="setAddress" style="padding-top:0px; height: 33px;">Speichern</button></td> </tr> <tr> <td style="font-size: 10px;" colspan="2">Mit dem Absenden dieses Formulars, bestätige ich die Echtheit und Richtigkeit der von mir angegebenen Daten.</td> </tr> </table></form>
 
Zuletzt bearbeitet:
Ganz einfach:

Ich kann somit bei forms (die ja meistens eine Methode brauchen um eine Aktion auszuführen) mithilfe des feldes <input type="hidden" name="fnc" value="MethodName"> einfach ohne <?php if isset($_POST['foo'])?> eine Methode aufrufen.
 
Werbung:
Zurück
Oben