# Daten von Formular in MySQL Tabelle schreiben



## MisterMi (3. Juni 2013)

Ich habe eine Formularseite die eine Auswahl zulässt:


```
<form method="post" action="Ausgabe.php">
   <!-- Textfeld für ein Formular zur Eingabe des Namen-->
   <p>Gib bitte deinen Namen an: <input type="text" name="name" value="Name"></p>
    
     <!-- Checkboxen für Mehrfachauswahl -->
<select name="tor[]" size="50" multiple="multiple">
<option value="Manuel Neuer">Manuel Neuer - Bayern - 30000000</option>
<option value="Marc-André ter Stegen">Marc-André ter Stegen - Gladbach - 10000000</option>
<option value="René Adler">René Adler - Hamburg - 9000000</option>
<option value="Bernd Leno">Bernd Leno - Leverkusen - 9000000</option>
</select>

<select name="abwehr[]" size="50" multiple="multiple">
<option value="Philipp Lahm">Philipp Lahm - Bayern - 28000000</option>
<option value="Mats Hummels">Mats Hummels - Dortmund - 24000000</option>
<option value="Holger Badstuber">Holger Badstuber - Bayern - 22000000</option>
</select>

  <!-- Einbau des Submit Buttons zu abschicken des Formulars -->
<input type="submit" name="senden" value="Senden">
</form>
```

Nun wird das ganze ja übergeben und soll in meine Datenbank geschrieben werden über:


```
<?php
$auswahl1 = $_POST['tor'];
$auswahl2 = $_POST['abwehr'];
$auswahl3 = $_POST['mittelfeld'];
$auswahl4 = $_POST['sturm'];
$Spieler = $_POST['Spieler'];

//Verbindung herstellen
$datenbank = mysql_connect("xxx.mysql", "xxx", "xxx") or die ("Verbindung fehlgeschlagen: ".mysql_error());
$verbunden = mysql_select_db("xxx",$db) or die ("Datenbank nicht gefunden oder fehlerhaft");

//Daten in DB speichern

for($i=0;$i<count($auswahl2);$i++)
{
 $sql_befehl = mysql_query("INSERT INTO Mirko (tor, abwehr, mittelfeld, sturm) VALUES ('$auswahl1', '$auswahl2', '$auswahl3', '$auswahl4')");

}
if($sql_befehl)
{ echo "Ihr Eintrag wurde hinzugefügt."; }

//Verbindung beenden
mysql_close($datenbank);
?>
```

Leider bekomme ich aber folgende Fehlermeldung und weiß nicht was falsch ist

Parse error: syntax error, unexpected T_STRING in /customers/b/3/5/mirkolinho.de/httpd.www/Ausgabe.php on line 2


----------



## Yaslaw (3. Juni 2013)

Deine Variablen sind jeweils ein Array und kein String. Ergo kannst du nicht einfach so in dein INSERT übertragen. 
Entweder entfernst du im HTML bei den Namen den [] oder du nimmst im PHP den ersten Eintrag des Arrays


----------



## MisterMi (3. Juni 2013)

Ich habe in dem Array ja mehrere Werte und möchte alle der Reihe nach in die Datenbank schreiben.


----------



## Yaslaw (3. Juni 2013)

Dann musst du pro Wert ein Insert absenden


----------



## MisterMi (3. Juni 2013)

```
<?php
$tor = $_POST['tor'];
$abwehr = $_POST['abwehr'];

//Verbindung herstellen
xxx

// in String umwandeln
$tor = serialize($tor);

// schleife die alle Daten ausgibt
foreach($tor as $torwart) {

     mysql_query("INSERT INTO Mirko (Name) VALUES ('$torwart')");
}

//Verbindung beenden
mysql_close($datenbank);

?>
```
will er so nicht...


----------



## Yaslaw (3. Juni 2013)

Sagt 'er' auch was dazu?
Wahrscheinlich will er dass du auch noch andere Felder abfüllst.

DU solltest dir mal überlegen wie du die Daten speichern willst.

Nehmen wir an, der User wählt das folgende aus.
tor: 2 Einträge. Er wählt den Hans und den Fritz
abwehr: 5 Einträge. Max, Robert, Hans, Fritz und Rolf

Sind das jetzt 2 Zeilen in der Tabelle? Oder 5 Zeilen? oder Eine Zeile?
Wie willst du das speichern?


----------



## MisterMi (3. Juni 2013)

"Warning: Invalid argument supplied for foreach() in /customers/b/3/5/mirkolinho.de/httpd.www/DatenbankIN.php on line 19 Warning: mysql_close() expects parameter 1 to be resource, null given in /customers/b/3/5/mirkolinho.de/httpd.www/DatenbankIN.php on line 25 "

Dann möchte ich einfach untereinander Hans, Fritz, Max, Robert usw haben, so dass man dann in der Tabelle alle 11 Spieler sieht.


