Formularproblem: Notice: Undefined index
anfänger
- php
0 Vinzenz Mai0 Peter Pan0 Beat0 anfänger0 EKKi
Hallo!
Meine Fehlermeldung ständig:
Notice: Undefined index: spielername in C:\xampp\htdocs\database\content\ins_player.php on line 2
Notice: Undefined index: team in C:\xampp\htdocs\database\content\ins_player.php on line 3
Notice: Undefined index: formation in C:\xampp\htdocs\database\content\ins_player.php on line 4
Notice: Undefined index: taktik in C:\xampp\htdocs\database\content\ins_player.php on line 5
Notice: Undefined index: verbindung in C:\xampp\htdocs\database\content\ins_player.php on line 6
Notice: Undefined index: spielweise in C:\xampp\htdocs\database\content\ins_player.php on line 7
Der Quelltext dieser Datei:
<?php
$spielername = $_POST["spielername"]; //Zeile 2
$team = $_POST["team"]; // Zeile 3
$formation = $_POST["formation"]; // Zeile 4
$taktik = $_POST["taktik"]; // Zeile 5
$verbindung = $_POST["verbindung"]; // Zeile 6
$spielweise = $_POST["spielweise"]; // Zeile 7
$eintrag = "INSERT INTO spieler (spielername, team, formation, taktik, verbindung, spielweise)
VALUES ('.$spielername.', '.$team.', '.$formation.', '.$taktik.', '.$verbindung.', '.$spielweise.')";
$speichern = mysql_query($eintrag);
?>
<form action="index.php?section=ins_player" method="post">
<table>
<tr><td></td><td></td></tr>
<tr><td>Spielername: </td><td><input type="text" name="spielername"></td></tr>
<tr><td>Team: </td><td><input type="text" name="team"></td></tr>
<tr><td>Formation: </td><td><input type="text" name="formation"></td></tr>
<tr><td>Taktik: </td><td><input type="text" name="taktik"></td></tr>
<tr><td>Verbindung: </td><td>
<input type="text" name="verbindung"></td></tr>
<tr><td>Spielweise: </td><td><input type="text" name="spielweise"></td></tr>
</table>
<input type="submit" name="speichern" value=" Speichern ">
<input type="reset" value=" Felder leeren ">
</form>
Nun meine Frage: was mache ich falsch?!
Bin leider noch in den Anfängen meiner PHP-Karriere, daher geht gnädig mit mir um :x
Grüße
Hallo,
Meine Fehlermeldung ständig:
Notice: Undefined index: spielername in C:\xampp\htdocs\database\content\ins_player.php on line 2
Notice: Undefined index: team in C:\xampp\htdocs\database\content\ins_player.php on line 3
Notice: Undefined index: formation in C:\xampp\htdocs\database\content\ins_player.php on line 4
Notice: Undefined index: taktik in C:\xampp\htdocs\database\content\ins_player.php on line 5
Notice: Undefined index: verbindung in C:\xampp\htdocs\database\content\ins_player.php on line 6
Notice: Undefined index: spielweise in C:\xampp\htdocs\database\content\ins_player.php on line 7Der Quelltext dieser Datei:
[code lang=php]
<?php
$spielername = $_POST["spielername"]; //Zeile 2
$team = $_POST["team"]; // Zeile 3
$formation = $_POST["formation"]; // Zeile 4
$taktik = $_POST["taktik"]; // Zeile 5
$verbindung = $_POST["verbindung"]; // Zeile 6
$spielweise = $_POST["spielweise"]; // Zeile 7
woher sollten beim Erstaufruf Deiner Seite diese Werte kommen, wenn ich fragen darf? Erstens ist das Umkopieren sowieso völlig überflüssig, zweitens gibt es isset().
anschließend wird in jedem Fall ein Eintrag in eine Datenbank vorgenommen. Schick. Leidet die Tabelle nicht unter vielen Leereinträgen?
$eintrag = "INSERT INTO spieler (spielername, team, formation, taktik, verbindung, spielweise)
VALUES ('.$spielername.', '.$team.', '.$formation.', '.$taktik.', '.$verbindung.', '.$spielweise.')";
Du bist anfällig für SQL-Injection, siehe unzählig oft im Archiv, aber auch in folgendem Beitrag von dedlfix.
$speichern = mysql_query($eintrag);
Freundliche Grüße
Vinzenz
Hi!
Notice: Undefined index: spielername in C:\xampp\htdocs\database\content\ins_player.php on line 2
Dies ist keine Fehlermeldung - du wirst darauf hingewiesen, dass Du auf ein Array-Element zugreifen möchtest, welches nicht existiert.
<?php
$spielername = $_POST["spielername"]; //Zeile 2
$\_POST["spielername"] ist nur dann vorhanden, wenn Deine PHP-Datei über einen HTTP-POST-Request augerufen wurde und spielername übergeben wurde.
Das Umkopieren an dieser Stelle ist unnötig - auch wenn man so etwas in zahlreichen Tutorials und Büchern lesen kann - benutze direkt $\_POST - dadurch bist Du über die Herkunft Deiner Daten informiert.
> Bin leider noch in den Anfängen meiner PHP-Karriere, daher geht gnädig mit mir um :x
Jeder hat mal angefangen und gestorben sind hier bislang wenige - Gnade allerdings solltest Du nicht voraussetzen;)
off:PP
--
"You know that place between sleep and awake, the place where you can still remember dreaming?" (Tinkerbell)
Notice: Undefined index: spielername in C:\xampp\htdocs\database\content\ins_player.php on line 2
...
<?php
$spielername = $_POST["spielername"]; //Zeile 2
Du hast auf ein Vakuum zugegriffen. Was es nicht gibt, das kann man auch nicht auslesen.
Vernünftig userinput validieren:
if( !isset $_POST["spielername"] )( $_POST["spielername"] = ''; )
So jetzt kannst du etwas damit machen.
Du willst übrigens vernünftige Formulare mittels <label> und unter Umständen <fieldset> und <legend> schreiben.
mfg Beat
Habs nun mal grundlegend überarbeitet. Ich bekomme jetzt zwar nun keine Fehlermeldung mehr, allerdings trägt es rein gar nichts in die Tabelle der Datenbank ein!
<?php
include "config.php";
error_reporting(E_ALL);
$tabelle = "spieler";
if (isset($SUBMIT)) {
mysql_connect($host, $user, $password) or die ("Keine Verbindung.");
mysql_select_db("$database") or die ("Die Datenbank ist nicht da.");
$eintragen = "INSER INTO '".$tabelle."' VALUES ('".$_POST["spielername"]."',
'".$_POST["team"]."',
'".$_POST["formation"]."',
'".$_POST["taktik"]."',
'".$_POST["verbindung"]."',
'".$_POST["spielweise"]."')";
$eintragen = mysql_query($eintragen) or die (mysql_error());
}
echo "<form action=\"index.php?section=ins_player\" method=\"POST\">";
echo " <fieldset>";
echo " <legend>Formular</legend>";
echo " <table>";
echo " <tr>";
echo " <td></td>";
echo " <td></td>";
echo " </tr>";
echo " <tr>";
echo " <td><label for=\"spielername\">Spielername:</label></td>";
echo " <td><input type=\"text\" name=\"spielername\"></td>";
echo " </tr>";
echo " <tr>";
echo " <td><label for=\"team\">Team:</label></td>";
echo " <td><input type=\"text\" name=\"team\"></td>";
echo " </tr>";
echo " <tr>";
echo " <td><label for=\"formation\">Formation:</label></td>";
echo " <td><input type=\"text\" name=\"formation\"></td>";
echo " </tr>";
echo " <tr>";
echo " <td><label for=\"taktik\">Taktik:</label></td>";
echo " <td><input type=\"text\" name=\"taktik\"></td>";
echo " </tr>";
echo " <tr>";
echo " <td><label for=\"verbindung\">Verbindung:</label></td>";
echo " <td><input type=\"text\" name=\"verbindung\"></td>";
echo " </tr>";
echo " <tr>";
echo " <td><label for=\"spielweise\">Spielweise:</label></td>";
echo " <td><input type=\"text\" name=\"spielweise\"></td>";
echo " </tr>";
echo " </table>";
echo " <input type=\"submit\" name=\"SUBMIT\" value=\" Speichern \">";
echo " <input type=\"reset\" value=\" Felder leeren \">";
echo " </fieldset>";
echo "</form>";
?>
Mahlzeit anfänger,
<?php
include "config.php";
error_reporting(E_ALL);
$tabelle = "spieler";
if (isset($SUBMIT)) {
Diese Variable kommt woher? Aus der config.php? Was genau bewirkt sie? Hast Du überprüft, ob sie tatsächlich existiert? Welchen Wert hat sie?
mysql_connect($host, $user, $password) or die ("Keine Verbindung.");
mysql_select_db("$database") or die ("Die Datenbank ist nicht da.");
$eintragen = "INSER INTO '".$tabelle."' VALUES ('".$_POST["spielername"]."',
'".$_POST["team"]."',
'".$_POST["formation"]."',
'".$_POST["taktik"]."',
'".$_POST["verbindung"]."',
'".$_POST["spielweise"]."')";
Du hast Vinzenz' Beitrag nicht ausführlich gelesen bzw. seine Anmerkung bzgl. "SQL-Injection" nicht berücksichtigt. Du solltest Dich darüber und über mysql_real_escape_string() informieren.
$eintragen = mysql_query($eintragen) or die (mysql_error());
Zuerst befindet sich in der Variablen $eintragen der SQL-Befehl für die Abfrage in Form eines Strings - anschließend die Rückmeldung, ob dieser Befehl ausgeführt wurde. Verwende besser unterschiedliche Variablen für unterschiedliche Informationen. Gut wäre auch (insbesondere in Programmiersprachen, die keine vernünftigen Variablentypen kennen), die Variablen entsprechend zu benennen, z.B. $strAbfrage und $blnErgebnis o.ä.
echo " <td><label for="spielername">Spielername:</label></td>";
echo " <td><input type="text" name="spielername"></td>";
Das bringt nichts, solange das <input> nicht auch die ID "spielername" hat - ein <label> bezieht sich mit seinem "for"-Attribut immer auf die ID eines zugeordneten Formularelements, nicht auf dessen Namen.
MfG,
EKKi