Auswahlfeld in MySQL eintragen

Einen wunderschönen Guten Abend zusammen,

hab hier ein gemeines Problem, und zwar habe ich ein Auswahlfeld mit 3 wichtigen Werten:

Code:
<select name="blub">
	  <option value='input[1]'>-----</option>
      <option value='input[2]'>1</option>
	  <option value='input[3]'>2</option>
	  <option value='input[4]'>3</option>
	  </select>

Meine Frage lautet wie kriege ich den vom Nutzer ausgewählten Wert in die MySQL DB bzw setze ich namen und value richtig oder muss es genau andersrum sein ?

Dachte mir eventuell die value werte via
PHP:
if (isset($input['2']))
{
trage ein
}
einzutragen, wobei ich mir denke das das so ja eigentlich gar nich funktionieren kann, da ich damit ja nur input[2] abfrage, ich hoffe dochmal zumindest nich das ich für jedes input eine Abfrage machen muss :-)

Naja hoffe konnte die Frage gut Schildern,
danke im vorraus

Grüße
 
in diesem fall muss sich die funktion isset schon auf "blubb" beziehen. also isset($blubb). auf die values kannst du so ja garnicht zugreifen, da man ja variablen prüft und der value ist keine variable sondern wie der name schon sagt der wert.
 
Um das nochmal zu verdeutlichen :-D

Code:
<form method="POST" action="...">
<select name="VARIABLENNAME">
	  <option value='WERT0'>-----</option>
         <option  value='WERT1'>1</option>
	  <option value='WERT2'>2</option>
	  <option value='WERT3'>3</option>
	  </select>
</form>

und ein Beispielcode wäre:

Code:
<?PHP
$formular_variable = (typ) $_POST['VARIABLENNAME'];

if($formular_variable == "WERT1")
   {
       #Datenbankzeugs
   }
?>

Es bietet sich übrigens an, Usereingaben immer auf ihren Typ hin zu überprüfen respektive zu konvertieren um SQL-Injections zu verhindern (ich gehe davon aus, dass Form-Daten eventuell in die Datenbankabfrage integriert werden). Ist beim Select-Feld natürlich nicht ganz so brisant, aber man sollte es sich dennoch angewöhnen.
Besonders wichtig ist das bei GET Abfragen oder wenn man input type=text hat und diese in die Datenbankabfrage einbaut.
GET Variablen sollten am besten immer nur integer sein (der Einfachheit halber. nicht zwingend) und können dann mit einem einfach "$variable = (integer) $form_variable" konvertiert werden. Damit können nur integer passieren.
Bei Strings ist das schwieriger, dort musst du dann eventuell prüfen ob unerlaubte Zeichen vorhanden sind (i.d.R. gibt man nur die erlaubten Zeichen an und überprüft ob sonst nichts weiter im string ist - unerlaubte heraussuchen wäre sehr aufwendig).

lG

Brabax
 
Von der Verwendung des Get-Arrays rate ich ab, da mann sonst einfach stupide URL-Anfragen an deinen Server schicken kann, und schauen kann was passiert.

Für die Absicherung gab es hier schonmal ein paar Threads(Stichwort prepared Statements).
Casten der Werte schützt nicht vor SQL-Injections(wie sieht es mit Strings aus),zumal PHP eine schwach getypte sprache ist.

Das Überprüfen der Eingaben der Benutzer ist auch so eine Sache:
1.macht es das ganze langsamer als nötig
2.kann man mit sicherheit Sachen übersehen.
3.Es schrängt den Benutzer in der Eingabe ein.

mfg

sw33t
 
HeyHo,

erstmal danke für eure Antworten, wenn ich euch jetz richtig verstanden habe sollte es so möglich sein :

Code:
<select name="input[]">
	  <option value='1'>-----</option>
      <option value='2'>1</option>
	  <option value='3'>2</option>
	  <option value='4'>3</option>
	  </select>

der Code für das eintragen:

PHP:
if (isset($input['1']))
{
BlubBlubBlub
}
if (isset($input['2']))
{
BlubBlubBlub
}
......

Seh ich das so richtig ?

Die von dir Brabax beschriebene Art kann ich so leider nicht anwenden da bei mir das Formular durch ein komplettes "Array" läuft und ich vorher schon die input Variable zur eigentlichen Hauptvariablen mache, bevor das ganze PHP gedöns anfängt.
MfG
 
