Ahoi Jnnbo
Hallo an alle PHP Spezialisten,
jemand meinte heute zu mir ich würde unübersichtlichen und „aufgeblähter" Code schreiben, wollte mir aber nicht sagen warm und wie bzw. was ich ändern könnte. Meine Frage an euch, ist dieses wirklich der Fall und was könnte ich daran ändern?
Dieser Code ist für das INSERT und UPDATE zuständig:
// Prüfen ob GET gesetztz ist if(isset($_GET['hersteller'])) { $hersteller = $_GET['hersteller']; } // Datensatz aus der Datenbank auslesen $stmt = $mysqli->prepare("SELECT h_id, h_titel, h_titelURL, h_status FROM web_hersteller WHERE h_id=?"); $stmt->bind_param("s", $hersteller); $stmt->execute(); $stmt->bind_result($h_id, $h_titel, $h_titelURL, $h_status); $stmt->fetch(); $stmt->close(); // Ziel URL festlegen $host = htmlspecialchars($_SERVER["HTTP_HOST"]); $uri = rtrim(dirname(htmlspecialchars($_SERVER["PHP_SELF"])), "/\\"); $extra = "hersteller"; if(isset($_POST['abschicken'])){ if(empty($_POST['hersteller'])) { $errors[] = "Geben Sie bitte einen Hersteller an"; } if(empty($_POST['url'])) { $errors[] = "Geben Sie bitte eine Hersteller URL an"; } if(isset($_POST['abschicken']) && empty($errors)) { if(isset($_GET['hersteller'])) { if ($stmt = $mysqli->prepare("Update web_hersteller SET h_titel=?, h_titelURL=?, h_status=? WHERE h_id = ?")) { $h_titel = $_POST["hersteller"]; $h_titelURL = $_POST["url"]; $h_status = $_POST["status"]; $stmt->bind_param("ssss", $h_titel, $h_titelURL, $h_status, $h_id ); }} // Ende $_GET['hersteller'] else { if ($stmt = $mysqli->prepare("INSERT INTO web_hersteller (h_titel, h_titelURL, h_status) VALUES (?, ?, ?)")) { $h_titel = $_POST["hersteller"]; $h_titelURL = $_POST["url"]; $h_status = $_POST["status"]; $stmt->bind_param("sss", $h_titel, $h_titelURL, $h_status); }} $stmt->execute(); header("Location: http://$host$uri/$extra"); } else { echo $mysqli -> error; } }; ?>
<?php
// Prüfen ob GET gesetztz ist
//~ if(isset($_GET['hersteller'])) {
//~ $hersteller = $_GET['hersteller'];
//~ }
// Ziel URL festlegen
$host = htmlspecialchars($_SERVER["HTTP_HOST"]);
$uri = rtrim(dirname(htmlspecialchars($_SERVER["PHP_SELF"])), "/\\");
$extra = "hersteller";
if(isset($_POST['abschicken'])){
if(empty($_POST['hersteller'])) {
$errors[] = "Geben Sie bitte einen Hersteller an";
}
if(empty($_POST['url'])) {
$errors[] = "Geben Sie bitte eine Hersteller URL an";
}
if(empty($errors)) {
if(isset($_GET['hersteller'])) {
// Datensatz aus der Datenbank auslesen - erst nach der Prüfung!!!
$stmt = $mysqli->prepare("SELECT h_id, h_titel, h_titelURL, h_status FROM web_hersteller WHERE h_id=?");
$stmt->bind_param("s", $hersteller);
$stmt->execute();
$stmt->bind_result($h_id, $_POST["hersteller"], $_POST["url"], $_POST["status"]); //evtl falsche Posts einkopiert
$stmt->fetch();
$stmt->close();
if ($stmt = $mysqli->prepare("Update web_hersteller SET h_titel=?, h_titelURL=?, h_status=? WHERE h_id = ?")){
$stmt->bind_param("ssss", $_POST["hersteller"], $_POST["url"], $_POST["status"], $h_id);
}
} elseif ($stmt = $mysqli->prepare("INSERT INTO web_hersteller (h_titel, h_titelURL, h_status) VALUES (?, ?, ?)")) {
$stmt->bind_param("sss", $_POST["hersteller"], $_POST["url"], $_POST["status"]);
}
}
$stmt->execute();
header("Location: http://$host$uri/$extra");
} else {
echo $mysqli -> error;
};
Irgendwie kommen hier mehr Zeilenumbrüche rein als sollten. Zudem ist das Ausmerzen der Umkopiererei irgendwie nicht ganz richtig oder komplett. Frage ist auch, ob der obere Codeblock, das Auslesen aus der DB, da korrekt steht. Immerhin aber sollte der ja nur sein, wenn die Vars dazu auch existieren. Dank und Gruß,
bob from berlin