html <form> in PHP erstellen?

Ador

Erfahrenes Mitglied
Hallo,
ich erstelle hier gerade eine Speisekarte. Die Daten werden aus einer XML gelesen.
In HTML hab ich eine <form> erstellt:
Code:
<form action = "test.php" method = "post">
                Menge:
                <select name="menge">
                    <option value="0" selected> 0 </option>
                    <option value="1"> 1x </option>
                    <option value="2"> 2x </option>
                    <option value="3"> 3x </option>
                    <option value="4"> 4x </option>
                    <option value="5"> 5x </option>
                    <option value="6"> 6x </option>
                    <option value="7"> 7x </option>
                    <option value="8"> 8x </option>
                    <option value="9"> 9x </option>
                    <option value="10"> 10x </option>
                </select>
Diese form brauch ich nun aber ca. 50mal, halt sooft wieviel es Speisen in der Speisekarte gibt.
Kann ich das irgendwie in PHP umsetzen, sodass ich das <form> sooft benutzen kann wie ich will und nicht 50mal das <form> für jede Speise einzeln haben muss?
Oder gibt es da auch eine HTML Lösung? Hoffe mein Problem wird verstanden.

mfg
ad0r
 
HTML-Code kannst du in PHP ganz einfach per echo erstellen.

also zum Beispiel:
PHP:
echo '<form action = "test.php" method = "post">';

Wichtig ist, dass du entweder einzelne Anführungszeichen benutzt, oder die doppelten im HTML mit \ escapest.

um die echo Befhele kannst du dann ganz einfach eine Schleife setzen, die den Code so oft schreibt, wie du willst.
 
Hi, danke für die Antwort. Ich glaube das ist noch nicht ganz was ich meine.
Also ich hab hier eine Seite über die ich mit php und xml folgendes Ausgebe:

Code:
echo "vorspeisen: " . "<br>" . $menu->vorspeisen->v020 . "<br>";
echo "preis: "      . $menu->vorspeisen->preis . "<br>";
echo "</br>";
echo "hauptspeisen: " . "<br>" . $menu->hauptspeisen->h020 . "<br>";
echo "preis: "      . $menu->hauptspeisen->preis . "<br>";

Die Ausgabe ist dann etwa so:

Vospeisen:
Pizza1
Preis: 5,80
Menge: (hier sollte dann das erstelle <form> mit der auswahl von 0-10 sein)

Hauptspeisen:
Pizza2
Preis: 8,80
Menge: (hier sollte dann das erstelle <form> mit der auswahl von 0-10 sein)
 
Hi,

Deine Speisen solltest Du genausowenig einzeln ausgeben. Und warum willst Du jetzt wieder für jede Auswahlliste ein eigenes Formular haben? Ich dachte, das hätten wir in Deinem letzten Thread schon geklärt.

Zeig doch mal, wie Deine xml-Datei überhaupt aussieht.

LG
 
meine xml wird so:

Code:
	<menu>
		<vorspeisen>
			<v020>Guacomale</v020>
			<preis>5,80</preis>
		</vorspeisen>
		
		<hauptspeisen>
			<h020>schnitzel</h020>
			<preis>7,50</preis>
		</hauptspeisen>
	</menu>

Natürlich wird dort noch einiges mehr stehen.
Am Ende sollte es so sein, dass auf einer Seite alle Vorspeisen, Nachspeisen, Getränke.... usw stehen und jeweils neben jedem Gericht, wo Name und Preis steht, dann dieses Auswahl <form> (0-10) ist.
Das Ausgeben über php aus der xml funtkioniert schon wie es soll, da hab ich mein PHP Buch befragt, wie ich das <form> erstelle weiß ich auch, hab ich. Die xml ist auch vorhanden, nun hab ich noch Probleme, dass alles möglichst gut und richtig zusammen zu packen, dass ich es dann effizient nutzen kann :)

mfg
 
Hi,

