PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Button abfangen und Aktion ausführen


lucas26
19.04.2006, 20:59
Hallo,

ich habe ein kleines großes Problem. In einem Programm, das ich derzeit schreibe, sollen Datensätze angezeigt, hinzugefügt, gelöscht und editiert werden. Die Anzeige klappt leider schon nicht so wie sie sollte, doch das hinzufügen stellt mich endgültig vor Rätsel.

Ich habe mit folgendem Code das ganze Bereits so konzipiert, das wenn in der XML-Datei auf "Add" geklickt wird, eben auch dieser Zeilenblock ausgeführt wird.
if ($_REQUEST['do'] == 'add')
Soweit so gut, der Aufbau funktioniert fehlerfrei, es wird alles so angezeigt wie ich es haben möchte (3 Eingabefelder, 1 Yes/No-Radio)

Doch wenn ich nun auf den Button "Save" klicke, passiert folgendes: Eine weiße Seite wird mir angezeigt. Mehr nicht. Keine DB-Operation, wie es eigentlich sein sollte, kein echo.

echo "<html>

<head>";

if (isset($gesendet))
{
mysql_connect();
mysql_select_db("Beispiel");

$sqlab = "insert Test (Feld1, Feld2, Feld3, Feld4) values ('$f1', '$f2', $f3, $f4)";

mysql_query($sqlab);

$num = mysql_affected_rows();
if ($num>0)
{
echo "<font color='#00aa00'>";
echo "1 Datensatz hinzugefuegt<p>";
echo "</font>";
}
else
{
echo "<font color='#ff0000'>";
echo "Fehler, ";
echo "kein Datensatz hinzugefuegt<p>";
echo "</font>";
}
};

echo "</head>
<body>
Geben Sie einen vollstaendigen Datensatz ein:<br>
<form action = "test1.php" method = "post">
<input name="f1"> Feld1 (Bitte nur Zahlen)<p>
<input name="f2"> Feld2 <p>
<input name="f3"> Feld3 <p>
<input name="f4"> Feld4 <p>
<input type="submit" name="gesendet">
<input type="reset">
</form>
</body>
</html>";
}
Was mache ich falsch bzw. wie müsste das ganze eigentlich überhaupt generell/ für ein vB ACP geschrieben werden (mit print_input etc...) ? Ich konnte leider bis dato nichts brauchbares finden, also suche ich nun direkt um Hilfe.

Ein großes Danke schonmal an jeden, der mir hier helfen kann.

Mystics
19.04.2006, 21:13
Du verwendest in deiner echo Ausgabe Anführungszeichen. Dein echo Befehl wird aber auch mit Anführungszeichen eingeleitet.

Dieser Code z.B.<form action = "test1.php" method = "post">muss so aussehen:<form action=\"test1.php\" method=\"post\">usw.

Oder du arbeitest einfach mit echo '', statt mit echo "".

Statt dem:if (isset($gesendet))muss es wahrscheinlich auch heißen:if (isset($_POST['gesendet']))
Um Hilfe zu vBulletin zu erhalten, musst du dich als Lizenznehmer ausweisen:
http://www.vbulletin-germany.com/forum/showthread.php?p=22771#post22771

lucas26
19.04.2006, 22:32
Danke für die schnelle Hilfe, mystics!

Was meinen Lizenzstatus angeht - das werde ich so schnell wie möglich klären. Die vB-Fragen stell ich also jetzt erst einmal zurück.

Weiterführende Frage:
Ich hab nun ein weiteres Problem, was sich nach dem Button aufgebaut hat.
Wenn ich etwas in die 4 Felder eingebe und auf den Button drücke, kommen folgende Fehlermeldungen (ich hab sie mal an das obige code-beispiel angepasst):

Notice: Undefined index: f1 in test1.php on line 10


Geh' ich jetzt nach den Suchergebnissen
(...)Das Postarray Element 'var' existiert nicht, vor der Verwendung dieses Elementes sollte die Existenz geprüft werden, z.B. mit isset und empty(...)
Und füge dementsprechend vor if (isset($_POST['gesendet'])) ein if (isset($_POST['f1']))kommt leider auch die selbe Fehlermeldung.

Liegts wieder an einem Wort, das ich vergessen habe? Ich finde den/die Fehler einfach nicht...

Mystics
19.04.2006, 22:57
Müsste es nicht heißen:
INSERT INTO Test?

Probier's mal damit:


$feld1 = addslashes($_POST['f1']);
$feld2 = addslashes($_POST['f2']);
$feld3 = intval($_POST['f3']);
$feld4 = intval($_POST['f4']);
$sqlab = "INSERT INTO Test (Feld1, Feld2, Feld3, Feld4)
VALUES ('$feld1', '$feld2', $feld3, $feld4)";(ich gehe davon aus, dass f3 und f4 nur Zahlen sein sollen)

lucas26
20.04.2006, 20:16
Ich habe das ganze jetzt so wie du geschrieben hast übernommen - lediglich die Variablen verändert. Es läuft soweit! Damit hast du mir meinen Tag gerettet :)

Ich muss allerdings noch 1 Sache fragen, dann habe ich's hoffentlich.

Sagen wir, $f1 (intval) soll eine nur einmal vergebbare ID sein. Wie prüfe ich den Wert in dieser Variable auf die höchste Zahl und addiere 1 dazu?
(Beispiel:
1
2
// 3 gelöscht
4

-> Programm ermittelt nicht 3 als freie ID, sondern 5)

Übrigens: You've got PN, Mystics.

Mystics
20.04.2006, 20:26
Das macht MySQL automatisch.

ALTER TABLE Test ADD UNIQUE ('Feld1');