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

AJAX - Probleme mit PHP-Klassen?

Hallo alle miteinander - hatte einer von euch schon das Problem, dass auf der PHP-Seite, zu der mittels AJAX weitergeleitet wird, keine PHP - Klassen eingebunden werden können?
Code:
include ("../klassen/klasse_fed.php");
$id_einsatz = $_GET["id_einsatz"];
$fed = new fed($id_einsatz);
$fed->einsatz_loeschen();

Sobald ich das Objekt fed bilden möchte, verursacht es den Serverfehler 500. Warum tritt dieses Problem gerade auf der Seite auf, die mit AJAX aufgerufen wird, und sonst nirgendwo?
 
Werbung:
Existiert $_GET["id_einsatz"] und steht da auch der richtige Wert drin?
 
Ja, das ist nicht das Problem. Wenn ich die Funktionalität aus der Klasse direkt in die php-Datei verlege, die per AJAX aufgerufen wird, geht alles:

Code:
<?php
include ("../FUNCTIONS.php");
#include ("../klassen/klasse_fed.php");
$aktion = $_GET["aktion"];

//$eintrag = "Noch nicht festgelegt";
switch($aktion) {
    case "einsatz_speichern_oder_bearbeiten":
        // Gelesen werden eigentlich GET Daten über AJAX
        $id                       = $_GET["id"];
        $datum_von                = $_GET["datum_von"];
        $datum_bis                = $_GET["datum_bis"];
        $uhrzeit_von              = $_GET["uhrzeit_von"];
        $uhrzeit_bis              = $_GET["uhrzeit_bis"];
        $id_kunde                 = $_GET["id_kunde"];
        $id_casemanager           = $_GET["id_casemanager"];
        $kommentar                = $_GET["kommentar"];
        $erledigt                 = $_GET["erledigt"];
    
        // Eigenschaften für Serienelemete
        $serie                    = $_GET["serie"];      // 0 oder 1
        $wochentag                = $_GET["wochentage"];  // Array für Wochentage an welchen sich der Einsatz wiederholen soll
        $rhytmus                  = $_GET["rhytmus"];    // Mögliche Werte: daily, weekly, 2weeks, monthly, individual
        $nr_wochen_rhytmus        = $_GET["nr_wochen_rhytmus"]; // Wenn rhytmus == "individual"
        $nr_wochentag_im_monat    = $_GET["nr_wochentag_im_monat"];
        
        $dauer = minutenabstand_zwei_daten($datum_von." ".$uhrzeit_von, $datum_bis." ".$uhrzeit_bis);
        if($id == 0) {
            // Neuen Einsatz speichern
            $eintrag="INSERT INTO `fed_einsatzplanung` (`id_kunde`,`datum_von`,`datum_bis`,`uhrzeit_von`,`uhrzeit_bis`,`dauer`, `erledigt`,`id_casemanager`,`kommentar`,`geloescht`,`serie`, `wochentage`, `rhytmus`, `nr_wochen_rhytmus`, `nr_wochentag_im_monat`)
            VALUES ('".$id_kunde."', '".$datum_von."', '".$datum_bis."', '".$uhrzeit_von."', '".$uhrzeit_bis."', '".$dauer."', '".$erledigt."', '".$id_casemanager."', '".$kommentar."', '0', '".$serie."', '".$wochentag."', '".$rhytmus."', '".$nr_wochen_rhytmus."', '".$nr_wochentag_im_monat."')";
            $id = standard_sql($eintrag, "");
        }
        else {
            // Wenn eine id vorhanden ist, geht es darum einen vorhandenen Einsatz zu bearbeiten
            $eintrag="UPDATE `fed_einsatzplanung` Set
            `id_kunde`       = '".$id_kunde."',
            `datum_von`      = '".$datum_von."',
            `datum_bis`      = '".$datum_bis."',
            `uhrzeit_von`    = '".$uhrzeit_von."',
            `uhrzeit_bis`    = '".$uhrzeit_bis."',
            `dauer`          = '".$dauer."',
            `erledigt`       = '".$erledigt."',
            `id_casemanager` = '".$id_casemanager."',
            `kommentar`      = '".$kommentar."',
            `geloescht`      = '0',
            `serie`          = '".$serie."',
            `wochentage`     = '".$wochentag."',
            `rhytmus`        = '".$rhytmus."',
            `nr_wochen_rhytmus` = '".$nr_wochen_rhytmus."',
            `nr_wochentag_im_monat` = '".$nr_wochentag_im_monat."' WHERE `ID`='".$id."'";
            standard_sql($eintrag, "");
        }

        $kundenname  = kundenname($id_kunde);
        $casemanager = mitarbeitercode($id_casemanager);

        echo $id_kunde."#*".$kundenname."#*".$datum_von."#*".$datum_bis."#*".$uhrzeit_von."#*".$uhrzeit_bis."#*".$dauer."#*".$erledigt."#*".$id_casemanager."#*".$casemanager."#*".$kommentar."#*".$serie."#*".$wochentag."#*".$rhytmus."#*".$nr_wochen_rhytmus."#*".$nr_wochentag_im_monat."#*".$id;

        break;

        case "einsatz_in_papierkorb":
            $id_einsatz = $_GET["id_einsatz"];
            #$fed = new fed($id_einsatz);
            #$fed->einsatz_loeschen();
            $eintrag = "UPDATE `fed_einsatzplanung` Set `geloescht`='1' WHERE `ID`='".$this->id."'";
            standard_sql($eintrag, "Fehler beim Deaktivieren eines FED-Einsatzes");
            echo $id_einsatz;
        break;
}

