Moin!
Eingangsfrage: Was ist an dieser Funktion falsch?
Antwort: Viel zuviel, nicht nur der Syntaxfehler.
Im Einzelnen:
function ctm($was = "get", $wasschreiben = "kdnr" , $schreibenvalues = "$kdnr") {
Ist es sinnvoll, wirklich _alle_ Funktionsparameter mit Defaultwerten vorzubelegen? Ist die gewählte Reihenfolge sinnvoll?
Ist es sinnvoll, eine gemeinsame Funktion zum Lesen und Schreiben zu benutzen? Warum nicht _zwei_ Funktionen, eine zum Lesen, und eine zum Schreiben?
@mysql_connect("localhost","webXXX","meinpasswort") or die("Die Verbindung zur Datenbank konnte nicht hergestellt werden !<br />\nBitte kontaktieren sie uns !");
//DB wählen
@mysql_select_db("usr_web88_1") or die("Die Datenbank konnte nicht ausgewählt werden !<br />\nBitte kontaktieren sie uns !");
Örks. Ok, wenn man vorhat, je PHP-Skript nur ein einziges Mal auf seine Datenbank zuzugreifen, dann kann man den DB-Connect auch in die einzige Funktion packen. Aber mehrere Aufrufe der Funktion kosten dadurch unnötig Zeit. Die Verbindung zur Datenbank wird ja nicht in Nullzeit hergestellt.
if ($was == "get")
{
$mysql_query_getkundendata = "SELECT * FROM kundendaten WHERE kdnr = '$kdnr' LIMIT 1";$getkundendata = @mysql_query($mysql_query_getkundendata) or die("Ihre Daten konnten nicht aus der Datenbank gelesen werden !<br />\nVon MySQL angegebener Grund: <b>".mysql_error()."</b>");
$daten = mysql_fetch_assoc ( $getkundendata );
}
elseif ($was=="write"){
$mysql_query_adduser = "INSERT INTO kundendaten ($wasschreiben) VALUES ($wasschreibenvalues) WHERE kdnr = '$kdnr'";
@mysql_query($mysql_query_adduser) or die("Konnte User nicht anlegen, da ich nichts in die Tabelle schreiben konnte.<br />\nVon MySQL angegebener Grund: <b>".mysql_error()."</b>");
}
Hier ist der eigentliche Grund, warum man lieber zwei Funktionen machen sollte, statt einer Universalfunktion.
Die Leseroutine benötigt nur einen einzigen Parameter, nämlich die Kundennummer. Trotzdem muß man die Funktion dafür mit "ctm('get','1234')" aufrufen. Eine Funktion "get_kd('1234')" wäre viel schneller geschrieben.
Umgekehrt ist das Schreiben von neuen Kundeneinträgen in der Funktion selbst ziemlich knapp abgewickelt - dafür muß man außerhalb der Funktion dann heftig arbeiten, obwohl das auch komplett in einer Schreibfunktion erledigt werden könnte. Es wäre beispielsweise kein Problem, den kompletten zu schreibenden Datensatz als _ein_ Array zu übergeben:
$datensatz = array(
'name' => 'Müller',
'vorname' => 'Hans'
//...
)
put_kd($datensatz)
Solch ein Array liefert die jetzige ctm-Funktion und künftige get_kd-Funktion ja aus MySQL schon zurück.
Die Schlüssel werden zu DB-Feldern, und die Werte dann eingefügt.
global $daten,$getkundendata,$mysql_query_getkundendata;
global zu benutzen ist Ultraböse.
}
Zusammengefaßt: Du hast eine Funktion, aus der du besser zwei Funktionen machst, und die dann noch verbessert werden sollten hinsichtlich ihrer Aufgaben.
- Sven Rautenberg