Daten aus Tabelle auf gleicher Seite wie die Eingabefelder

AudiCamper

Mitglied
Hai.

Ich habe schon einige Tutorials durchwühlt auf der Suche nach einem Beispiel oder einer Anleitung zu folgendem Problem:

Ich möchte auf einer Seite ca. 10 Eingabefelder im oberen Bereich platzieren. Nach dem Betätigen eines Buttons sollen aus einer Datenbank Datensätze selektiert werden, die zu den Eingaben passen und in Form einer Tabelle auf "der gleichen Seite", nämlich im unteren Bereich der Seite angezeigt werden. Unterhalb dieser Tabelle soll ein Button betätigt werden können, der den in der Tabelle ausgewählten Satz in Ausgabefelder übernimmt, die dann anstelle der Tabelle angezeigt werden. Bei nur einem Treffer in der DB soll keine Tabelle angezeigt werden, sondern es sollen die Ausgabefelder direkt bestückt werden. Die Tabelle kann auch auf einer anderen Seite angezeigt werden. Nach der Auswahl soll aber wieder die Eingaseite dargestellt werden, damit der Bediener eine Zuordnung seiner Eingabe sieht.

Ich hoffe ich konnte das Problem richtig schildern. Das DB-Handling mit PHP macht mir keine Sorgen, aber ich weiß einfach nicht, wie ich das mit PHP und HTML (Tabelle) hinkriege.


Gruß

AudiCamper
 
Zuletzt bearbeitet:
Hallo AudiCamper

Ich bin mir nicht sicher, ob ich dein Problem richtig verstanden habe.
Was mir unklar ist, was meinst du "gleicher Seite" ?
Meinst du etwa, dass die Seite ohne neu zu laden die Ergebnisse anzeigen soll ?

Wenn ja ist dies nicht PHP, sondern AJAX oder auch etwas unschöner mit einem Iframe realisierbar.

Prinzipiell kannst du das was du meinst aber so realisieren und wenn nötig via php bei einem Neuaufruf einfach inkludieren.

Lies einfach die Datensätze aus der Datenbänke aus und zähle sie.
Wenn es einer ist, dann machst du die anzeige, wie du meinst,
falls es mehr als einer ist, dann kannst du die Tabelle anzeigen lassen.
Falls es keine sind, dann passiert einfach gar nichts.


Oder habe ich dein problem falsch verstanden ?

Gruß Simon
 
Hallo.

Danke erstmal dafür, dass Du dich um mein Problem kümmerst.

Also AJAX und IFRAME kenne ich nicht. Werde ich mir aber mal anschauen. Du hast mein Problem genau verstanden. Ich meine ich habe oben auf der HP die Eingabefelder und unten möchte ich das Ergebnis z.B. einer Suche anzeigen.

Was meinst Du mit "Neuaufruf einfach inkludieren". Ich bin noch nicht lange mit PHP am programmieren. Das mit dem entscheiden, ob eine Tabelle angezeigt werden soll oder gleich die Ausgabe kriege ich glaube ich hin. Aber halt auf der gleichen Seite eben :rolleyes:

Vielleicht fällt Dir ja noch etwas ein. Oder Du versuchst es einem "Anfänger" einfacher zu erklären. :p

Bis denne

AudiCamper
 
Hallo AudiCamper

Mit "Neuaufruf einfach inkludieren" meine ich, dass falls du nicht auf diese Techniken von Ajax, auf die ich gleich noch komme, setzen willst, dann würde ich es einfach so machen, dass du den SELECT In eine Datei setzt und direkt darunter dann eben auch noch die Ausgabe mit den IFs.

Dann kommen wieder die If zum einsatz.
Wenn kein Datensatz gefunden wurde, wird einfach nichts angezeigt, sonst entweder der Datensatz oder die Tabelle.

Nun kurz zu Ajax. Ajax basiert auf Javascript und ist somit auch abhängig ob der User Javascript an hat oder nicht. Falls er es deaktiviert hat kann er womöglich dein Script nicht ausführen. Das ist der Nachteil dieser Methode.
Ajax funktioniert so, dass du mit einem Javascript Befehl sagst, dass eine Seite (von mir aus: create_table.php) aufruft, dessen Ergebnisse in eine Variable speichert und du kannst diese dann in ein <div>, <td>, ... was auch immer einfügen um es anzuzeigen.
(Falls du dich dafür interessierst, schwebt viel dazu im Internet herum ;) )
Das heißt du musst auf die eigentliche Seite dann nur das Formular um die Suche durchzuführen, aber kein Select packen und in der Datei create_table.php ist der Select sowie die Ausgabe der Tabelle drin.
Wenn das Formular betätigt wird, musst du dann nur noch diesen Javascript Befehl ausführen und bekommst entweder die Tabelle, den Datensatz oder gar nichts zur Ausgabe.

