• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

Form Tag mit zwei Submit Buttons und SQL Abfrage

Peitzi

Blutapfel
Registriert
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!
 

drlecter

Wöbers Rambur
Registriert
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?
 

Peitzi

Blutapfel
Registriert
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.
 

drlecter

Wöbers Rambur
Registriert
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?
 

Peitzi

Blutapfel
Registriert
07.08.07
Beiträge
2.595
Nene, aber ist vielleicht ohne BIldmaterial schwer zu erklären.


cms.png


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.
 

drlecter

Wöbers Rambur
Registriert
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.
 

Peitzi

Blutapfel
Registriert
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.
 

drlecter

Wöbers Rambur
Registriert
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.
 

Peitzi

Blutapfel
Registriert
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.
 

drlecter

Wöbers Rambur
Registriert
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.
 
  • Like
Reaktionen: Peitzi

Peitzi

Blutapfel
Registriert
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.
 

Peitzi

Blutapfel
Registriert
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.
 

drlecter

Wöbers Rambur
Registriert
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.
 

Peitzi

Blutapfel
Registriert
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());}
        }
}
?>
 

drlecter

Wöbers Rambur
Registriert
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.
 

MasterofDistres

Kleiner Weinapfel
Registriert
07.12.06
Beiträge
1.139
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.

Folgendes sollte eigentlich helfen ;)

Code:
<?php
    if (isset($_POST['submit'])) {
    	$select = $_POST['auswahl'];
	echo $select;
    }
?>

(anstatt <?php $eintrag=$_POST['submit']; ?>)
 
  • Like
Reaktionen: Peitzi

Slashwalker

Winterbanana
Registriert
15.05.06
Beiträge
2.213
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.
 
Zuletzt bearbeitet:
  • Like
Reaktionen: Peitzi

Peitzi

Blutapfel
Registriert
07.08.07
Beiträge
2.595
Also ich hab es nicht so mit PHP, es lebe ColdFusion, aber hier mal ein Versuch im Blindflug (hab schon paar Biers):

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?
 

Slashwalker

Winterbanana
Registriert
15.05.06
Beiträge
2.213
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 ;)
 

Peitzi

Blutapfel
Registriert
07.08.07
Beiträge
2.595
Works just fine.

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