?>

Nur wollte ich das alles in der hierfür eigentlich zuständigen Klasse haben.
 
Werbung:
Guck mal in die Logfiles, bei einem 500er Fehler sollte da was drin stehen
 
Genau weiß ich das bei MAMP auch nicht, aber ich tippe mal, dass es irgendwo unter der Installation ein Verzeichnis mit dem Namen log oder logs gibt. Dateiname könnte apache_error.log sein. Eventuell auch noch php_error.log
 
Werbung:
Danke, habe wieder etwas gelernt. Habe die Logdateien gefunden. Allerdings gar kein Eintrag von heute. Der letzte Fehler ist von gestern wegen eines Verweises auf eine nicht existierende Datei. 500? Nix.

Zwischendurch dachte ich daran, dass es am Link liegt. Eine php-Datei in einem Ordner ruft eine JS-Datei auf, die außerhalb dieses Ordners liegt, eine Ebene zurück eben. Die von dort per AJAX aufgerufene php-Datei liegt wiederum im gleichen Ordner wie die erste Datei.

So war ich mir nicht ganz sicher, ob ich die Klasse dann mit "../klassen/klasse_fed.php" - aus der Sicht der PHP-Dateien (das hielte ich für richtig) oder einfach nur mit "klassen/klasse_fed.php" einbinden soll. Da ich aber anschließend eine einfache Funktionsbibliothek mit "../FUNCTIONS.php" eingebunden habe, ist das wohl geklärt - das "../" ist auf jeden Fall richtig. Erstaunlich ist auch, dass die Funktionsbibliothek sich einbinden läßt, die Detei mit der Klasse aber nicht - bzw. das Objekt läßt sich nicht erstellen.
 
Ich bin auf jedem Fall dem Problem ein Stück näher gekommen. Wenn ich das Objekt so bilde:
Code:
$fed = new fed;
$fed->id = $id_einsatz;
$fed->einsatz_loeschen();

ist alles in Ordnung. Der Serverfehler 500 tritt auf, wenn der Aufruf so formuliert ist:
Code:
$fed = new fed($id_einsatz);
$fed->einsatz_loeschen();

wobei doch die __construct - Methode es doch erlauben müsste:
Code:
    public function __construct($id = 0) {
        $this->id_mitarbeiter       = Array();
        $this->anfragen_mitarbeiter = Array();
        if($id != 0) {
            $this->id = $id;
            $this->einsatz_lesen();
        }
    }

Hat jemand eine Idee wo mein Denkfehler ist?
 
Werbung:
So ist es! In $this->einsatz_lesen hatte ich an einer Stelle statt $this->id, $this->ID genutzt, nur gibt es die Eigenschaft ID in Großbuchstaben in dieser Klasse gar nicht. Das war das ganze Problem. Danke fürs Mitdenken!
 
Zurück
Oben