Normalerweise sollte $input in diesem Fall kein Array sein!
Deswegen auch <select name="input"> (ohne Klammern) und Auslesen via Umwandlung von POST/GET auf PHP (oder wie auch immer du deine Variable PHP-tauglich machst) und dann if($input == WERT).

D.h. du hast kein Array mit allen Werten, sondern nur diese Variable mit EINEM der Werte.
Erst bei einer möglichen Mehrfachauswahl (was ich bei dir jetzt nicht sehe, korrigier mich bitte, wenn ich falsch liege) kommt ein Array zum Einsatz.

...bevor das ganze PHP gedöns anfängt...
Was kommt denn bei dir vor der PHP-Verarbeitung?

lG

Brabax
 
hm :-)

jetz bekomm ich zweifel an meinem script :-)

Ich poste dir mal ein bisschen vom Code:

Formular:

Code:
<form method='post' action=''>
  <fieldset>
  <ol>
    <li>
      <label> Username <em>*</em></label>
      <input class="form_feld" id="username" type='text' name='input[username]' value=""/>
    </li>
   	  .........
	<li>
	  <input class="button" type="submit" value="Senden" />
	  <input class="button" type="reset"  value="Reset" />
	</li>

PHP:

PHP:
$ready = "SELECT registrierung FROM registry";
$go_ready = mysql_query($ready) or die (mysql_error());
$ready_active = mysql_fetch_array($go_ready, MYSQL_ASSOC);
	if(!isset($ready_active["registrierung"]) || $ready_active["registrierung"] == "Inaktiv")
		{
		echo INACTIVE;
		}
	else
		{
			include ('./templates/register.tpl');
	
				$pattern = "^([A-Za-z0-9\.|-|_]{1,60})([@])";
				$pattern .="([A-Za-z0-9\.|-|_]{1,60})(\.)([A-Za-z]{2,3})$";
				if (isset($_POST['input'])){$input = $_POST['input'];}
Das sind so die ersten 15 zeilen von der register.php

Und am ende natürlich

Code:
</ol>
</fieldset>
</form>

Klar kann man da einiges besser machen, aber es funktioniert und die Benutzereingaben werden auch gefiltert dank einem anderen Thread hier im Board.

Grüße
 
Hhmhm

Jetzt verstehe ich zumindest, wie du auf den Array kommst :)
Alles klar.

Es wäre dann aber trotzdem nach deiner Methode _theoretisch_ so:

<select name="input[x]">
<option value='1'>-----</option> ...

... bla bla bla :D hier der ganze andere Code ...

if($input[x] == WERT) # WERT = Wert des value-Feldes.

Du gibst also in den VALUE-Feldern der <option>-Elemente nur an, welchen Wert die definierte Variable aus <select name="..."> haben kann.
Wenn eines der Elemente ausgewählt ist, dann wird nicht "$input['WERT']" angelegt, sondern "$input["x"] = WERT".

Teste doch einfach mal folgendes Mini-Ding, dann siehst du, wie es funktioniert:

Code:
<!-- Seite 1 -->

<form name="test" action="seite2.php" method="POST">
  <select name="variable">
  <option value="1">Wert=1</option>
  <option value="2">Wert=2</option>
  </select>
  <br>
  <input type="submit">
  </form>

Code:
# Seite 2
   echo $_POST['variable'];

Das war das ganze mit einer einfachen Variable und wie sie die VALUE-Werte verarbeitet.

Ich bin mir aber unsicher ob EIN durchgehendes Array für alle Elemente eines Formulars (nicht nur eines Mehrauswahlfeldes) auch möglich ist.
Wenn nicht, dann nimm einfach für jedes <input> Objekt eine eigene Variable (name=). Aber deine Lösung, alle Formularelemente in einem Array zu speichern, finde ich nicht verkehrt. Kannst ja mal posten, ob das so funktioniert hat :)
 
Feine Sache danke dir funktioniert wunderbar jetz, habs folgender maßen gemacht:

html:

Code:
<select name="input[1]">
	  <option value='2'>-----</option>
      <option value='3'>3</option>
	  <option value='4'>4</option>
	  <option value='5'>5</option>
	  </select>

php:

PHP:
if ($input['1'] == '2')
{
echo 'Wir möchten einen Wert';
}
else
{
alles weitere
}
 
Zurück
Oben