Mehrere Abfragen zu einer Kombinieren

Hallo zusammen,

ich habe mehrere Abfragen einer MySQL Datenbank, deren Ergebnisse auch in einer Forum angezeigt und bearbeitet werden.

Es wäre aber einfacher für mich, wenn alles zu einer Abfrage bzw. alle Abfrageergebnisse in einer $_POST Variablen gespeichert werden. Die Möglichkeit über einen Tabellenalias kenne ich schon, aber damit komme ich nicht so richtig zurecht. Gibt es noch eine andere Möglichkeit?

Hier der Beispielcode:

$vertrag=$mysqli-\>query("SELECT \*, DATE\_FORMAT(beginn,'%d.%m.%Y') as beginn, DATE\_FORMAT(ablauf,'%d.%m.%Y') as ablauf,
DATE\_FORMAT(per,'%d.%m.%Y') as per FROM vertraege\_lv WHERE id\_vertrag='{$\_POST['vertrag']}' AND id\_vn='{$\_SESSION['kundenauswahl']}';");
$vertragfeld=$vertrag-\>fetch\_array();

$vn=$mysqli-\>query("SELECT vertraege\_lv.id\_vn, name, vorname FROM vertraege\_lv, persdaten WHERE persdaten.id\_vn = vertraege\_lv.id\_vn
AND persdaten.id\_vn = '{$vertragfeld['id\_vn']}';");
$vnfeld=$vn-\>fetch\_array();

$vp1=$mysqli-\>query("SELECT vertraege\_lv.id\_vp1, name, vorname FROM vertraege\_lv, persdaten WHERE persdaten.id\_vn = vertraege\_lv.id\_vp1 
AND persdaten.id\_vn = '{$vertragfeld['id\_vp1']}';");
$vp1feld=$vp1-\>fetch\_array();

$bezug1=$mysqli-\>query("SELECT vertraege\_lv.bezugsrechterl, name, vorname FROM vertraege\_lv, persdaten WHERE persdaten.id\_vn = vertraege\_lv.bezugsrechterl
AND persdaten.id\_vn = '{$vertragfeld['bezugsrechterl']}';");
$bezugerl=$bezug1-\>fetch\_array();

Gruß und Dank!

Den Wert in eine SQL-Abfrage einzufügen ohne ihn vorher auf unzulässige Werte zu kontrollieren
(wie hier -> :id_vertrag=’{$_POST[‚vertrag‘]}’ AND…)
ist SEHR SEHR SEHR schlecht!
google mal nach SQL-Injection und danach weißt du was ich meine.

Aber jetzt mal zu deiner Frage(die ich leider nicht verstehe :smiley: ). was soll den noch in deinem Post-Array stehen? meinst du sowas wie $_REQUEST? da stehen alle Werte von $_GET,$_POST und $_COOKIE drin.
Was für ein Nutzen erhoffst du dir dadurch wenn alles im Post-Array steht?

mfg

Hallo und danke für die Antwort,

also das mit der SQL-Injection korrigiere ich noch. Ich dachte das beträfe nur INSERT-Anweisungen. Naja, wieder was gelernt.

Bis jetzt ist es eben so, dass ich gesonderte Abfragen mache und daraus dann die jeweiligen Feldvariablen erhalte. Im Programm werden dann die Werte in den HTML-Elemente über das Value-Tag wieder ausgeben.

Beispiel: Ausgabe der Vertragsinhabers:

echo "{$vnfeld['name']}, {$vnfeld['vorname']}";

Oder Ausgabe der Versicherungsart:

<?php echo htmlspecialchars($vertragfeld['versart']);?>

Da gibt es aber ein Problem. Derzeit wird die Abfrage nicht auf Fehler geprüft. Ob alle Pflichtfelder ausgefüllt wurden, ob in ein Feld für eine Zahl auch eine Zahl steht etc.

Derzeit werden die Werte in die Datenbank geschrieben und wieder abgefragt. Dazwischen passiert nichts. Ich möchte also nun eine Fehlerprüfung einbauen. Angenommen die findet dann einen Fehler. Dann wird die Speicherung in die Datenbank übersprungen, die Abfrage durch die o.g. Befehle ist dann leer und die Eingabefelder auch. Die eingetragenen Werte sind verschwunden und der Nutzer muss die Werte erneut eingeben. Hätte ich aber $_POST Variablen in den Value-Tags stehen, dann werden die Werte erneut ausgegeben und die Eingaben des Nutzers bleiben erhalten. Deshalb dachte ich mir eine Abfrage in ein $_POST zu machen. Dann kann ich alle Werte über dieses $_POST Feld in den Value Tags erneut anzeigen lassen.

Soweit klar?

Gruß

Du willst, wenn eine Eingabe geschieht(fehlerhaft oder korrekt spielt keine Rolle), das der Nutzer sehen kann was er ursprünglich eingegeben hat, jedoch wenn die Eingabe richtig war, alle Werte in die Datenbank geschrieben werden. richtig?
und was genau macht dir da ein Strich durch die Rechnung?
Was du machst, ist erstmal eine Funktion(!!) schreiben in der du alle Validierungsregeln für jedes Feld definierst.
Das Formular was abgeschickt wird, wird NUR an diese Funktion gesendet.
Und bitte sowas nie wieder machen: value="<?php echo htmlspecialchars($vertragfeld['versart']);?>"
(Die Eingaben werden vor dem Eintrag in die Datenbank validiert und nicht danach.)
Was ich persönlich dann machen würde, wäre das die Validierungsfunktion ein zweidimensionales Array zurückgibt
nämlich die Eingabedaten selber und als zweite Dimension der jeweilige Fehler zu dem Feld
z.B.:

$data = validierungsFunktion();

und hier folgt dann direkt dein Formular:
‚.‘.$data[‚vertrag‘][‚error‘].’.’

wenn die Validierungsfunktion keine Fehler gefunden hat kann sie die Daten des Nutzers aus der Datenbank zurückliefern.

und zu deinen Abfragen: die kannst du locker zu einer einzigen Abfrage zusammenfassen, da du immer wieder auf die Tabelle vertraege_lv zugreifst.

ich hoffe dass ich dein Problem etwas nachvollziehen konnte.

mfg
favorite

Danke!
Hallo und danke für Eure Antworten!