Wie gesagt such einfach mal nach AJAX mit Google.


Gruß Simon
 
Hai SimonErich.

Mein Ansatz war eigentlich das sog. "Affenformular", welches sich immer wieder selbst aufruft. Eigentlich müßte das doch damit auch funktionieren. Ich weiß nur noch nicht richtig, wie ich den Ausgabebereich aufbaue. Und nach der Ausgabe soll der Bediener sich ja weiterhin auf der gleichen Seite befinden, in der er schon die Eingabe getätigt hat.

Wenn ich die Ausgabe nicht auf der gleichen Seite wie die Eingabefelder anzeigen kann, ist das ganze irgendwie wertlos. Ich habe in etlichen Beiträgen gelesen, dass genau das mit dem Affenformular funktioniert.

Ich hatte mit das genau so gedacht, wie Du das erwähnst. Der DB-Connect, die Suche und die Ausgabe alles in seperate PHP-Dateien. Nur der "normale" Ablauf ist, so hat ich das verstanden, dass die Ausgabe mit echo dann auf eine neue Seite geschieht.

Vielleicht kannst Du mir oder irgendwer noch einen entscheidenden Tip geben. Ich werde jetzt erstmal nach Ajax googeln. Allerdings möchte ich das schon gern in PHP realisieren. Denn mit der Bedingung, dass JavScript installiert sein muß, will ich den Bediener nicht belasten.

Gruß AudiCamper
 
Hi AudiCamper,
wenn ich dich jetzt richtig verstanden habe ist die Lösung zu deinem Problem die einfache Abfrage
PHP:
if(isset($_POST['submit'])){ ... }
Was man mit "wenn der Senden-Button gedrückt wurde" übersetzen kann (dafür muss der Submit-Button natürlich "submit" heißen, und Groß-/Kleinschreibung beachten!)
Das alles kann dann problemlos in ein und demselben Script stehen
Beispiel für den Aufruf-Vorgang:
Seite wird erstmalig/ohne Parameter aufgerufen
-> Ausgabe Formular (if(isset)-Teil = false, wird also übergangen)
Formular wird gesendet:
-> Ausgabe Formular, Ausgabe eventuelle Ergebnisse (der Code dazu innerhalb des if-Blocks, wird ausgeführt da jetzt true)
Was wann angezeigt werden soll kannst du so regeln und drehen und wenden wies dir passt ;) , mit Negation (!isset()...) oder einem else{...} erweitern und dann gibst du eben immer den Teil aus, der gebraucht wird.

MfG
 
Hai drucko.

Kannst Du mir bitte ein kleines Formular als Beispiel posten. Nur damit ich es richtig verstanden habe.

Danke für eine Hilfe

AudiCamper
 
Hallo AudiCamper :)

Tut mir leid, dass ich es hin und wieder zu schnell erkläre.
Das was ich dir erklärt habe ist genau das was du meinst ;)
Du hast mich glaub ich bei dem Punkt mit den verschiedenen Dateien falsch verstanden. Es war auch etwas verwirrend. Die Methode mit den verschiedenen Dateien wird nötig sein, wenn du AJAX verwendest. In PHP ist es wuascht und wäre villeicht sogar übersichtlicher, wenn du nur eine PHP Datei verwenden würdest.

Also die PHP Datei würde ich wie folgt aufbauen.

Diese Datei nennen wir search.php
PHP:
// Hier startet deine PHP Datei.
// Du kannst das wie oben beschrieben mit isset(SUBMIT_BUTTON) machen
// um zu checken, ob der User vom Formular kommt

// Hier würde ich standardwerte für die Formularfelder definieren, falls der User etwas leer gelassen hat.
// Da ich deine Formularfelder nicht kenne nehme ich mal hier beispiele für eine Suche
// Ich verwende hier die kurzfrom von if
 $such_wort = ($_POST['such_wort'] != "") ? $_POST['such_wort'] : "";
 $order_by = ($_POST['order_by'] != "") ? $_POST['order_by'] : "id";
 $order_richtung = ($_POST['order_richtung'] != "") ? $_POST['order_richtung'] : "DESC";

