Daten aus Formular in Array werden nicht in DB geschrieben :(

MisterMi

Erfahrenes Mitglied
Hallo,

ich habe folgenden Code und weiß nicht weiter warum er nichts in die Datenbank schreibt :(

PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Checkboxen mit PHP auswerten</title>
</head>
<body>

<form action="Check.php">
<input type="hidden" name="sent" value="yes">
<input type="text" name="auto"><br>
<input type="checkbox" name="spieler[]" value="Robben">&nbsp;Robben<br>
<input type="checkbox" name="spieler[]" value="Ribery">&nbsp;Ribery<br>
<input type="checkbox" name="spieler[]" value="Reus">&nbsp;Reus<br>
<input type="checkbox" name="spieler[]" value="Goetze">&nbsp;Göze<br>
<input type="checkbox" name="spieler[]" value="Thiago">&nbsp;Thiago<br>
<input type="submit">
</form>
<?php
        $sent = $_GET['sent'];              //Weichensteller
        $auto = $_GET['user'];              //Username
        $spieler = $_GET['spieler'];        //Inhalt der Checkboxen
        if ($sent == 'yes') {
            $spieler_text = implode(', ',$spieler);

//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());

mysql_query("INSERT INTO kader (username, spiederid) VALUES ($user, '".implode("'),('",$spieler)."')");

//Verbindung beenden
mysql_close($db);

                 echo '<h1>Ihre Mannschaft &quot;'.$user.'&quot;:</h1>';
                 echo '<p>Spieler:<br><br>'.$spieler_text.'</p>';
         }
?>
</body>
</html>

Diese Checkbox habe ich nun.
In das Textfeld soll der Username eingetragen werden und eine Auswahl an Spielern vorgenommen werden.

Wie muss der INSERT Befehl aussehen, damit ich die Auswahl in die Datenbank speichern kann?

Die DB hat folgenden Aufbau:

Tabellenname: "kader"
Spalten: "username" und "spielerid"

bei Usersname soll dann also immer der Username aus dem Textfeld stehen und dahinter die Auswahl

Also wenn jemand zum Beispiel Robben und Ribery auswählt und Schmidt heißt soll da stehen:

username, spielerid
Schmidt, Robben
Schmidt, Ribery

usw...

Danke

(PS: Das ganze soll immer neu geschrieben werden wenn es schon einträge zu dem User gibt. Heißt, wenn Hr. Schmidt dann eine erneute Auswahl vornimmt sollen alle Einträge vorher weg bzw. die alte Auswahl nicht mehr in der Datenbank stehen.)
 
Hi,

fang mal die Fehlermeldung von [phpf]mysql_query[/phpf] ab.

Zum Neuschreiben: Alle Daten vorher löschen.


Zu MySQL: Die alte Erweiterung soll man nicht mehr benutzen! Zudem ist dein Skript auch für SQL-Injection und XSS anfällig.
 
1) das Feld für den Usernamen heißt bei dir "auto", du willst aber $_GET["user"] übergeben!

2) die INSERT-Anweisung kannst du so gestalten:

PHP:
if (isset($_GET['sent']) and $_GET['sent'] == 'yes') {
	for ($a = 0; $a < count($_GET['spieler']); $a++) {
		$val[] = "(" .mysql_real_escape_string($_GET['auto']) .", " .mysql_real_escape_string($_GET['spieler'][$a]) .")";
	}
	$values = implode(', ', $val);

	$sql = "INSERT INTO kader (username, spiederid) VALUES " .$values;
}
 
PHP:
error_reporting(E_ALL | E_STRICT);
ini_set('display_errors', TRUE);
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Checkboxen mit PHP auswerten</title>
</head>
<body>

<form action="Check.php">
<input type="hidden" name="sent" value="yes">
<input type="text" name="user"><br>
<input type="checkbox" name="spieler[]" value="Robben">&nbsp;Robben<br>
<input type="checkbox" name="spieler[]" value="Ribery">&nbsp;Ribery<br>
<input type="checkbox" name="spieler[]" value="Reus">&nbsp;Reus<br>
<input type="checkbox" name="spieler[]" value="Goetze">&nbsp;Goetze<br>
<input type="checkbox" name="spieler[]" value="Thiago">&nbsp;Thiago<br>
<input type="submit">
</form>
<?php
        $sent = $_GET['sent'];              //Weichensteller
        $user = $_GET['user'];              //Username
        $spieler = $_GET['spieler'];        //Inhalt der Checkboxen
        if ($sent == 'yes') {
            $spieler_text = implode(', ',$spieler);

//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());

if (isset($_GET['sent']) and $_GET['sent'] == 'yes') {
    for ($a = 0; $a < count($_GET['spieler']); $a++) {
        $val[] = "(" .mysql_real_escape_string($_GET['user']) .", " .mysql_real_escape_string($_GET['spieler'][$a]) .")";
    }
    $values = implode(', ', $val);

    $sql = "INSERT INTO kader (username, spielerid) VALUES " .$values;
}

//Verbindung beenden
mysql_close($db);

                // echo '<h1>Ihre Mannschaft &quot;'.$user.'&quot;:</h1>';
                // echo '<p>Spieler:<br><br>'.$spieler_text.'</p>';
         }
?>
</body>
</html>

so angeändert und macht immer noch nichts :(
 
Zuletzt bearbeitet:
Weil die ersten zwei Zeilen als PHP-Code interpretiert werden sollten, du sie aber nicht mit PHP-Tags umschlossen hast.
 
Gut doof von mir...

nun kommt das:

"Notice: Undefined index: user in /customers/b/3/5/mirkolinho.de/httpd.www/Check.php on line 24 Notice: Undefined index: user in /customers/b/3/5/mirkolinho.de/httpd.www/Check.php on line 41 Notice: Undefined index: user in /customers/b/3/5/mirkolinho.de/httpd.www/Check.php on line 41 "
 
Das Textfeld für den Usernamen hat noch immer den falschen Namen, name="auto" steht im HTML-Code. Es muss aber name="user" heißen !

Das alles:

PHP:
$sent = $_GET['sent'];              //Weichensteller
$user = $_GET['user'];              //Username
$spieler = $_GET['spieler'];        //Inhalt der Checkboxen
if ($sent == 'yes') {
    $spieler_text = implode(', ',$spieler);

Kannst du dir sparen (und natürlich die schließende, geschweifte Klammer des IF-Blocks). Das ist in meinem Beispiel bereits enthalten bzw. gar nicht mehr nötig.
 
Zuletzt bearbeitet:
Das kommt natürlich von $_GET['user'] usw., weil die Daten nicht übergeben worden sind, du aber trotzdem drauf zugreifst.
Du müsstest vorher per [phpf]isset[/phpf] prüfen, ob alle Schlüssel übergeben worden sind.
 
ok gemacht.

Nun kommen keine Fehlermeldungen mehr aber leider steht die Auswahl auch nicht in der Datenbank :(
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück