[erledigt] problem mit mehreren input felder

Also ich hab ein Formular mit Text-Felder, Checkboxen und Textareas.
Der Inhalt der einzelnen Felder sollen in eine MySQL-Tabelle gespeichert werden (per Update).

Also brauch ich ein Script dass die $_POST[name] unterscheidet ob es ein Text-Feld, eine Checkbox oder ein Textarea ist und je nachdem dann ein bestimmtes Update in der MySQL-DB macht.

Beispiel so:

[code]

<?php if( ***Test ob $_POST[ name ] eine Checkbox ist*** ) { if($_POST[ name ] == 0) { // Checkbox nicht gesetzt // MySQL-Update } else if($_POST[ name ] == 1) { // Checkbox gesetzt // MySQL-Update } } elseif(***Test ob $_POST[ name ] ein Text-Feld oder eine Textarea ist***) { // MySQL-Update } ?>[/code]

Mein Problem liegt darin jedes $_POST[ name ] zu prüfen was was es ist, ich weis nicht wie ich das umsetzten soll/kann. :cry:

Kann mir da bitte wer weiterhelfen? =(

Hi,

Wieso musst du das überprüfen?

$_POST[‘name’] wird doch sicherlich ein Eingabefeld sein…
Die in den Variablen übersendeten Values kannst du ja dann einfach direkt in die Datenbank schreiben. Ich verstehe dein Problem ehrlich gesagt nicht so ganz…

[quote=“kerbination”]Hi,

Wieso musst du das überprüfen?

$_POST[‘name’] wird doch sicherlich ein Eingabefeld sein…
Die in den Variablen übersendeten Values kannst du ja dann einfach direkt in die Datenbank schreiben. Ich verstehe dein Problem ehrlich gesagt nicht so ganz…[/quote]
Weill wenn das Eingabefeld eine Checkbox ist, übergibt $_POST[‘name’] entweder nichts (wenn die Checkbox nicht gecheckt ist) oder eine 1 (wenn die Checkbox gecheckt ist).
Also muss das Script prüfen ob das EingabeFeld eine Checkbox war oder nicht.

Habe mal es einbisschen verständlicher verfasst (oder auch nicht -.-):

Habe ein Problem mit einem Formular, das mehrere Textfelder, Checkboxen und Textareas besitzt.

Die namen der einzelnen Textfelder, Checkboxen und Textareas sind in meiner MySQL-DB als “key” vorhanden.

Nun soll mein Script jedes übergebene Feld folgende Schritte ausführen:

  • Den Namen des übergebenen Feldes “herausfiltern”
  • Mit dem Namen den DB-Eintrag per “key” abfragen
  • Den Typ des DB-Eintrag’s prüfen
  • MySQL-Update ausführen

Nun weis ich nicht wie ich für jedes übergebenen Feld die oben genannten Schritte ausführen soll.

Mein Script sieht im Moment so aus:

<?php

$abfrage = "SELECT * FROM xyz WHERE key LIKE '**name**'";
$ergebnis = mysql_query($abfrage);
while($row = mysql_fetch_object($ergebnis))
{				
	if($row->type = "checkbox") {
				
		if($_POST[ **name** ] == 0) { // Checkbox wurde nicht gesetzt
			$setzten = "UPDATE cr_config_1 Set wert='0' WHERE key LIKE '". **name** ."'";
			$update = mysql_query($setzten);
		} elseif($_POST[ **name** ] == 1) {// Checkbox wurde gesetzt
			$setzten = "UPDATE cr_config_1 Set wert='1' WHERE key LIKE '". **name** ."'";
			$update = mysql_query($setzten);
		} 
					
	} elseif($row->type = "field" or $row->type = "textarea") {
					
			$setzten = "UPDATE cr_config_1 Set wert='". $_POST[ **name** ] ."' WHERE key LIKE '". **name** ."'";
			$update = mysql_query($setzten);	
								
	}
}
				
?>

puh schweres Problem -.- ich weis nich mal wie ich bei google damit suchen soll…

Ich brauch ein Script das für jede übergebene Texteingabe etwas ausführt…

Beispiel ich hab drei:
$_POST[feld1]
$_POST[feld2]
$_POST[feld3]

Ich möchte in meinem Script nicht jedes $_POST direkt ansprechen um etwas auszuführen.

Schwer zu erklären… :cry:

Gibt es da nicht so ne art foreach-funktion für die $_POST?

Beispiel:

foreach($_POST) {
Aktion ausführen
}

wie gesagt schwer zu erklären… :cry:

$_POST ist in erster Linie ein (fast) stinknormales array wie jedes andere auch, deshalb kann es auch auf die gleiche art und weise behandelt werden. Natürlich kann man auch jedes Element des Arrays durchlaufen mit der foreach Schleife.

foreach($_POST as $name => $wert)
{
    //aktion ausführen
}

okey das hat mir sehr weitergeholfen :slight_smile:
es gibt aber ein Problem, wenn es kein Eingabefeld ist, sondern eine Checkbox wird es nicht richtig ausgeführt

Wenn die Checkbox “gecheckt” wurde, dann wird $_POST übermittelt, wenn es nicht gecheckt wurde, dann wird nicht einmal der name des $_POST dem script übermittelt…

Wie kann ich nun mit meinen Script ermitteln, ob gecheckt wurde oder nicht?

Wenn gecheckt dann $_POST = 1
wenn nicht gecheckt dann $_POST = “”

In dem man von vornherein weiß, wie der Name der Checkbox ist.

und da würde wieder das direkte ansprechen von $_POST (per Hand in das Script schreiben) ins Spiel kommen, dass ich eigentlich vermeiden möchte… =(

ich weiß ja nicht was du da fabrizierst, aber das “direkte ansprechen von $_POST” ist doch vollkommen normal und unumgänglich?
oder ist die anzahl der Formularfelder flexibel?

erklär doch mal so in etwa was du versuchst zu machen.

ok ich versuchs^^

also… in meiner mysql-db habe ich alle Felder, Typ des Felds, Name des Felds und einen Wert eingetragen.

Ich hab zwei Scripte.
Script1: Erzeugt das Formular mittels der MySQL-DB.
Script2: Liest die übermittelten $_POST von Script1, prüft den Typ und speichert das value/Wert wieder in die MySQL-DB.

Der Name des Felds im Formular (Script1) entspricht dem Namen des Felds in der MySQL-DB, so wird dem Script2 gesagt welcher Wert von $_POST in welchen Datensatz in der MySQL-DB geschrieben werden muss.

Diese MySQL-DB Einträge wurden von mir vorher reingeschrieben, es werden über kein Formular neue hinzugefügt, sondern nur editiert.

Wenn ich aber später z.B. einen neues Feld hinzufüge in der MySQL-DB, zeigt das mir das Script1 sofort an, das selbe wenn ich eins aus der DB entferne.

So nun gibt es eine Checkbox in meinem Formular das gecheckt wurde oder nicht, dies soll das Script2 erkennen und entsprechend handeln.

Hoffe ich habe es verständlich erklärt. :p

*Edit: so sieht mein Script aus um den Typ auf checkbox zu prüfen (enthält Script2)

[code]
$abfrage = „SELECT * FROM xyz“;
$ergebnis = mysql_query($abfrage);
while($row = mysql_fetch_object($ergebnis))
{
if($row->type == „checkbox“) {

	if($_POST[ $row->key ] == "") { 
		$setzten = "UPDATE cr_config_1 Set wert='0' WHERE key LIKE '". $row->key ."'";
		$update = mysql_query($setzten);
		
	} elseif($_POST[ $row->key ] == "1") {
		$setzten = "UPDATE cr_config_1 Set wert='1' WHERE key LIKE '". $row->key ."'";
		$update = mysql_query($setzten);
		
	}
		
}

}[/code]

hier ist dann dass problem wenn ich ein Script3 habe.
Script3: Gibt bewusst ein Formular mit Felder aus, ohne Checkboxen.

Wenn ich nun mit Script3, Script2 ausführe, dann führt es das oben genannte Script aus und schreibt in alle Datensätze die ein Checkbox ist eine 0 rein, obwohl im Formular keine Checkbox angegeben ist. =(

Sry für zweiter Doppelpost, is aber glaube ich besser als den letzten Post zu editieren… bei diesem Fall.^^

Also habe mein Problem gelöst wegen den Checkboxen und zwar folgendermaßen:
Also ich habe folgendes gemacht…

Formular.html

[code]

[/code]Script.php [code]<?php

if(isset($_POST[‘submit’])) {

if(isset($_POST[checker]) && $_POST[checker] == "0") {

    echo "Checkbox wurde nicht gecheckt";
    
} elseif(isset($_POST[checker]) && $_POST[checker] == "1") {

    echo "Checkbox wurde gecheckt";

}

}

?>[/code]So funktionierts auf jeden Fall. =)

In meinem Script, habe ich das (oben gezeigte) Script.php vor dem foreach(…) hinzugefügt, so prüft mein Script die Checkbox einzeln und danach noch die anderen Felder aus meinem Formular.

Ich hab einfach vor die Checkbox ein hidden-Feld mit dem selben Namen der Checkbox hinzugefügt, dass man nicht sehen kann, aber übermittelt wird.
Das hidden-Feld hat das value=“0” also wird 0 dem Script übermittelt, sobald ich aber die Checkbox anklicke (checked), wird das Value von dem hidden-Feld mit einer 1 (von dem Value der Checkbox) “überschrieben”.
(So siehts zumindest aus und anders weis ich es nich zu beschreiben… für die, die das noch nich kennen. :slight_smile: )