Undefined variable/index beim Abschicken.
W.
- php
<?php
include 'init.php';
if (!isset($_POST['submit'])) {
$select = ("SELECT pointcategoryid,name
FROM pointcategory
INNER JOIN
pointcategoryrank");
$query = mysql_query($select);
?>
<html>
<body>
<form action="pointcategoryadd.php" method="post">
<table border="0" cellpadding="3" cellspacing="0">
<tr>
<td align="right"><b>Name/Description:</b></td><br>
<td><textarea class="Feld" size="20" name="name" maxlength="55" rows="10" cols="50"></textarea></td>
</tr>
<tr>
<td align="right"><b>Add points:</b></td><br>
<td>
<?php
$select = ("SELECT rank,points
FROM pointcategoryrank");
$query = mysql_query($select);
$points = mysql_fetch_array($query);
$rank = array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16);
foreach ($rank as $key => $rank) {
echo "<b>$rank</b> <input name='.$points.' class='Feld' size='4' maxlength='4'><br>";
}
echo "</td>";
echo "</tr>";
echo "<tr>";
echo " <td align='right'>";
echo " <td><input type='submit' name='submit' value='Submit' /></td>";
echo "</tr>";
echo "</form>";
echo "</html>";
}
if (isset($_POST['submit'])) {
mysql_query("INSERT INTO pointcategory
(name)
VALUES
('$_POST[name]')") or die (mysql_error());
mysql_query("INSERT INTO pointcategoryrank
(rank, points)
VALUES
('$rank', '$_POST[points]')") or die (mysql_error());
}
?>
Hallo!
Also, ich will für jeden Rang eine bestimmte Punktzahl eingeben, die dann in die Datenbank übertragen werden soll.
Als Fehlermeldung kommt:
Notice: Undefined variable: rank in pointcategoryadd.php on line 47
Notice: Undefined index: points in pointcategoryadd.php on line 47
Das ist die Zeile nach dem "VALUES".
Ich habe probiert die Variable mit isset zu kontrollieren und falls sie nicht existiert zu erstellen, jedoch ging das auch nicht, sondern erzeugte eine weitere Meldung.
Tabellenstruktur:
Tabelle "pointcategory":
pointcategoryid int(5) autoincrement
name varcha(55)
Tabelle "pointcategoryrank":
pcid int(5) autoincrement
rank int(11)
points int(11)
Mahlzeit W.,
mysql_query("INSERT INTO pointcategory
(name)
VALUES
('$_POST[name]')") or die (mysql_error());
mysql_query("INSERT INTO pointcategoryrank
(rank, points)
VALUES
('$rank', '$_POST[points]')") or die (mysql_error());
Wieso zeigst Du nicht einfach nur die relevanten Code-Zeilen?
Als Fehlermeldung kommt:
Notice: Undefined variable: rank in pointcategoryadd.php on line 47
Dann hast Du die genannte Variable wohl nicht initialisiert.
Notice: Undefined index: points in pointcategoryadd.php on line 47
Das ist die Zeile nach dem "VALUES".
Du weißt schon, wie man in PHP auf assoziative Arrays zugreift?
Ich habe probiert die Variable mit isset zu kontrollieren und falls sie nicht existiert zu erstellen, jedoch ging das auch nicht, sondern erzeugte eine weitere Meldung.
Die da lautet? Und wie sah Dein Versuch aus?
Tabellenstruktur:
Tabelle "pointcategory":
pointcategoryid int(5) autoincrement
name varcha(55)Tabelle "pointcategoryrank":
pcid int(5) autoincrement
rank int(11)
points int(11)
Das ist vollkommen irrelevant - Du hast ein PHP-Problem.
MfG,
EKKi
Hallo. Das es ein PHP Problem ist habe ich ja bereits erkannt. Deswegen landete dieser Thread auch dort ;)
if (isset($_POST['rank'])) $rank = $_POST['rank'];
Mahlzeit W.,
Hallo. Das es ein PHP Problem ist habe ich ja bereits erkannt. Deswegen landete dieser Thread auch dort ;)
Dann brauchst Du aber nicht die Felder Deiner Tabellen zu benennen ... :-)
if (isset($_POST['rank'])) $rank = $_POST['rank'];
1. Warum das Umkopieren? Das verschleiert nur die Herkunft der Werte und vermindert dadurch u.U. die Sicherheit Deines Skripts.
2. Und was ist, wenn kein entsprechender POST-Parameter übergeben wurde? Dann existiert gar keine Variable $rank? Vielleicht solltest Du zu Debug-Zwecken Dir mal direkt vor der entsprechenden Verwendung in der Abfrage den Inhalt der Variablen ausgeben lassen ...
MfG,
EKKi
Hallo,
Ich habe jetzt mit print $rank und $_POST['points'] ausgeben wollen. Ergebnis:
print 'rank '.$rank.'';
print 'points '.$_POST['points'].'';
rank 16
Notice: Undefined index: points in pointcategoryadd.php on line 40
points
Das heißt also er hat irgendwie 16 in Rank, obwohl zu dieser Stelle noch gar nichts eingegeben worden ist.
Mahlzeit W.,
print 'rank '.$rank.'';
print 'points '.$_POST['points'].'';
>
> ~~~php
rank 16
> Notice: Undefined index: points in pointcategoryadd.php on line 40
> points
Das bedeutet, die Variable $rank hat den Wert 16 und im Array $_POST existiert kein Eintrag mit dem Schlüssel/Index 'points'.
Das heißt also er hat irgendwie 16 in Rank, obwohl zu dieser Stelle noch gar nichts eingegeben worden ist.
Das kann sein - dafür kenne ich Deine Anwendung nicht. Aber anscheinend solltest Du dafür sorgen, dass im $_POST-Array auch eine Angabe zu den 'points' enthalten ist. Ist das entsprechende Formularelement evtl. deaktiviert?
MfG,
EKKi
Schönen Abend,
deaktiviert habe ich zumindest wissentlich nichts. Ich würde einfach schätzen, dass er 16 nimmt, da dieses das letzte Feld ist welches mit der foreach Schleife erstellt wird:
$rank = array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16);
foreach ($rank as $key => $rank) {
echo "<b>$rank</b> <input name='.$points.' class='Feld' size='4' maxlength='4'><br>";
}
Sodass er halt den letzten Wert als $rank übernimmt und ihn überträgt und die anderen womöglich überschreibt.
Kann man das dann so umstellen, dass man soetwas wie ein "foreach INSERT INTO" macht?
Hallo
... Ich würde einfach schätzen, dass er 16 nimmt, da dieses das letzte Feld ist welches mit der foreach Schleife erstellt wird:
$rank = array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16);
Dass man dies bequem mit range erledigen kann, ist dir noch nicht untergekommen? Mal'n bisschen im Manual stöbern! ;-)
foreach ($rank as $key => $rank) {
echo "<b>$rank</b> <input name='.$points.' class='Feld' size='4' maxlength='4'><br>";
}
> Sodass er halt den letzten Wert als $rank übernimmt und ihn überträgt und die anderen womöglich überschreibt.
Natürlich überschreibt er das Array, wenn du sagst, dass das Array und in der Schleife die Variable für den jeweiligen Wert den selben Namen -nämlich $rank- zu haben haben.
> Kann man das dann so umstellen, dass man soetwas wie ein "foreach INSERT INTO" macht?
Was denn nun schon wieder für'n INSERT?
Tschö, Auge
--
Die deutschen Interessen werden am Liechtenstein verteidigt.
[Veranstaltungsdatenbank Vdb 0.2](http://termindbase.auge8472.de/)
Moin,
oh, von Range wusste ich tatsächlich noch nichts ;) Danke.
Wie mache ich es denn am Besten, dass es nicht permanent den gleichen Namen hat. Sondern von 1 bis 16?
Da ich Range nicht kannte, dachte ich jetzt müsste man jeden Wert einzeln in die DB einfügen.
Was mich mit der Strukturierung verwirrt hat, ist halt das ich ja den foreach Teil als HTML String ausgebe. Und der muss ja dann auch an der richtigen Stelle sein. Ich werde den HTML Teil dann nach ganz hinten setzen.
Mahlzeit W.,
Sodass er halt den letzten Wert als $rank übernimmt und ihn überträgt und die anderen womöglich überschreibt.
Abgesehen von dem, was Auge schrieb: Du solltest Dein Skript vielleicht etwas besser strukturieren: EVA-Prinzip ... erst Parameter entgegennehmen und überprüfen, dann verarbeiten und erst zum Schluss die HTML-Ausgabe aufbereiten und durchführen.
Kann man das dann so umstellen, dass man soetwas wie ein "foreach INSERT INTO" macht?
?
MfG,
EKKi