// Nun kommt die Datenbank abfrage, die diese Werte braucht
 $lala = mysql_query("SELECT feld1 FROM table1 WHERE such_wort LIKE '%". $such_wort ."%' ORDER BY ". $order_by ." ". $order_richtung);

// bla bla bla

// jetzt kommen die IF Teile.
// Falls nun ein Datensatz gefunden wurde, dann wird dieser angezeigt
// falls mehrere werden diese angezeigt
// falls keiner wird nichts angezeigt


// und nun kommt das Formular
// WICHTIG: Es ruft diese Datei wieder auf.
?>
<form action="search.php" method="post" name="lala">
</form>
 
Noch kurz folgendes Beispiel, damit du dir vorstellen kannst wie das mit dem IF-Teil gehen soll:

PHP:
if(isset($_POST['submit'])){
	// Formular wurde abgesendet
	// hier z.B. passt jetzt schön das Beispiel von SimonErich rein
	$result = mysql_query('...'); 
	$num_rows = mysql_num_rows($result);
	if(empty($result)){
		// kein Ergebnis
		echo 'Kein Eintrag gefunden für:'.$_POST['textfield'].'
			<form name="form" method="post" action="">
			<input type="text" name="textfield" value="'.$_POST['textfield'].'">
			<input type="submit" name="submit" value="Abschicken">
			</form>';
	}
	elseif($num_rows == 1){
		// nur ein Ergebnis
		echo 'Ein Eintrag gefunden für:'.$_POST['textfield'].'
			<form name="form" method="post" action="">
			<input type="text" name="textfield" value="'.$result['fieldname'].'">
			<input type="submit" name="submit" value="Abschicken">
			</form>';
	}
	else{
		// mehrere Ergebnisse
		echo $num_rows.' Einträge gefunden für:'.$_POST['textfield'].'
			<form name="form" method="post" action="">
			<input type="text" name="textfield">
			<input type="submit" name="submit" value="Abschicken">
			</form><br><br>
			<table>';
		while ($row = mysql_fetch_array($result)) {
			// Hier Tabelle zur Ausgabe generieren
			echo '<tr><td>'.$row[0].'</td><td>'.$row[1].'</td></tr>';
		}
		echo '</table>';	
	}
}
else{
	// Neuaufruf des Scripts, Form wurde noch nicht abgesendet
	echo '<form name="form" method="post" action="">
		<input type="text" name="textfield">
		<input type="submit" name="submit" value="Abschicken">
		</form>';
}
das musst du auf deine Bedürfnisse noch etwas sauberer/anders gestalten, aber das Funktionsprinzip sollte dir so klar sein.
MfG
 
Jau, ich glaube wir sind auf dem richtigen Weg.

Das mit dem Mysql-Kram kriege ich glaube ich hin. Allerdings beiße ich mir gerade die Zähne an son einem blöden Formular aus.

PHP:
<html>
<head>

</head>
<body>
Bitte geben Sie eine Anschrift ein und senden Sie das Formular ab:
<form action = "<?php $PHP_SELF ?>" method = "post">
    Nachname: <input type="text" name = "nachname" value="<?php echo $_POST['nachname'];?>"><p> 
    Vorname:  <input type="text" name = "vorname"  value="<?php echo $_POST['vorname'];?>"><p> 
    <input type = "submit" name = "suche" value="Suche">
    <input type = "submit" name = "alle" value="Alle anzeigen">
    <input type = "reset">
</form>
</body>
<?php
error_reporting("E_ALL"); 


if(isset($_POST['suche'])){    
	  echo "Suche";
}
if(isset($_POST['alle'])){    
	  echo "Alle";
}
?>
</html>

Ich schreibe die Werte direkt wieder in das Formular, weil sie sonst nach dem Absenden nicht mehr in den Eingabefeldern enthalten sind. Allerdings und das ist zur Zeit mein Problem, funktioniert dann der Reset-Button nicht mehr. Ich vermute im $_POST stehen dann immer noch die alten Werte.

Vielleicht können wir das ja wieder gemeinsam lösen.;-)

AudiCamper
 
Zurück