----------



## Yaslaw (3. Juni 2013)

Mach mir ein Beispiel wie die Tabelle abgefüllt sein soll. Nicht in Worten. Setz dich mal ans Excel und mach dir eine Beispieltabelle mit Beispieldaten. Denn bevor du nicht weisst wie du die Daten speichern willst musst du dir auch keine Gedanken machen wie sie in de Tabelle kommen. JEder Tipp den wir dir geben nützt da nicht.

Also, mach mal ein Beispiel der Speicherung


----------



## MisterMi (3. Juni 2013)

Für den Anfang würde reichen:

Name
Neuer
Dante
Badstuber
Gomez

Später wäre 
Name	Position	Verein
Neuer	Tor	Bayern
Dante	Abwehr	Bayern
Badstuber	Abwehr	Bayern
Gomez	Sturm	Bayern

wünschenswert.


----------



## MisterMi (3. Juni 2013)

Im Array stehen derzeit ja Werte wie Neuer Badstuber Dante usw... 

Die will ich jetzt untereinander in eine Tabelle die Mirko heißt und eine Spalte names "Name" hat speichern.


----------



## Yaslaw (3. Juni 2013)

Und was hat das mit 'tor' 'abwehr' etc zu tun? Sollen die EIngaben des Users einfach untereinander in die Tabelle kommen?
Wenn er also die 2 bei tor ausgewählt hat und die 5 bei abwehr, dann sind nachher 7 (2+5) Zeilen in der Tabelle?


----------



## MisterMi (3. Juni 2013)

Richtig. Ich könnte statt Tor und Abwehr auch Spieler nehmen aber ich wollte es unterscheiden um später unterschiedlich damit arbeiten zu können.


----------



## MisterMi (3. Juni 2013)

Bin schon ein Stück weiter.

Mit 


```
<?php
$tor = $_POST['tor'];
$abwehr = $_POST['abwehr'];

//Verbindung herstellen
xxx

for($i=0;$i<count($abwehr);$i++)
{
 //echo $abwehr[$i];
 mysql_query("INSERT INTO Mirko (Name) VALUES ($abwehr[$i])");
}

//Verbindung beenden
mysql_close($db);
?>
```

bekomme ich nun in die DB geschrieben:

Name
0
0
Neuer
Ron-Robert

aber wo kommen die 2 "0" her?


----------



## Yaslaw (3. Juni 2013)

Gut. dann ist das mal geklärt.
Was ich noch nicht verstehen was der folgende Code in deinem PHP-Script soll

```
// in String umwandeln
$tor = serialize($tor);
```

Etwa so könnte das Script aussehen

```
$auswahl1 = $_POST['tor'];
$auswahl2 = $_POST['abwehr']; 

//Alle Spieler zusammentragen
$alleSpieler = $auswahl1 + $auswahl2;

$sql = "INSERT INTO Mirko (name) VALUES ('%s')";

while($alleSpieler as $spieler){
    mysql_query(sprintf($sql, $Spieler));
}
```

Falls eine Mysql-Fehlermeldung kommt, geh mal auf Fehlersuche
PHP MySQL Debug Queries


----------



## MisterMi (3. Juni 2013)

Das war ein Versuch den Array umzuwandeln in einen String.

Ich habe auf der Html Seite mehrere SelectBoxen um in einer die Torhüter und in der anderen die Abwehrspieler anzuzeigen, damit sie der übersicht halber nicht in einer sind.

Die heißen unterschiedlich und ich glaube ich kann sie auch nicht gleich benennen weil er dann nur ein Array mitnimmt.

Hab ich gerade probiert und dann hat er gar nichts in die DB geschrieben.
insofern brauch ich wohl die unterteilung.


----------



## MisterMi (3. Juni 2013)

Parse error: syntax error, unexpected T_AS in /customers/b/3/5/mirkolinho.de/httpd.www/DatenbankIN.php on line 17

Zeile 17 ist $sql = "INSERT INTO Mirko (name) VALUES ('%s')";


```
<?php
$tor = $_POST['tor'];
$abwehr = $_POST['abwehr'];

//Verbindung herstellen
$db = mysql_connect("xxx.de.mysql", "xxx_de", "xxx") or die ("Keine Verbindung möglich: ".mysql_error());
mysql_select_db("xxx_de",$db) or die ("Keine Verbindung möglich: ".mysql_error());

//Alle Spieler zusammentragen
$alleSpieler = $tor + $abwehr;

$sql = "INSERT INTO Mirko (name) VALUES ('%s')";

while($alleSpieler as $spieler){
    mysql_query(sprintf($sql, $Spieler));
}

//Verbindung beenden
mysql_close($db);

?>
```


----------



## MisterMi (4. Juni 2013)

