Zwei SQL-Abfragen in $_POST Variable speichern

Hallo zusammen,

ich möchte mehrere nacheinander folgende SQL-Abfragen in eine POST-Variable bringen. Natürlich könnte man jetzt auch fragen, ob die SQL-Abfragen sich zu einer Abfrage zusammenfassen lassen, aber mir geht es hier um das Prinzip, wenn es zwei gesonderte Abfragen sind.

<?php </pre>

    session\_start();





    require "\_db.php";





    &nbsp;&nbsp; &nbsp;$antrag=$mysqli-\>query("SELECT \* FROM tabelle1 WHERE id='1';");





    &nbsp;&nbsp;&nbsp; $kunde=$mysqli-\>query("SELECT \* FROM tabelle2 WHERE kd = '2';");





    &nbsp;&nbsp; &nbsp;$\_POST=$kunde-\>fetch\_array();





    &nbsp;&nbsp; &nbsp;$\_POST[]=$antrag-\>fetch\_array();





    &nbsp;&nbsp; &nbsp;print\_r($\_POST);





    ?\>




Knackpunkt ist also die zweite $\_POST Variable und die eckigen Klammern dahinter. Dadurch werden die Werte an die erste POST-Variable abgehängt und nicht überschrieben.

Aber gibt es Einwände, weshalb man das nicht machen sollte?

Gruß und Dank!

Hallo,
$_POST ist ein von PHP gefüllte Variable durch z.b. FORM Felder .

Wenn dann $_SESSION benutzen.

Du erreichst mit $_POST eigentlich nichts.

Nach dem das PHP den HTML kram ausgeliefert hat,
ist $_POST schon vernichtet.

Also nutze eigene Variablen oder $_SESSION
aber $_POST nur wenn du FROMvariable lesen willst.

Ok. Der Code war auch nur ein Beispiel.

Ist dann die Möglichkeit über eckige Klammern zwei Abfragen zusammen zubringen in Ordnung, wenn ich innerhalb einer FORM arbeitet und es doch einmal notwendig ist zwei mySQL-Abfragen in eine POST-Variable zu bringen?

Gruß

Wäre es nicht einfacher, die DB Anfragen an der Stelle auszuführen, an welcher du die Resultate benötigst? Dann musst du weder $_POST noch $_SESSION verwenden.

Hi,

ich glaube du hast die Idee hinter der $_POST Geschichte noch nicht so ganz verstanden.

in dieser Variable (eigentlich ein indiziertes Array) speichert der Server die über post vom HTTP Protokoll übergebenen Werte. (als Key => Value Paar). Schau dir das prinzip noch ein Mal an.

mit den eckigen Klammern sprichst du nur einzelne indizies des Arrays an.

Das Prinzip das du suchst ist hier also meiner Meinung nach komplett falsch.
Du müsstes noch mehr Informationen geben.

z. B.
Wozu zusammen fassen?
Gehören sie logisch zu einem „Objekt“? Warum dann keine Klasse schreiben, diese initialisieren und dann füllen?

Wie lange werden sie benötigt?
Werden sie nur während der einen Skripausführung benötigt? Warum dann nicht ein Array basteln:

$arr = array();
$arr["wert1"] = $ErgebnisErsteAbfrage;
$arr["wert2"] = $ErgebnisZweiteAbfrage;

und dann vielleicht ein Objekt daraus machen.

Ich weiß nicht wie weit du in PHP oder allgemein Programmierung bist?

lg

Artur

Hi,

Kurze Anmerkung:

z. B.
Wozu zusammen fassen?
Gehören sie logisch zu einem „Objekt“? Warum dann keine Klasse
schreiben, diese initialisieren und dann füllen?

Klassen machen in php nicht immer Sinn (solange man kein Framework oder MVC oder Objekt-Relation-Mapper einsetzt). Sinn machen Klassen z.B. bei einer Klasse Page die den Inhalt nicht kennt oder um Coderedundanz zu vermeiden eine Klasse z.B. Table usw. Programmiert man öfter PHP-Anwendungen, macht es Sinn ein kleines Mircoframework zu basteln (HTML-Komponenten als Klassen erstellen).

Jedoch ohne MVC oder ORM, macht eine Klasse Kunde (Bsp. von Alex) nicht so viel Sinn, besser ist es die Anfragen an Ort und Stelle zu verarbeiten bzw. anzuzeigen. Benötigt man davon Daten im weiteren Verlauf -> $_SESSION.

Gruß XXD

Also

Ok. Der Code war auch nur ein Beispiel.

Ist dann die Möglichkeit über eckige Klammern zwei Abfragen
zusammen zubringen in Ordnung, wenn ich innerhalb einer FORM
arbeitet und es doch einmal notwendig ist zwei mySQL-Abfragen
in eine POST-Variable zu bringen?

POST wird vom Server generiert und ist nicht zum schreiben gedacht.
Auch sehe ich hier kein Query der irgendwas mit POST zu tun hat.

Gruß

Wenn nimmt man SESSION

also

/* session muss vorher initialisiert werden */
/* session mit daten von post
funktion clearpost ist selbst zu schreiben und dient als SicherheitsLayer .
*/
$_SESSION[‚bla‘] = clearpost($_POST[‚blafeld‘]);
$_SESSION[‚plop‘] = clearpost($_POST[‚plopfeld‘]);

/* wenn keine post daten für ein feld da sind dann default wert nehmen */
// bla
if (!isset ($_SESSION[‚bla‘]) ) {$_SESSION[‚bla‘] = ‚defaultbla‘; }
// plop
if (!isset ($_SESSION[‚plop‘]) ) {$_SESSION[‚bla‘] = ‚defaultplop‘; }

/* query mit aktuellem session wert , entweder default oder geschickt durch POST */
// bla
$que = „SELECT blablabla FROM blaundblub WHERE blub=“.$_SESSION[‚bla‘];
// plop
$que2 = „SELECT plopplop FROM plopplop WHERE plop=“.$_SESSION[‚plop‘];

/* wiederherstellen der infos für die nächste form (nochmal abschicken )*/
$HTMLOUT =

HTMLEND;

/* ausgabe der Form mit aktuellen daten , z.b. Änderung der Abfrage . */
echo $HTMLOUT;

ungetestetes Beispiel .

Übrigens, ein PHP Programm läuft nicht wie ein z.b. Installiertes Programm zu hause .
Es läuft nur einmal und endet nach Ausgabe der Daten , das heisst, nach dem Der Browser die Seite hat, weiss der Server schon gar nichts mehr von irgendwelchen variablen . Erst mit Session und einer entsprechenden ID weiss der Server wieder welche SESSION Daten diesem Besucher gehören . Und Post Daten müssen auch neu gesendet werden, da auch da der Server alles neu macht . Es ist alles Zustandslos .
Mann kann also eigentlich nicht PHP anhalten mal eben eine FORM zum user schicken und dann weiterlaufen im Programm und warten bis mehr daten kommen, nein des geht nicht . Das PHP wird immer neu gestartet bei jedem Seitenaufruf . Ergo müssen alle Daten entweder via FORM und „hidden“ felder oder in der URL mitgeführt werden oder über SESSION ID und dann das Session Modul.

OK
Hallo zusammen,

zuerst mal ein gutes Neues Jahr.

Mein Vorgehen ist also falsch.

Gruß und Dank!

Alex

Ich stimme dir zu. :smile:

Aber möchte noch eins Hinzufügen:

Meiner Meinung nach muss MVC oder ORM garnicht hergenommen werden. Es reicht, wenn die Daten logisch zu einem „Objekt“ gehören und es Funktionen gibt die logisch zu den Daten gehören.

Nehmen wir eine User klasse mit den Funktionen login(), logout(), den zugehörigen Daten „name, profileimg, etc.“.

Ich finde einach so zu sagen, Klassen machen in PHP nur sinn wenn… ist ewas zu banal gesehen. Meistens ist es eine Frage dessen, was das Resultat sein soll und auch eine Frage der angesetzten Philosophie.

Aber wobei ich definitiv zustimme: In dem gefragen Fall benötigt man keine Klasse.
Ich wollte nur auf den Umstand hinweisen dass es Klassen gibt :smile:

lg

Artur

Mache es so:

$antrag = ...
$kunde = ...

$daten = array();

//Hier schreibst du die Resultierenden Arrays in ein Array hinein:

$daten["antrag"] = $antrag-\>fetch\_array();
$daten["kunde"] = $kunde-\>fetch\_array();

print\_r($daten);

Die $_POST ist wie bereits gesagt eine Server Variable (um genauer zu sein ein Array) die die ihre Daten aus dem HTTP Header holt. Sie ist sozusagen mit $_GET und $_REQUEST eine der Variablen, die dafür hergenommen werden um die Kommunikation zwischen client (Browser, z. B. durch eine html form) und server zu erlauben.

Daten innerhalb deines Skripts solltest du über eigene Variablen schaukeln. Also z. B. über mein oben beschriebenes Array.

Gerne helfe ich dir weiter wenn du Fragen für den Einstieg in PHP benötigst. Schreib mir einfach.

Artur

Hallo Artur,

Meiner Meinung nach muss MVC oder ORM garnicht hergenommen
werden. Es reicht, wenn die Daten logisch zu einem „Objekt“
gehören und es Funktionen gibt die logisch zu den Daten
gehören.

Zu MVC stimme ich dir zu, setze das auch nicht ein (zumindest in php). Jedoch ORM muss ich dir wiedersprechen, ORM ist aus Programmierersicht Gold wert, nicht nur wegen der Einfachheit sondern auch aus Sicht der Wartbarkeit, weil ORM ermöglicht ein abstraktes Arbeiten unabhängig von der verwendeten Datenbank. Die objektrelationale Funktionalität wird hier den Objekten selbst zugewiesen, ohne dass eine aufwändige Programmierung in PHP notwendig ist, wer einmal damit gearbeitet hat, wird nie wieder was anderes wollen.

Wäre vielleicht auch etwas für euer Projekt, schau es dir mal an:
http://www.doctrine-project.org/

Gruß XXD

Zu MVC stimme ich dir zu, setze das auch nicht ein (zumindest
in php). Jedoch ORM muss ich dir wiedersprechen, ORM ist aus
Programmierersicht Gold wert, nicht nur wegen der Einfachheit
sondern auch aus Sicht der Wartbarkeit, weil ORM ermöglicht
ein abstraktes Arbeiten unabhängig von der verwendeten
Datenbank. Die objektrelationale Funktionalität wird hier den
Objekten selbst zugewiesen, ohne dass eine aufwändige
Programmierung in PHP notwendig ist, wer einmal damit
gearbeitet hat, wird nie wieder was anderes wollen.

Hi :smile:

ich glaube ich habe mich nicht ganz genau ausgedrückt :smile: ORM benutze ich auch sehr sehr stark. (siehe unser Projekt in meinem Post. Das haben wir auch nach ORM aufgebaut. Sogar mit Oberfläche wo man nur die DB auswählt und die Klassen die das ORM representieren automatisch genereiert werden :smile: )

Ich meinte nur, es muss nicht dringend ORM oder MVC verwendet werden um die Benutzung von Klassen, also OO-Programmierung rechtzufertigen.

) besser? :smile:

Wäre vielleicht auch etwas für euer Projekt, schau es dir mal
an:
http://www.doctrine-project.org/

Danke! :smile:

Gruß XXD

Ebenfalls!