die XML-Struktur ist nicht gut. Die Zugehörigkeit eines Preises zum Gericht sollte schon eindeutig aus der Struktur hervorgehen.

Etwas besser:

XML:
<menu>
   <vorspeisen>
      <eintrag id="v020">
         <name>Guacomale</name>
         <preis>5,80</preis>
      </eintrag>
      <eintrag id="v030">
         <name>Salat</name>
         <preis>6,90</preis>
      </eintrag>
   </vorspeisen>
   
   <hauptspeisen>
      <eintrag id="h020">
         <name>schnitzel</name>
         <preis>7,50</preis>
      </eintrag>
      <eintrag id="h030">
         <name>halbes Schwein auf Toast</name>
         <preis>13,20</preis>
      </eintrag>
   </hauptspeisen>
</menu>

Das Ganze solltest Du dann in entsprechenden Schleifen durchlaufen, statt statisch die einzelnen Gerichte auszugeben, sonst müsstest Du ja bei jeder Änderung der Speisekarte das PHP-Skript anpassen und Deine XML-Datei wäre überflüssig.

Hier mal ein kleines Beispiel, das über simplexml alle Hauptspeisen in einer Tabelle ausgibt:

PHP:
<table>
<?php
   $menu = simplexml_load_file("menu.xml");
   foreach($menu->hauptspeisen->eintrag as $eintrag) {
      echo "<tr>\n";
      $attributes = $eintrag->attributes();
      echo "<td>" . $attributes['id'] . "</td>\n";
      echo "<td>" . $eintrag->name . "</td>\n";
      echo "<td>" . $eintrag->preis . "</td>\n";
      echo "</tr>\n";
   }
?>
</table>

LG
 
Zuletzt bearbeitet von einem Moderator:
Ok super! Das funktioniert, dass versteh ich und das kann ich so erweitern.
Aber wie krieg ich da nun mein <form> reingebastelt, damit man bei jeder Speise zwischen Menge 0-10 wählen kann?
mfg

Würde das wie folgt funktionieren:

PHP:
<html>
<body>
<?php
/* Einlesen der Datei in ein Objekt */
$menu = simplexml_load_file("menu2.xml");

	echo "Vorspeisen:";
	echo "</br>";
	echo "</br>";
   foreach($menu->vorspeisen->eintrag as $eintrag) 
   {
      $attributes = $eintrag->attributes();
      echo $attributes['id'] . " " . $eintrag->name . $eintrag->preis . "</br>" .          
	  			'<form action = "auswertung.php" method = "post">
                Menge:
                <select name="menge">
                    <option value="0" selected> 0 </option>
                    <option value="1"> 1x </option>
                    <option value="2"> 2x </option>
                    <option value="3"> 3x </option>
                    <option value="4"> 4x </option>
                    <option value="5"> 5x </option>
                    <option value="6"> 6x </option>
                    <option value="7"> 7x </option>
                    <option value="8"> 8x </option>
                    <option value="9"> 9x </option>
                    <option value="10"> 10x </option>
					
                </select>';
	  echo "</br>";
	  echo "</br>";
   }

	echo "</br>";
	echo "</br>";
	
	echo "hauptspeisen:";
	echo "</br>";
	echo "</br>";
   foreach($menu->hauptspeisen->eintrag as $eintrag) 
   {
      $attributes = $eintrag->attributes();
      echo $attributes['id'] . " " . $eintrag->name . $eintrag->preis . "</br>" .          
	  			'<form action = "auswertung.php" method = "post">
                Menge:
                <select name="menge">
                    <option value="0" selected> 0 </option>
                    <option value="1"> 1x </option>
                    <option value="2"> 2x </option>
                    <option value="3"> 3x </option>
                    <option value="4"> 4x </option>
                    <option value="5"> 5x </option>
                    <option value="6"> 6x </option>
                    <option value="7"> 7x </option>
                    <option value="8"> 8x </option>
                    <option value="9"> 9x </option>
                    <option value="10"> 10x </option>
                </select>';
	  echo "</br>";
	  echo "</br>";
   }
   
   echo '<input type="button" id="anzeigen" value="Preis anzeigen!">
                	<input type="submit" id="submit" value="Bestellen!">';