```
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
$tor = $_POST['tor'];
$abwehr = $_POST['abwehr'];

//Verbindung herstellen
$db = mysql_connect("xxx.de.mysql", "xxx_de", "xxx") or die ("Keine Verbindung möglich: ".mysql_error());
mysql_select_db("mirkolinho_de",$db) or die ("Keine Verbindung möglich: ".mysql_error());


//Alle Spieler zusammentragen
$alleSpieler = $tor + $abwehr;

for($i=0;$i<count($alleSpieler);$i++)
{
 mysql_query("INSERT INTO Mirko (Name) VALUES ($alleSpieler[$i])");
}
//Verbindung beenden
mysql_close($db);

?>
```

Warum schreibt er so nichts in die Tabelle obwohl er mit Echo die Werte ausgibt ?


----------



## Yaslaw (4. Juni 2013)

Was für eine Fehlermeldung?
Wo steht ein echo()? und was soll das nicht vorhandene echo() ausgeben?


----------



## MisterMi (4. Juni 2013)

Es kommt keine Fehlermeldung. 
Das Echo, welches ich wieder entfernt habe, habe ich statt dem in die Tabelle schreiben gesetzt und gab mir den Inhalt des Arrays wieder um zu schauen ob da was drin steht und die schleife richtig geht.


----------



## MisterMi (4. Juni 2013)

```
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
$tor = $_POST['tor'];
$abwehr = $_POST['abwehr'];

//Verbindung herstellen
xxx

//Alle Spieler zusammentragen
$alleSpieler = $tor + $abwehr;

for($i=0;$i<count($alleSpieler);$i++)
{
mysql_query("INSERT INTO `Mirko` (`Name`) VALUES ('$alleSpieler[$i]')");
}

//Verbindung beenden
mysql_close($db);
?>
```

Das klappt soweit nur mit folgender Einschränkung:

In Tor steht zum Beispiel Adler und Neuer
und in Abwehr Hummels Dante und Badstuber...

In die Datenbank werden nun alle geschrieben bis auf Hummels.

Also immer der erste Eintrag im Array Abwehr fällt weg.

Woran liegt das?

Vielen Dank


----------



## MisterMi (4. Juni 2013)

Hab schon rausgefunden das es mit Array_merge geht.


----------



## jeipack (4. Juni 2013)

1. serialize macht was ganz anderes
http://php.net/manual/de/function.serialize.php

2. $alleSpieler = $tor + $abwehr; 
fügt das denn auch die beiden Arrays zusammen? 
Wenn du nicht sicher bisst kannst du mit einem "print_r($alleSpieler)" die Variable untersuchen.

wenn du wissen willst wie man in php etwas macht gib es einfach bei google ein.
Beispiel: "array zusammenfügen php"
https://www.google.ch/search?q=arra...rome.0.57j0l3.5123j0&sourceid=chrome&ie=UTF-8
Als ersten Hit bekommst du fast immer einen Link auf php.net/manual. in diesem Fall zu der FUnktion array_merge inkl. einfachen Beispielen.
--> http://php.net/manual/de/function.array-merge.php

Perfekt fürs lerning by doing.


----------



## MisterMi (5. Juni 2013)

Wie kann ich bei dieser Ausgabe der Tabelle in eine Selectbox noch mehrere Felder mitnehmen?
Derzeit wird ja nur die Spalte "Spieler" ausgegeben und ich würde gern auch noch den Verein mitnehmen.


```
<?php

//Verbindung herstellen
$db = mysql_connect("xxx.de.mysql", "xxx_de", "xxx") or die ("Keine Verbindung möglich: ".mysql_error());
mysql_select_db("xxx_de",$db) or die ("Keine Verbindung möglich: ".mysql_error());

$sqlS = "SELECT * FROM `MarktSpieler` WHERE `Position`='Sturm'";

//Stürmer
$sql_resultS = mysql_query($sqlS, $db) or die ("geht nicht");
echo "<select name=\"Sturm[]\"size=\"20\" multiple=\"multiple\">";
while ($daten = mysql_fetch_array($sql_resultS)){
echo "<option value=\"".$daten['ID']."\">".$daten['Spieler']." - ".$daten['Verein']." - ".$daten['Marktwert']."</option>\n";
}
echo "</select>";

//Verbindung beenden
mysql_close($db);
?>
```

Mit diesem Code bekomme ich alle Stürmer aus der Datenbank angezeigt und kann nun welche Auswählen.

Die Ausgewählten die dann im Array sind möchte ich gern, bevor ich Sie wieder in die Datenbank sende nochmal prüfen.

Heißt:
Ich hätte gern unter der Box ein Feld welches die Summe der ausgewählten Spieler in Echtzeit anzeigt.

Geht sowas mit PHP und wenn ja wie?

Danke


----------



## MisterMi (10. Juni 2013)

Ich habe 2 PHP Dateien:


```
<?php

//Verbindung herstellen
$verbindung = mysql_connect("xxx.de.mysql", "xxx_de", "xxx") or die ("Keine Verbindung möglich: ".mysql_error());
mysql_select_db("xxx_de",$verbindung) or die ("Keine Verbindung möglich: ".mysql_error());

$sqlT = "SELECT * FROM `MarktSpieler` WHERE `Position`='Torwart'";
$sqlA = "SELECT * FROM `MarktSpieler` WHERE `Position`='Abwehr'";
$sqlM = "SELECT * FROM `MarktSpieler` WHERE `Position`='Mittelfeld'";
$sqlS = "SELECT * FROM `MarktSpieler` WHERE `Position`='Sturm'";

//Torwart
echo "Torwart:";
echo "<br/>";
$sql_resultT = mysql_query($sqlT, $verbindung) or die ("geht nicht");
echo "<select name=\"tor[]\"size=\"20\" multiple=\"multiple\" style=\"width:400px\">";
while ($daten = mysql_fetch_array($sql_resultT)){
echo "<option value=\"".$daten['ID']."\">".$daten['Spieler']." - ".$daten['Verein']." - ".$daten['Marktwert']."</option>\n";
}
echo "</select>";
echo "<br/>";
//Abwehr
echo "Abwehrspieler:";
echo "<br/>";
$sql_resultA = mysql_query($sqlA, $verbindung) or die ("geht nicht");
echo "<select name=\"abwehr[]\"size=\"20\" multiple=\"multiple\" style=\"width:400px\">";
//echo "<select name=\"Abwehr\">";
while ($daten = mysql_fetch_array($sql_resultA)){
echo "<option value=\"".$daten['ID']."\">".$daten['Spieler']." - ".$daten['Verein']." - ".$daten['Marktwert']."</option>\n";
}
echo "</select>";
echo "<br/>";
//Mittelfeld
echo "Mittelfeldspieler:";
echo "<br/>";
$sql_resultM = mysql_query($sqlM, $verbindung) or die ("geht nicht");
echo "<select name=\"mittelfeld[]\"size=\"20\" multiple=\"multiple\" style=\"width:400px\">";
while ($daten = mysql_fetch_array($sql_resultM)){
echo "<option value=\"".$daten['ID']."\">".$daten['Spieler']." - ".$daten['Verein']." - ".$daten['Marktwert']."</option>\n";
}
echo "</select>";
echo "<br/>";

//Stürmer
echo "St&uuml;rmer:";
echo "<br/>";
$sql_resultS = mysql_query($sqlS, $verbindung) or die ("geht nicht");
echo "<select name=\"sturm[]\"size=\"20\" multiple=\"multiple\" style=\"width:400px\">";
while ($daten = mysql_fetch_array($sql_resultS)){
echo "<option value=\"".$daten['ID']."\">".$daten['Spieler']." - ".$daten['Verein']." - ".$daten['Marktwert']."</option>\n";
}
echo "</select>";
echo "<br/>";

//Verbindung beenden
mysql_close($verbindung);

?>
<form method="post" action="DBschreiben.php">
 <!-- Textfeld für ein Formular zur Eingabe des Namen-->
   <p>Kommentar: <input type="text" name="name" value="Name"></p>

  <!-- Einbau des Submit Buttons zu abschicken des Formulars -->
<input type="submit" name="senden" value="Senden">
</form>
```

Das klappt soweit:

Nun soll das ganze in der DBschreiben.php eben in die Datenbank geschrieben werden. Also die Auswahl.


```
<?php
$tor = $_POST['tor'];
$abwehr = $_POST['abwehr'];
$mittelfeld = $_POST['mittelfeld'];
$sturm = $_POST['sturm'];
//$user = $_POST['user'];

//Verbindung herstellen
$db = mysql_connect("xxx.de.mysql", "xxx_de", "xxx") or die ("Keine Verbindung möglich: ".mysql_error());
mysql_select_db("xxx_de",$db) or die ("Keine Verbindung möglich: ".mysql_error());


//Alle Spieler zusammentragen
$alleSpieler = array_merge($tor, $abwehr, $mittelfeld, $sturm);

//mysql_query("INSERT INTO `Mirko` (`Name`) VALUES (".implode('),(',$alleSpieler).")");

//Verbindung beenden
mysql_close($db);

?>
```

und das klappt leider mit der Fehlermeldung nicht:
array_merge(): Argument #1 is not an array in /customers/b/3/5/mirkolinho.de/httpd.www/DBschreiben.php on line 15 Warning: implode(): Invalid arguments passed in /customers/b/3/5/mirkolinho.de/httpd.www/DBschreiben.php on line 19 

Woran liegt das?

Danke


----------



## Chumper (10. Juni 2013)

Gib dir mal mit var_dump($_POST); alle Felder aus.


----------

