Dynamisches Formular Auswahl erhöhen

IvOOry

Grünschnabel
Dynamisches Formular in DB Eintragen

Schönen guten Morgen,

folgendes ich versuche für mein Restaurant eine kleine Abrechnungshilfe zu schreiben, damit ich nicht so viel
Papierkram habe und die Übersicht besser behalten kann. Die auswertung ist soweit fertig und läuft auch nur
das Eintragen bereitet mir noch etwas Schwierigkeiten. Mein PHP/html/js Wissen hällt sich leider sehr in grenzen
aber ich Arbeite daran. :)

Auf der Seite die ich versuche zu basteln ist also ein Formular mit einigen DropDown Boxen, einige sind Statisch
wie Tisch (1-25), Ort: (Im/Außerhaus) und Gäste (pro Tisch 1-8) die Dynamischen Felder sind nun unsere Gerichte.
Ich habe nun eine Datenbank mit unserer Karte angelegt und gefüllt.

(Beispiel)
ID: 4
Artikel: Ruccolasalat
Anzahl: 1
Kat: Vorspeise
Preis: 6,90

Die dynamische DropDownBox mit Daten aus der Datenbank zu füttern ist kein Problem, dies mache ich mit diesem Script.

PHP:
<?php
$db = mysql_connect(host", "root", "pw");
mysql_select_db("fasan",$db);
$sql = "SELECT id, Artikel FROM karte WHERE kat ='Vorspeise'";
$rs = mysql_query($sql);

while($row = mysql_fetch_array($rs))
{
  echo "<option value=\"".$row['id']."\">".$row['Artikel']."\n  ";
}
?>

Nun habe ich 2 Fragen, zum einen wie kann ich ein preselectet mit einbringen, da er beim obrigen Beispiel mir ja direkt
die erste Vorspeise (Ruccolasalat) Anzeigt (also die erste ID der Kategorie Vorspeisen) er soll mir aber nur Vorspeisen
als Wort einzeigen und dadrunter dann die einzelnen Gerichte oder genügt es wenn ich einfach in die Datenebank einen
Artikel Vorspeise hinzufüge und es DESC sortieren lasse? Oder gibt es eine Elegantere Lösung für dieses Problem? :confused:

Mein zweites Problem ist nun das ja jeder Kunde unterschiedlich viel Bestellt, ein Tisch z.B. nur eine Cola ein andere Tisch
2 Kaffee und 2 Stück Kuchen oder aber auch ein Tisch mit 10 Getränken 5 Vorspeisen und 4 Hauptgerichten etc. etc.

Nun wäre es ja Dumm eine Tabelle mit 10 Vorauswahlmöglichkeiten für jede Kategorie zu erstellen (Vorspeise, Getränke, Hauptgericht, Alkohol, Dessert etc. wo man dann nur eintragen muss obwohl man nur 2 Getränke eintragen will.
Ich hätte also gern 1 Zeile Pro "Kategorie" die man dann je nach Bestellung mit nem Butten wie "Position hinzufügen"
hinzuzufügen kann oder ähnliches. Ich habe nun versucht da Problem auf grundlage von einem Tuturial hier aus dem
Forum zu lösen doch leider will es mir nicht gelingen und wollte nun euch bitte mir etwas unter die Arme zu greifen
wenn ihr Könnt.

liebe grüße Ive
 
Zuletzt bearbeitet:
Zumindest mal was zum ersten Problem.

Erweitere mal deine Abfrage um das Feld "kat" und ändere deinen Code so ab:

PHP:
$gruppe = "";

while($row = mysql_fetch_array($rs)) 
{ 
  if ($gruppe != $row['kat']) {
    echo '<optgroup label="' .$row['kat'] .'">';
  }
  echo "<option value="".$row['id']."\">".$row['Artikel']."\n  "; 
  if ($gruppe != $row['kat']) {
    echo '</optgroup>';
    $gruppe = $row['kat'];
  }
}

Oder soll einfach nur in der Liste als erster Eintrag "Vorspeise" stehen? Dann gibt dies doch direkt im HTML Code ein bevor die Ausgeba via PHP gemacht wird:

HTML:
<option value="">Vorspeise</option>
 
Hallöchen Tobe, danke für deine schnelle Antwort. Nachdem ich den Fehler in der 8 Zeile entfernt hatte lief es dann auch, aber
war nicht was ich meinte aber das <option value="">Vorspeise</option> war Perfekt, danke hierfür. Manchmal sieht man
den Wald vorlauter Bäumen nicht. :D

Nun bleibt nur noch das Problem das ich nicht weiß wie ich quasi dynamisch mehr Felder mit anzeigen lasse. :(
 
So, wenn das erste Problem erledigt ist, nehmen wir uns das nächste vor.

Es gibt hier ein Liste mit deinen Vorspeisen. Wird das Formular abgeschickt und der (ungültige) Eintrag "Vorspeise" ist markiert, passiert gar nichts. Ist einer der anderen Einträge markiert, wird dieser zusammen mit den bereits bestellten Vorspeisen unten aufgelistet.

Das Array "$v" ist hier nur im Einsatz weil ich die Daten nicht auseiner Datenbank auslese. Das musst du halt bei dir noch anpassen.

PHP:
<?php
session_start();

$v = array("","Feldsalat", "Tomatensalat", "Kartoffelsalat", "Ruccolasalat", "gemischter Salat");
?>

<form name="add" action="add1.php" method="post">
<select name="vorspeise[]" size="1">
    <option value="0" style="color:red;">Vorspeise</option>
    <option value="1">Feldsalat</option>
    <option value="2">Tomatensalat</option>
    <option value="3">Kartoffelsalat</option>
    <option value="4">Ruccolasalat</option>
    <option value="5">gemischter Salat</option>
</select>
<br />
<input type="Submit" name="bestellen" value="Bestellen" />
<p>&nbsp;</p>
<p>Bereits bestellt:</p>

<?php
if (isset($_POST["bestellen"])) {
	//Prüfen ob kein Eintrag ausgewählt wurde
	if ($_POST["vorspeise"][$a] != "0") {
		$_SESSION["vorspeise"][] = $_POST['vorspeise'][0];
	}

	for ($a = 0; $a < count($_SESSION["vorspeise"]); $a++) {
		echo $v[$_SESSION["vorspeise"][$a]] ."<br />";
	}
}
?>

</form>

Teste mal ob du damit weiterkommst, ansonsten melde dich einfach wieder.

Gruß Thomas
 
Hallöchen tombe und Danke für deine Hilfe ich habe es bisher so gelöst es funktioniert auch alles soweit,
nur leider trägt er die Daten nicht in die Datenbank ein. Ich poste dir mal den Code meiner Seite vielleicht
findest du den Fehler (Wird weder eine bestätigung noch Fehlermeldung der Eintragung ausgegeben). :(

Der Code ist zwar nicht schön und auch Optisch noch nicht angepasst aber funktionieren soll es ja nur
erst mal ich hoffe ihr habt da ne idee für mich.Und vorallem Problematisch könnte es werden wenn man
mehr als nur eine Vorspeise/Hauptgericht etc. hat könnte ich mir vorstellen.


PHP:
<html>
<head>
<title>.:: Eintragen ::.</title>
<LINK href="Style.css" type=text/css rel=STYLESHEET>
<script type="text/javascript">
<!--
function clone_this(objButton)
{
if(objButton.parentNode)
    {
    tmpNode=objButton.parentNode.cloneNode(true);
    target=objButton.parentNode.parentNode;
    target.appendChild(tmpNode);
    for(j=0;j<target.lastChild.childNodes.length;++j)
        {
        if(target.lastChild.childNodes[j].type=='text')
            {
            target.lastChild.childNodes[j].value='';
            break;
            }
        }
    objButton.value="entfernen";
    objButton.onclick=new Function('f1','this.parentNode.parentNode.removeChild(this.parentNode)');
    }
}
//-->
</script>
<?php
// Datum 
  //$da=date("j.n.Y");  
  $da=date("d.m.Y");

  $ze=date("H:i");
  
if ($vSend) 

{     
     if($db = mysql_connect("localhost", "usr", "pw"))
   {     
          mysql_select_db("fasan",$db);     
          $sql = "INSERT INTO kasse (Tisch,ort,gast,datum,Vorspeise,Hauptgericht,Nachtisch,Getraenke,Vanz,Hanz,Nanz,Ganz) VALUES ('$Tisch','$ort','$gast','$datum','$Vorspeise','$Hauptgericht','$Nachtisch','$Getraenke','$Vanz','$Hanz','$Nanz','$Ganz')";
      $result = mysql_query($sql,$db);   
         echo "<br><class=\"klFrame\"><font color=\"#333333\">Ihr Daten wurden erfolgreich eingetragen!</font>";     
    }
 else
   {  echo "<br><class=\"klFrame\"><font color=\"#333333\">es ist ein fehler aufgetreten</font>";
   }     
}     

?>

<form>
  <table width="90%" height="80" border="0" align="center">
  <tr>
    <td><fieldset>
      <p>
        <legend class="klFrame"><font color="#333333">Bestellung Eintragen</font><br>
        </legend>
      </p>
      <table width="600" border="0" align="center">
        <tr>
          <td><div align="center" class="klFrame"><font color="#333333">Tisch</font>:</div></td>
          <td width="7%"><select name="Tisch" class="Listen" id="Tisch">
            <option value="1" selected>1</option>
            <option value="2">2</option>
            <option value="3">3</option>
            <option value="4">4</option>
            <option value="5">5</option>
            <option value="6">6</option>
            <option value="7">7</option>
            <option value="8">8</option>
            <option value="9">9</option>
            <option value="10">10</option>
          </select></td>
          <td><div align="center" class="klFrame"><font color="#333333">Bestellungsart</font>:</div></td>
          <td><select name="ort" class="Listen" id="ort">
            <option value="Im Haus" selected>Im Haus</option>
            <option value="Au&szlig;erhaus">Au&szlig;erhaus</option>
          </select></td>
          <td><div align="center" class="klFrame"><font color="#333333">G&auml;ste</font>:</div></td>
          <td><select name="gast" class="Listen" id="gast">
            <option value="1" selected>1</option>
            <option value="2">2</option>
            <option value="3">3</option>
            <option value="4">4</option>
            <option value="5">5</option>
            <option value="6">6</option>
            <option value="7">7</option>
            <option value="8">8</option>
            <option value="9">9</option>
            <option value="10">10</option>
                              </select></td>
        </tr>
        <tr>
          <td>&nbsp;</td>
          <td>&nbsp;</td>
          <td>&nbsp;</td>
          <td>&nbsp;</td>
          <td>&nbsp;</td>
          <td>&nbsp;</td>
        </tr>
        <tr>
          <td><label></label></td>
          <td colspan="5"><input name="datum" type="text" class="formbut" id="datum5" value="<?php echo $da; ?>" size="10" maxlength="10"></td>
        </tr>
        <tr>
          <td><div align="center" class="klFrame">
            <div align="left"><font color="#333333">Vorspeisen:</font></div>
          </div></td>
          <td colspan="5"> <div>
    <div>
    <select name="Vorspeise" class="Listen" id="Vorspeise"> 
  <option value="">Vorspeisen  >>>></option>
    <?php
$db = mysql_connect("localhost", "usr", "pw"))
mysql_select_db("fasan",$db);
$sql = "SELECT id, Artikel FROM karte WHERE kat ='Vorspeise'";
$rs = mysql_query($sql);


while($row = mysql_fetch_array($rs))
{
  echo "<option value=\"".$row['id']."\">".$row['Artikel']."\n  ";
}


?>
  </select>
    <select name="Vanz[]" class="Listen" id="Vanz[]">
      <option value="1" selected>1</option>
      <option value="2">2</option>
      <option value="3">3</option>
      <option value="4">4</option>
      <option value="5">5</option>
      <option value="6">6</option>
      <option value="7">7</option>
      <option value="8">8</option>
      <option value="9">9</option>
      <option value="10">10</option>
    </select>
      <input type="button" class="formbut" onClick="clone_this(this)" value="noch eins">
    </div>
  </div></td>
        </tr>
        <tr>
          <td colspan="6">&nbsp;</td>
          </tr>
        <tr>
          <td><div align="center" class="klFrame">
            <div align="left"><font color="#333333">Hauptgerichte:</font></div>
          </div></td>
          <td colspan="5"><div>
            <div>
              <select name="Hauptgericht" class="Listen" id="Hauptgericht">
                <option value="">Hauptgerichte  >>>></option>
                <?php
$db = mysql_connect("localhost", "usr", "pw")
mysql_select_db("fasan",$db);
$sql = "SELECT id, Artikel FROM karte WHERE kat ='Fleischgerichte'";
$rs = mysql_query($sql);


while($row = mysql_fetch_array($rs))
{
  echo "<option value=\"".$row['id']."\">".$row['Artikel']."\n  ";
}


?>
              </select>
              <select name="Hanz[]" class="Listen" id="Hanz[]">
                <option value="1" selected>1</option>
                <option value="2">2</option>
                <option value="3">3</option>
                <option value="4">4</option>
                <option value="5">5</option>
                <option value="6">6</option>
                <option value="7">7</option>
                <option value="8">8</option>
                <option value="9">9</option>
                <option value="10">10</option>
              </select>
              <input type="button" class="formbut" onClick="clone_this(this)" value="noch eins">
            </div>
          </div></td>
        </tr>
        <tr>
          <td colspan="6">&nbsp;</td>
          </tr>
        <tr>
          <td><div align="center" class="klFrame">
            <div align="left"><font color="#333333">Nachtisch:</font></div>
          </div></td>
          <td colspan="5"><div>
            <div>
              <select name="Nachtisch" class="Listen" id="Nachtisch">
                <option value="">Nachtisch  >>>></option>
                <?php
$db = mysql_connect("localhost", "usr", "pw")
mysql_select_db("fasan",$db);
$sql = "SELECT id, Artikel FROM karte WHERE kat ='Alkfrei'";
$rs = mysql_query($sql);


while($row = mysql_fetch_array($rs))
{
  echo "<option value=\"".$row['id']."\">".$row['Artikel']."\n  ";
}


?>
              </select>
              <select name="Nanz[]" class="Listen" id="Nanz[]">
                <option value="1" selected>1</option>
                <option value="2">2</option>
                <option value="3">3</option>
                <option value="4">4</option>
                <option value="5">5</option>
                <option value="6">6</option>
                <option value="7">7</option>
                <option value="8">8</option>
                <option value="9">9</option>
                <option value="10">10</option>
              </select>
              <input type="button" class="formbut" onClick="clone_this(this)" value="noch eins">
            </div>
          </div></td>
        </tr>
        <tr>
          <td colspan="6">&nbsp;</td>
          </tr>
        <tr>
          <td><div align="center" class="klFrame">
            <div align="left"><font color="#333333">Getr&auml;nke:</font></div>
          </div></td>
          <td colspan="5"><div>
            <div>
              <select name="Getraenke" class="Listen" id="Getraenke">
                <option value="">Getränke  >>>></option>
                <?php
$db = mysql_connect("localhost", "usr", "pw")
mysql_select_db("fasan",$db);
$sql = "SELECT id, Artikel FROM karte WHERE kat ='Getraenke'";
$rs = mysql_query($sql);


while($row = mysql_fetch_array($rs))
{
  echo "<option value=\"".$row['id']."\">".$row['Artikel']."\n  ";
}


?>
              </select>
              <select name="Ganz[]" class="Listen" id="Ganz[]">
                <option value="1" selected>1</option>
                <option value="2">2</option>
                <option value="3">3</option>
                <option value="4">4</option>
                <option value="5">5</option>
                <option value="6">6</option>
                <option value="7">7</option>
                <option value="8">8</option>
                <option value="9">9</option>
                <option value="10">10</option>
              </select>
              <input type="button" class="formbut" onClick="clone_this(this)" value="noch eins">
            </div>
          </div></td>
        </tr>
        <tr>
          <td colspan="6">&nbsp;</td>
          </tr>
        <tr>
          <td colspan="6"><div align="center">
            <input name=vSend type="hidden" id="vSend" value="1">
            <input name="Submit" type="submit" class="formbut" value="Abschicken">
          </div>            <div align="right"></div></td>
        </tr>
        <tr>
          <td colspan="6">&nbsp;</td>
        </tr>
        <tr>
          <td colspan="6"><div align="center" class="klFrame"><font color="#333333">Bitte 
            Alle Felder <font color="#990000">Komplett</font> Ausf&uuml;llen</font></div></td>
        </tr>
      </table>
    </fieldset></td>
  </tr>
</table>
</form>
<form name="form1" method="post" action="">
  <div>
    <div></div>
  </div>
</form>
</body>
</html>
 
Zuletzt bearbeitet:
Baue mal ein echo $sql; in die Seite ein und gibt das was dabei rauskommt bei phpMyAdmin ein. Ich sehe jetzt zwar nicht saber vermutlich hat die SQL-Anweisung irgendwo einen Fehler.

Ansonsten stell mal den Aufbau der Datenbank und ein paar Daten hier rein. Dann baue ich das nach und schau mal ob ich was finde.

Gruß Thomas
 
Bin gerade dabei und habe auch schon einige Fehler gefunden. Doch jetzt stoppe ich das Ganze mal weil du ein viel größeres Problem als die "Schreifehler" hast.

Du hast 1 Tisch mit z.B. 2 Gästen. Jeder bestellt 1 Vorspeise, 1 Hauptgericht, 1 Nachtisch und 3 Getränke. Das kannst du so wie die DB im Moment aussieht gar nicht speichern.

Du kannst doch nur 1 Getränk pro Datensatz speichern, wozu dann das Feld "Ganz". Ändere die DB doch mal so ab:

ID | Tisch | Datum | Bestellung | Art | Menge | Preis | Ort

ID = Bestellnummer oder so
Tisch = Tischnummer
Datum = was wohl
Bestellung = z.B. Seezunge
Art = Fischgericht (bzw. eine ID dafür)
Menge = eigentlich sogar unnötig
Preis = Stückpreis
Ort = "drinnen" oder "draußen"

Jetzt nimmst du die Bestellung auf und speicherst so für jeden Gast jedes bestellte Gericht bzw. Getränk in die DB. Anhand der ID kannst du die einzelnen Posiitonen dann für die Rechnung zusammenfassen.
Wie gesagt überlege dir das nochmal.

Aber auch noch was zu den Fehlern:

- deine Form hat keinen Namen, keine Angabe bei "action=" und "method="
- du verwendest einfach Variablen die die Namen der Felder haben, geht so nicht du musst z.B. mit $_POST["Vorspeise"] arbeiten
- du hast überall wo du auf die DB zugreifen willst die "mysql_connect" und die "mysql_select_db" Anweisung stehen. Mach das einmal ganz am Anfang der Seite, das reicht.
- außerdem sind viele Schreifehler wie z.B. eine Klammer zu viel oder ein Semikolon zu wenig drin.

Wenn du diese Fehler behebst ist das Speichern theoretisch möglich, aber wie gesagt die Daten die du haben willst/musst, bekommst du so nicht unter.
 
So noch mal zum Grundverständnis, ich möchte damit keine Rechnung für den Gast erstellen sondern abends nach Ladenschluß
alle bons von den Bestellungen des Tages auf dem Laptop abtippen in die DB damit ich Später mir eine Auswertung erstellen kann
welche Gerichte laufen und welche nicht bzw. wie viel Getränke verkauft werden.

Worauf ich verzichten könnte wäre Tisch und Gast und ort das wären nur Interessante Daten gewesen aber nicht wirklich Wichtig damit klammern
wir die erst mal soweit aus. Demnach bleibt für die DB:

- ID
- Bon Nummer
- Datum (zum späteren zuordnen)|
- Bestellung
- Art
- Menge (Schon wichtig weil ich ja wissen will was wie oft geht)
- EinzelPreis
- Gesamt Preis (pro bon)

Nun habe ich aber immer noch das Problem das ich nur ein(!) Gericht/Getränk/Vorspeise/etc. bzw die Anzahl wie oft dieses eine Gericht pro Datensatz
bestellt wurde eintragen kann. Was wiederum Problematisch ist weil man ja nie weiß was ein Kunde(Tisch/bon) bestellt was ja schon bei 2 Hauptgerichten problematisch wird. Ist halt recht Dynamisch das ganze :D *damn... :(

Edit: Obwohl ich kann doch die Komplette Bestellung in eine Spalte Schreiben dafür müsste doch genug Platz sein oder(?)
z.B. für Seezunge "1.6" (1 = Kategorie Fisch - 6 = Seezunge) dann könnten auch mehrere Sachen rein wären dann bei
5 Artikel würden dann so aussehen (1.6,2.4,5.7,3.3,4.5) oder ist das Schwachsinn? :o
Zum Glück steht das Projekt noch am Anfang nu kann man noch alles ändern. :D
 
Zuletzt bearbeitet:
Du hast das Feld ID und das Feld Bonnummer, jetzt sitzen wir beide am Tisch 5 und bestellen:

Deine Bestellung: 1 x Vorspeise Tomatensalat, 1 x Vorspeise Krabbenchips, 1 x Hauptgericht Seezunge,1 x Getränk Cola, 1 x Getränk Cola, 1 x Getränk Cola

Meine Bestellung: 1 x Vorspeise Suppe, 1 x Hauptgericht Wiener Schnizel, 1 x Nachspeise Eisbecher, 1 x Nachspeise Eisbecher, 1 x Getränk Cola, 1 x Getränk Cola

Gespeichert wird jetzt:

1 (ID), 555 (Bon), 5 (Tisch), Vorspeise, Tomatensalat
1 (ID), 555 (Bon), 5 (Tisch), Hauptspeise, Seezunge
1 (ID), 555 (Bon), 5 (Tisch), Getränk, Cola
1 (ID), 555 (Bon), 5 (Tisch), Getränk, Cola
1 (ID), 555 (Bon), 5 (Tisch), Getränk, Cola
1 (ID), 555 (Bon), 5 (Tisch), Vorspeise, Suppe
1 (ID), 555 (Bon), 5 (Tisch), Hauptspeise, Wiener Schnizel
1 (ID), 555 (Bon), 5 (Tisch), Nachspeise, Eisbecher
1 (ID), 555 (Bon), 5 (Tisch), Nachspeise, Eisbecher
1 (ID), 555 (Bon), 5 (Tisch), Getränk, Cola
1 (ID), 555 (Bon), 5 (Tisch), Getränk, Cola

Die Menge brqauchst du nicht weil jedes Gericht, Getränk gepspeichert wird und über die Bonnummer kannst du die Bestellungen zusammenfassen. Was hier natürlich fehlt ist das Datum und der Preis.

Jetzt versuche diese Bestellung auf dein bisheriges Datenbankformat umzusetzen, das geht nicht.
 
Zurück