?>
</body>
</html>

Nun muss ich das <form> ja nur sooft einfügen, wieviele Kategorien (Hauptspeisen, Vorspeisen, Getränke...) ich habe, geht das so wie ich mir das vorstelle?

mfg
 
Hi,

mach nur ein Formular um das Ganze, wie in Deinem anderen Thread vorgeschlagen und vergib den Eintrag-IDs entsprechende Namen für die Select-Elemente, damit Du die Bestellmenge dem jeweiligen Gericht zuordnen kannst.

Und frag jetzt nicht, wie Du 10 Options generieren kannst, eine simple for-Schleife, die 10 mal durchlaufen wird, solltest Du doch hinbekommen.

LG
 
Würde das wie folgt funktionieren:

PHP:
<html>
<body>
<?php
/* Einlesen der Datei in ein Objekt */
$menu = simplexml_load_file("menu2.xml");

	echo "Vorspeisen:";
	echo "</br>";
	echo "</br>";
   foreach($menu->vorspeisen->eintrag as $eintrag) 
   {
      $attributes = $eintrag->attributes();
      echo $attributes['id'] . " " . $eintrag->name . $eintrag->preis . "</br>" .          
	  			'<form action = "auswertung.php" method = "post">
                Menge:
                <select name="menge">
                    <option value="0" selected> 0 </option>
                    <option value="1"> 1x </option>
                    <option value="2"> 2x </option>
                    <option value="3"> 3x </option>
                    <option value="4"> 4x </option>
                    <option value="5"> 5x </option>
                    <option value="6"> 6x </option>
                    <option value="7"> 7x </option>
                    <option value="8"> 8x </option>
                    <option value="9"> 9x </option>
                    <option value="10"> 10x </option>
					
                </select>';
	  echo "</br>";
	  echo "</br>";
   }

	echo "</br>";
	echo "</br>";
	
	echo "hauptspeisen:";
	echo "</br>";
	echo "</br>";
   foreach($menu->hauptspeisen->eintrag as $eintrag) 
   {
      $attributes = $eintrag->attributes();
      echo $attributes['id'] . " " . $eintrag->name . $eintrag->preis . "</br>" .          
	  			'<form action = "auswertung.php" method = "post">
                Menge:
                <select name="menge">
                    <option value="0" selected> 0 </option>
                    <option value="1"> 1x </option>
                    <option value="2"> 2x </option>
                    <option value="3"> 3x </option>
                    <option value="4"> 4x </option>
                    <option value="5"> 5x </option>
                    <option value="6"> 6x </option>
                    <option value="7"> 7x </option>
                    <option value="8"> 8x </option>
                    <option value="9"> 9x </option>
                    <option value="10"> 10x </option>
                </select>';
	  echo "</br>";
	  echo "</br>";
   }
   
   echo '<input type="button" id="anzeigen" value="Preis anzeigen!">
                	<input type="submit" id="submit" value="Bestellen!">';

?>
</body>
</html>

Nun muss ich das <form> ja nur sooft einfügen, wieviele Kategorien (Hauptspeisen, Vorspeisen, Getränke...) ich habe, geht das so wie ich mir das vorstelle?
Auf den ersten Blick scheint es zu gehen. Nun muss ich mir nur das php Script hinfummeln, welches mir den Endpreis usw. auswertet, ausgibt.

mfg
 
Hallo,
ich mal wieder mit meinem <form>:p

Nun geht schon alles ganz gut.
Wird alles schön erkannt und ausgelesen, ein Problem hab ich aber grad noch.

hier mein XML:

Code:
<menu>
    <vorspeisen>
        <eintrag id="v020">
            <name>Guacomale</name>
            <preis>5.80</preis>
			<beschr>Guacomale ist ein südafrikascniher tee gesüßt mit dem und dem bla und das ist schön.</beschr>
        </eintrag>
        <eintrag id="v030">
            <name>Salat</name>
            <preis>6.90</preis>
			<beschr>Das ist nur eine beschreibung, nichts besonderes.</beschr>
        </eintrag>
        <eintrag id="v040">
            <name>Fischsuppe</name>
            <preis>2.95</preis>
			<beschr>Das ist nur eine beschreibung, nichts besonderes.</beschr>
        </eintrag>
    </vorspeisen>
	
    <hauptspeisen>
        <eintrag id="h020">
            <name>schnitzel</name>
            <preis>7.50</preis>
			<beschr>Das ist nur eine beschreibung, nichts besonderes.</beschr>
        </eintrag>
        <eintrag id="h030">
            <name>halbes Schwein auf Toast</name>
            <preis>13.20</preis>
			<beschr>Das ist nur eine beschreibung, nichts besonderes.</beschr>
        </eintrag>
        <eintrag id="h040">
            <name>pizza tonno</name>
            <preis>11.23</preis>
			<beschr>Das ist nur eine beschreibung, nichts besonderes.</beschr>
        </eintrag>
    </hauptspeisen>
</menu>

Hier mein php:

PHP:
<?php
/* Einlesen der Datei in ein Objekt */
$menu = simplexml_load_file("menu2.xml");
$zaehl = 0;
echo '<form action = "auswertung.php" method = "post">';
foreach($menu->vorspeisen->eintrag as $eintrag) 
{
	$zaehl++;
	$form_name = "menge".$zaehl;
		$attributes = $eintrag->attributes();
		
	echo $eintrag->name . "  " . $eintrag->preis  . "€</br>" . $eintrag->beschr . '<br>';
	echo '
		Menge:
		<select name="'; echo $form_name; echo '">
			<option value="0"> 
			0x </option>
			<option value="1">';
			echo "1x " . " = " . $eintrag->preis . " €"; echo' </option>
			<option value="2">';
			echo "2x " . " = " . bcmul( $eintrag->preis , 2 , 2 ) . " €"; echo' </option>
			<option value="3">';
			echo "3x " . " = " . bcmul( $eintrag->preis , 3 , 2 ) . " €"; echo' </option>
			<option value="4">';
			echo "4x " . " = " . bcmul( $eintrag->preis , 4 , 2 ) . " €"; echo' </option>
			<option value="5">';
			echo "5x " . " = " . bcmul( $eintrag->preis , 5 , 2 ) . " €"; echo' </option>
			<option value="6">';
			echo "6x " . " = " . bcmul( $eintrag->preis , 6 , 2 ) . " €"; echo' </option>
			<option value="7">';
			echo "7x " . " = " . bcmul( $eintrag->preis , 7 , 2 ) . " €"; echo' </option>
			<option value="8">';
			echo "8x " . " = " . bcmul( $eintrag->preis , 8 , 2 ) . " €"; echo' </option>
			<option value="9">';
			echo "9x " . " = " . bcmul( $eintrag->preis , 9 , 2 ) . " €"; echo' </option>
			<option value="10">';
			echo "10x " . " = " . bcmul( $eintrag->preis , 10 , 2 ) . " €"; echo' </option>			
		</select>';
	echo "</br></br>";
}
echo '
	<input type = "submit" value = "wählen">
</form> ';	


?>

nun hätte ich gern noch die hauptspeisen mit ausgelesen, so wie ich dachte (foreach($menu_ausw->vorspeisen->eintrag as $eintrag, foreach($menu_ausw->hauptspeisen->eintrag as $eintrag)) geht das leider nicht, also ich kann da nicht mit , trennen.
Wie bekomm ich nun also noch meine hauptspeisen und getränke und co... ausm xml dort eingelesen?

mfg
 
Zurück