1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Form Tag mit zwei Submit Buttons und SQL Abfrage

Dieses Thema im Forum "Web-Programmierung" wurde erstellt von Peitzi, 18.01.09.

  1. Peitzi

    Peitzi Blutapfel

    Dabei seit:
    07.08.07
    Beiträge:
    2.595
    'Nabend zusammen,

    ich habe da ein kleines Problem, zu dem ich bisher keine Lösung im Netz gefunden habe.

    Zur Ausgangssituation (vereinfacht)

    1. Dropdownmenü mit festgelegten Werten.
    2. Ein Submitbutton der das ausgewählte Element bestätigt.
    3. Eine Textarea mit Text, welcher abhängig von den in Punkt 1 gewählten Punkten aus einer Datenbank gelesen wird.
    4. Ein Submitbutton, welcher bei betätigen etwaige Änderungen der Textarea in eine Datenbank schreibt.

    Bis Punkt 3 funktioniert das auch einwandfrei, jedoch behindern sich die zwei Submitbuttons untereinander.
    So wird bei betätigen des ersten Buttons (welcher eigentlich nur bestätigen soll, welches Feld im Dropdown gewählt ist und anschließend die bestehenden Werte der DB in die Textarea einträgt) diese Werte auch gleichzeitig wieder in die DB geschrieben, was jedoch erst beim zweiten Button passieren soll.

    Zur Veranschaulichung mal ein verkürztes Script:

    Dropdown inkl. erstem Submit
    Code:
    <form name="form" method="POST">
    <select name="auswahl">
    <option value="text1">wert1</option>
    <option value="text2">wert2</option>
    </select>
    <input type="submit" name="submit" value="Auswählen">
    
    Übergabe der Werte aus der DB in die Textarea:
    Code:
    <textarea name="Ueberschrift" cols="90" rows="1">
    <?php 
            if(isset($_POST['auswahl'])) {
                switch($_POST['auswahl']) {
                    case "text1:
                                Werteabfrage aus der DB
                    ;break; 
                    case "text2:
                                Werteabfrage aus der DB
                    ;break; }};
    ?></textarea>
    <input type="submit" name="submit" value="Eintragen">
    </form>
    Und nach der Form das Script zum Schreiben der in die Textarea eingetragenen Werte:
    Code:
    <?php
    
        if($_POST['auswahl']=='text1')
        {
              Eintragen in DB
        }
    ....
    Ich hoffe das ist soweit verständlich.
    Jetzt zu meinem Problem. Da die zwei Buttons nicht unterschieden werden, werden bei Klick auf einen der beiden Buttons sowohl die Werte in der Textarea geändert, als auch in die DB geschrieben.
    Das dabei nur Müll bei rauskommt, dürfte klar sein.

    Wie änder ich das Script nun so ab, dass die Buttons unterschieden werden und bei Button 1 nur die Werte in der Textarea geändert werden und bei Button 2 die Texte der Textarea in die DB geschrieben wird?

    Vielen Dank!
     
  2. drlecter

    drlecter Wöbers Rambur

    Dabei seit:
    04.11.06
    Beiträge:
    6.442
    Was hast du als action definiert? Die gleiche Datei? Du könntest mal den Summit Buttons verschiedene Namen geben. Fehlt bei deiner Switch Anweisung nicht ein " hinter den texten?
     
  3. Peitzi

    Peitzi Blutapfel

    Dabei seit:
    07.08.07
    Beiträge:
    2.595
    Als Action hab ich garnichts vergeben.
    Es soll sich alles in dieser einen Datei abspielen.

    Unterschiedliche Namen der Buttons bewirkt leider nichts.
    Rechtschreibfehler können drin sein, da das hier nicht das Originalscript ist, sondern nur extrem verkürzt.
    Aber es geht auch mehr um das Funktionsprinzip wie man sowas anstellen könnte.

    Ich weiss, dass man die Buttons anhand des Values oder auch des Namens mit ner Bedingung abfangen könnte, jedoch weiss ich nicht, wo ich die einbauen soll.
     
  4. drlecter

    drlecter Wöbers Rambur

    Dabei seit:
    04.11.06
    Beiträge:
    6.442
    Also du willst das nach der ersten Auswahl die Seite noch einmal aufgerufen wird und dann anhand der Auswahl der zweite Teil erscheint. Nach dem zweiten submit soll dann entschieden werden, was in die DB kommt?
     
  5. Peitzi

    Peitzi Blutapfel

    Dabei seit:
    07.08.07
    Beiträge:
    2.595
    Nene, aber ist vielleicht ohne BIldmaterial schwer zu erklären.


    [​IMG]

    Also besser so.
    Ich wähle eine Kategorie aus, zb wie in diesem Fall Vorwort und bestätige das mit "Auswählen".
    Daraufhin sollen die aktuell in der DB vorhanden Texte für die Tabelle "Vorwort" in die beiden Textfelder geschrieben werden.
    In diesen kann ich jetzt die Texte ändern und bestätige das mit dem Button "Eintragen". Daraufhin werden die Texte dann als neuer Datensatz in die Tabelle "Vorwort" geschrieben.
     
  6. drlecter

    drlecter Wöbers Rambur

    Dabei seit:
    04.11.06
    Beiträge:
    6.442
    Kannst du mal bitte den ganzen Code posten? Ich glaube du hast irgendwo vergessen, Daten zu übergeben.
    So eine Auswahl hatte ich mit JS mal gelöst.
     
  7. Peitzi

    Peitzi Blutapfel

    Dabei seit:
    07.08.07
    Beiträge:
    2.595
    Der Quelltext ist eigentlich vollständig, von den mehreren Auswahlen und den DB Aufrufen mal abgesehen.

    Es geht wirklich nur darum, dass irgendwie die Submit Buttons unterschieden werden müssen.

    Mit JS ginge das zwar, aber um mit JS wiederrum die Werte aus der DB zu holen, müsste man Ajax einsetzen, worauf ich verzichten will.
     
  8. drlecter

    drlecter Wöbers Rambur

    Dabei seit:
    04.11.06
    Beiträge:
    6.442
    Nein, das musst du nicht. Ich habe die DB Abfragen weiter in PHP realisiert. Wenn du den Code einmal am Stück (ohne DB Verbindung) einmal posten kannst, wäre das klasse.
    Ich vermisse die Abfrage des Submit Buttons.
     
  9. Peitzi

    Peitzi Blutapfel

    Dabei seit:
    07.08.07
    Beiträge:
    2.595
    Die gibt es ja eben nicht, darum gehts ja. ;)

    Ich weiss nicht, wie ich mit PHP die Submit Buttons ansprechen kann.
     
  10. drlecter

    drlecter Wöbers Rambur

    Dabei seit:
    04.11.06
    Beiträge:
    6.442
    Aeh teste doch mal:
    Code:
    $eintrag=$_POST['submit'];
    
    Danach kannst du den Inhalt von $eintrag vergleichen. Soweit ich weiss fragt man sumit wie alle anderen Variablen ab (oder irre ich mich da?)
    PHP ruft eigentlich die Seite hinter Action auf (oder das was da steht) und übergibt alle Variablen des Formulars.
     
    Peitzi gefällt das.
  11. Peitzi

    Peitzi Blutapfel

    Dabei seit:
    07.08.07
    Beiträge:
    2.595
    Ja in der Tat, das funktioniert und hilft mir schonmal etwas weiter.

    Mal schauen was ich draus machen kann.
     
  12. Peitzi

    Peitzi Blutapfel

    Dabei seit:
    07.08.07
    Beiträge:
    2.595
    Ok, ich steh wohl immer noch auf dem Schlauch.

    Problem ist, wenn ich mit $_POST einfach den Value des Buttons abfrage, bedeutet das ja nicht, dass die dann folgende Aktion auch erst auf Klick des Buttons ausgeführt wird, da die Bedingung ja immer gültig ist.
     
  13. drlecter

    drlecter Wöbers Rambur

    Dabei seit:
    04.11.06
    Beiträge:
    6.442
    Wie fragst du den Button ab? ich glaube du hast einen logischen Fehler. Poste mal den kompletten Code.
     
  14. Peitzi

    Peitzi Blutapfel

    Dabei seit:
    07.08.07
    Beiträge:
    2.595
    Ich habe es mal auf zwei Fälle gekürzt. Mehr bringt ja nichts.
    Die Inserts dienen erstmal nur zum Test, auf Sicherheit wurde noch keine Rücksicht genommen, daher ist das erstmal unerheblich hier.
    Es geht um die reine Funktion.

    Code:
    <form name="form" method="POST">
    <div>
    <select name="auswahl">
    <option value="home">Vorwort</option>
    <option value="impressum">Impressum</option>
    </select>
    <input type="submit" name="submit" value="Auswählen">
    <?php
        $eintrag=$_POST['submit'];
    ?>
    </div>
    <div>
    <textarea name="Ueberschrift" cols="90" rows="1">
    <?php 
        require("connect.inc.php");
            
        if($eintrag=='Auswählen') {
            if(isset($_POST['auswahl'])) {
                switch($_POST['auswahl'])
                {
                    case "home":
                                $sql = "SELECT max(nr),ueber FROM home group by(nr);";
                                $result = mysql_query($sql) OR die ("QUERY-ERROR: ".mysql_error());
                                while ($zeile = mysql_fetch_array($result, MYSQL_ASSOC))
                                {
                                    $str = "$zeile[ueber]";
                                }
                        ;break; 
                    case "impressum":
                                $sql = "SELECT max(nr),ueber FROM impressum group by(nr);";
                                $result = mysql_query($sql) OR die ("QUERY-ERROR: ".mysql_error());
                                while ($zeile = mysql_fetch_array($result, MYSQL_ASSOC))
                                {
                                    $str = "$zeile[ueber]";
                                }
                        ;break; 
                
                }
                echo $str;
            }
        }
    ?>
    </textarea>
    
    </div>
    <textarea name="Text" cols="90" rows="27" id="tarea2">
    <?php 
        require("connect.inc.php");
            
        if($eintrag=='Auswählen') {
            if(isset($_POST['auswahl'])) {
                switch($_POST['auswahl'])
                {
                    case "home":
                                $sql = "SELECT max(nr),text FROM home group by(nr);";
                                $result = mysql_query($sql) OR die ("QUERY-ERROR: ".mysql_error());
                                while ($zeile = mysql_fetch_array($result, MYSQL_ASSOC))
                                {
                                    $str = "$zeile[text]";
                                }
                        ;break; 
                    case "impressum":
                                $sql = "SELECT max(nr),text FROM impressum group by(nr);";
                                $result = mysql_query($sql) OR die ("QUERY-ERROR: ".mysql_error());
                                while ($zeile = mysql_fetch_array($result, MYSQL_ASSOC))
                                {
                                    $str = "$zeile[text]";
                                }
                        ;break; 
                
                }
                echo $str;
            }
        }
    ?>
    </textarea>
    
    <input type="submit" name="submit" value="Eintragen">
    </form>
    
    <?php
    require("connect.inc.php");
    
    if($eintrag=='Eintragen') {
        
        if($_POST['auswahl']=='home')
        {
            if($_POST[Text]!='' & $_POST[Ueberschrift]!='' ) {
                $sql="INSERT INTO home (text, ueber) VALUES         ('$_POST[Text]','$_POST[Ueberschrift]');";            
                mysql_query($sql) OR die("QUERY-ERROR: ".mysql_error());}
        }
        else 
        {
            if($_POST[Text]!='' & $_POST[Ueberschrift]!='' ) {
                $sql="INSERT INTO impressum (text, ueber) VALUES ('$_POST[Text]','$_POST[Ueberschrift]');";            
                mysql_query($sql) OR die("QUERY-ERROR: ".mysql_error());}
            }
    }
    ?>
     
  15. drlecter

    drlecter Wöbers Rambur

    Dabei seit:
    04.11.06
    Beiträge:
    6.442
    Du solltest die Abfrage vor den Formularfeldern machen. Außerdem reicht eine require Anweisung. Wenn du nach der Auswahl die Daten aus der DB gelesen hast, kannst du den Value Wert weiter unten im Formular mit einem echo eintragen.
     
  16. MasterofDistres

    MasterofDistres Kleiner Weinapfel

    Dabei seit:
    07.12.06
    Beiträge:
    1.139
    Folgendes sollte eigentlich helfen ;)

    Code:
    <?php
        if (isset($_POST['submit'])) {
        	$select = $_POST['auswahl'];
    	echo $select;
        }
    ?>
    (anstatt <?php $eintrag=$_POST['submit']; ?>)
     
    Peitzi gefällt das.
  17. Slashwalker

    Slashwalker Winterbanana

    Dabei seit:
    15.05.06
    Beiträge:
    2.190
    Also ich hab es nicht so mit PHP, es lebe ColdFusion, aber hier mal ein Versuch im Blindflug (hab schon paar Biers):
    Code:
    <?php 
        require("connect.inc.php"); 
    
    if($_REQUEST['insertDB']) {
        
     
            if($_POST[Text]!='' & $_POST[Ueberschrift]!='' ) {
                $sql="INSERT INTO ".$_REQUEST['auswahl']." (text, ueber) VALUES         ('$_POST[Text]','$_POST[Ueberschrift]');";            
                mysql_query($sql) OR die("QUERY-ERROR: ".mysql_error());}
       
        
    }
    ?>
    <form name="form" method="POST">
    <div>
    <select name="auswahl">
    <option value="home">Vorwort</option>
    <option value="impressum">Impressum</option>
    </select>
    <input type="submit" name="choose" value="Auswählen">
    
    </div>
    <div>
    <textarea name="Ueberschrift" cols="90" rows="1">
    
      <?php      
        if($_REQUEST['choose']) {
            if(isset($_POST['auswahl'])) {
           
                                $sql = "SELECT max(nr),ueber FROM ".$_REQUEST['auswahl']." group by(nr);";
                                $result = mysql_query($sql) OR die ("QUERY-ERROR: ".mysql_error());
                                while ($zeile = mysql_fetch_array($result, MYSQL_ASSOC))
                                {
                                    $str = "$zeile[ueber]";
                                }
                       
                
                }
                echo $str;
            }
        }
    ?>
    </textarea>
    <textarea name="text" cols="90" rows="27">
    
      <?php      
        if($_REQUEST['choose']) {
            if(isset($_POST['auswahl'])) {
           
                                $sql = "SELECT max(nr),text FROM ".$_REQUEST['auswahl']." group by(nr);";
                                $result = mysql_query($sql) OR die ("QUERY-ERROR: ".mysql_error());
                                while ($zeile = mysql_fetch_array($result, MYSQL_ASSOC))
                                {
                                    $str = "$zeile[text]";
                                }
                       
                
                }
                echo $str;
            }
        }
    ?>
    </textarea>
    </div>
    
    
    <input type="submit" name="insertDB" value="Eintragen">
    </form>
    
    War jetzt zu faul, 'ne Datenbank einzurichten, aber von der Logik her sollte es so funktionieren.
     
    #17 Slashwalker, 19.01.09
    Zuletzt bearbeitet: 19.01.09
    Peitzi gefällt das.
  18. Peitzi

    Peitzi Blutapfel

    Dabei seit:
    07.08.07
    Beiträge:
    2.595
    Blindflugversion unter Alkeinfluss. Jetzt butterst du mich aber ganz schön runter. ;)

    Astreine Version, alleine schon das weglassen der Fallunterscheidung zur Auswahl der Table, stattdessen einfach nur den Wert der Selectbox zu nehmen. Simpel, aber drauf gekommen wär ich glaube in 10 Wochen nicht. :)
    Bis auf ein zwei simple Schreibfehler funktioniert das tadellos.
    Vielen schonmal dafür!


    Eins ist jedoch nach wie vor etwas unglücklich. Die Selectbox setzt sich immer wieder auf das erste Element zurück, wodurch der in die Textareas eingegebene Text natürlich auch in die Tabelle der Selectbox eingetragen wird.
    Die Selectbox müsste demnach einfach auf dem gewähltem Element verbleiben, statt sich nach Betätigen des ersten Buttons wieder auf das erste Element zurücksetzt.
    Bekommt man das noch irgendwie hin?
     
  19. Slashwalker

    Slashwalker Winterbanana

    Dabei seit:
    15.05.06
    Beiträge:
    2.190
    Code:
    <select name="auswahl">
    <option value="home" <?php if($_REQUEST['auswahl'] =='home') echo ' selected="selected"'; ?>>Vorwort</option>
    <option value="impressum"<?php if($_REQUEST['auswahl'] =='impressum') echo ' selected="selected"'; ?>>Impressum</option>
    </select>
    Das sollte dein Problem mit der Selectbox lösen ;)
     
  20. Peitzi

    Peitzi Blutapfel

    Dabei seit:
    07.08.07
    Beiträge:
    2.595
    Works just fine.

    Vielen Dank nochmal! Schick die Rechnung dann einfach per Post. ;)
     

Diese Seite empfehlen