PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Wie kann ich den Submit-Wert übergeben?


Gabi_M
16.12.2006, 20:40:57
Ich habe folgendes Problem: ich kann den mit Input Type="submit" name="submit" nicht übergeben - es sollte sich eine IF Schlaufe öffnen, wo die Daten (Lieferant) updated werden. Doch diese Schlaufe wird nie abgearbeitet.
Der Code ist ziemlich lang, aber ich hoffe, es nimmt sich trotzdem jemand die Zeit, es sich anzuschauen. Besten Dank.

<HTML>

<BODY class="">

<h1>Bestellverwaltung</h1>

<?php

$db = mysql_connect('localhost','root');
if (!$db)

{ die("Die Datenbank konnte nicht geöffnet werden");


}

mysql_select_db("bestellverwaltung",$db)

or die("DB existiert nicht");


?>

<?php
$edit = $_GET['edit'];


echo "Wert von edit" .$edit;

// Daten ändern

if ($edit)
{

if ( isset($_POST['submit']))
{ echo "submit gesetzt";
extract ($_POST);
echo $lieferant;
echo "lieferant = ". $lieferant;
$sql = "UPDATE bestellung SET LIEFERANT='$lieferant' WHERE id_bestellung=$edit";
$result = mysql_query($sql,$db);
echo "<br>Betroffene Zeilen: " . mysql_affected_rows();
echo "Daten f&uuml;r die ID ".$edit." wurden ge&auml;ndert";

}
else {

$sql = "SELECT * FROM bestellung WHERE id_bestellung = $edit";
$result = mysql_query($sql,$db);
$row = mysql_fetch_array($result);

?>
<form method="post" action="<? echo $PHP_SELF ?>">
<input type=hidden name="edit" value="<? echo $row["id_bestellung"] ?>">

<table border="0" align="center">
<tr><td>Lieferant</td>
<td>
<input type="text" name="lieferant" value="<? echo $row["lieferant"] ?>" size="10">
</td>
</tr>
<tr><td>&nbsp;</td><td>

<input type="submit" name="submit" value="&Auml;ndern">
</td></tr></table>
</form>

<?
}
}


$query = "select * from bestellung";

$result = mysql_query($query);

if (mysql_errno())
{
die("<br>" . mysql_errno().": ".mysql_error()."<br>");
}
?>
<table>
<b>

<TR>
<TD>ID</TD>
<TD>artikel</TD>
<TD>menge</TD>
<TD>erfasser-kuerzel</TD>
<TD>eingabedatum</TD>
<TD>lieferant</TD>
<TD>artikelnummer</TD>
<TD>kundenname</TD>
<TD>benachrichtigungs-anweisung</TD>
<TD>bestelldatum</TD>
<TD>besteller-kuerzel</TD>
<TD>einkaufspreis_inklmwst</TD>
<TD>eintreff-datum</TD>
<TD>wareneingang-kuerzel</TD>
<TD>status</TD>
<TD>laufnummer</TD>
<TD>&nbsp;</td>
<TD>&nbsp;</td>
</b>
<?
while ($row = mysql_fetch_array($result, MYSQL_ASSOC))
{
if (mysql_errno())
{
die("<br>" . mysql_errno().": ".mysql_error()."<br>");
}
?>

<tR>
<TD><? echo " $row[id_bestellung]"; ?> </TD>
<TD><? echo " $row[artikel]"; ?> </TD>
<TD><? echo " $row[menge]"; ?> </TD>
<TD><? echo " $row[erfasser_kuerzel]"; ?> </TD>
<TD><? echo " $row[eingabedatum]"; ?> </TD>
<TD><? echo " $row[lieferant]"; ?> </TD>
<TD><? echo " $row[artikelnummer]"; ?> </TD>
<TD><? echo " $row[kundenname]"; ?> </TD>
<TD><? echo " $row[benachrichtigungs_anweisung]"; ?> </TD>
<TD><? echo " $row[bestelldatum]"; ?> </TD>
<TD><? echo " $row[besteller_kuerzel]"; ?> </TD>
<TD><? echo " $row[einkaufspreis_inklmwst]"; ?> </TD>
<TD><? echo " $row[eintreff_datum]"; ?> </TD>
<TD><? echo " $row[wareneingang_kuerzel]"; ?> </TD>
<TD><? echo " $row[status]"; ?> </TD>
<TD><? echo " $row[laufnummer]"; ?> </TD>
<td><a href="<? echo ''.$PHP_SELF.'?clear='.$row[id_bestellung]. ''?>">l&ouml;schen</a></td>
<td><a href="<? echo ''.$PHP_SELF.'?edit='.$row[id_bestellung]. '' ?>">bearbeiten</a></td>

<?

echo "<br>";
?>
</TR>
<?
}
?>
</TABLE>
</body>
</html>

feuervogel
16.12.2006, 20:46:25
...if schlaufe...

wenn du ein problem hast, das sich nur um die auswertung eines buttons dreht, warum reduzierst du den code dann nicht so, dass alles rausfliegt, was sich nicht um die auswertung des buttons dreht?

setzte mal ein

print_r( $_POST );

an den anfang deines scripts und zeige die ausgabe nach dem abschicken des formulares.

meikel (†)
16.12.2006, 21:28:28
Doch diese Schlaufe wird nie abgearbeitet.
IF ist eine Verzweigung. Schlaufen heißen while, foreach usw.

$edit = $_GET['edit'];
echo "Wert von edit" .$edit;

if ($edit)
{

if ( isset($_POST['submit']))
Ein error_reporting(15) am Anfang des Scriptes hätte sicherlich gejammert, weil es kein $_GET['edit'] gibt.

Jut, es hätte allerdings noch wesentlich mehr zu jammern gehabt.

Gabi_M
16.12.2006, 22:11:53
wenn du ein problem hast, das sich nur um die auswertung eines buttons dreht, warum reduzierst du den code dann nicht so, dass alles rausfliegt, was sich nicht um die auswertung des buttons dreht?

setzte mal ein

print_r( $_POST );

an den anfang deines scripts und zeige die ausgabe nach dem abschicken des formulares.


Danke, die VERZWEIGUNG funktioniert nicht....

Mit print_r habe ich herausgefunden, dass der Wert für Submit sehr wohl gesetzt wurde (submit=>ändern), aber die Verzweigung funktioniert nicht. Das echo $lieferant wird nicht ausgegeben und das Wichtigste: die Datenbank wird nicht updatet.
Die Verzweigung sieht so aus:

if ($submit)
{ echo "submit gesetzt";
extract ($_POST);
echo $lieferant;
$sql = "UPDATE bestellung SET LIEFERANT='$lieferant' WHERE id_bestellung=$edit";
$result = mysql_query($sql,$db);
echo "<br>Betroffene Zeilen: " . mysql_affected_rows();
echo "Daten f&uuml;r die ID ".$edit." wurden ge&auml;ndert";

}

feuervogel
16.12.2006, 22:57:24
wieso wird aus $_POST[ 'submit' ] auf einmal $submit?

ferner:

<form method="post" action="<? echo $PHP_SELF ?>">
<input type=hidden name="edit" value="<? echo $row["id_bestellung"] ?>">

ist das dein $edit aus

$edit = $_GET[ 'edit' ];

?

dann ist $edit immer leer, da es ja ein POST-formular ist.

Gabi_M
16.12.2006, 23:48:04
wieso wird aus $_POST[ 'submit' ] auf einmal $submit?

ferner:

<form method="post" action="<? echo $PHP_SELF ?>">
<input type=hidden name="edit" value="<? echo $row["id_bestellung"] ?>">

ist das dein $edit aus

$edit = $_GET[ 'edit' ];

?

dann ist $edit immer leer, da es ja ein POST-formular ist.

Wieso aus $_POST['submit'] ein $submit? - War ein Versuch, ein missglückter. Da ich die Variablen ja mit extract herauslese, dachte ich, es sollte auch nur mit $submit gehen.
$_GET['edit'] holt das edit aus einem Hyperlink wo die zu ändernde Zeile angeklickt wird:

td><a href="<? echo ''.$PHP_SELF.'?edit='.$row[id_bestellung]. '' ?>">bearbeiten</a></td>

Das edit wird mir von diesem Link her auch richtig ausgelesen. Selbst wenn ich es in diesem Post Formular nochmals übergebe, hat es immer noch den richtigen Wert. Aber eben, das Anzeigen des neu eingegebenen Lieferanten-Wertes und das Updaten der Tabelle funktioniert nicht :-(

meikel (†)
17.12.2006, 08:16:55
Wieso aus $_POST['submit'] ein $submit? - War ein Versuch, ein missglückter. Da ich die Variablen ja mit extract herauslese, dachte ich, es sollte auch nur mit $submit gehen.
$_GET['edit'] holt das edit aus einem Hyperlink wo die zu ändernde Zeile angeklickt wird:

td><a href="<? echo ''.$PHP_SELF.'?edit='.$row[id_bestellung]. '' ?>">bearbeiten</a></td>

Das edit wird mir von diesem Link her auch richtig ausgelesen.
Das klappt aber nur beim ersten Mal! Wenn im Formular auf Submit geklickt wird, dann existiert $_GET['edit'] nicht mehr. Es existiert ein $_POST['edit'], aber das wertest Du ja nicht aus.

Aber eben, das Anzeigen des neu eingegebenen Lieferanten-Wertes und das Updaten der Tabelle funktioniert nicht :-(
Noch mal: füge bitte am Anfang des Scriptes folgendes ein:
error_reporting(15);
UND beachte die dann ausgegebenen Warnungen/Notices.

Und laß den Quatsch mit extract. Alle per POST Request übergebenen Uservariablen sind im Array $_POST und alle per GET Request übergebenen Variablen sind im Array $_GET.

Beachte dabei, daß PHP Unterschiede zwischen großen und kleinen Buchstaben macht.

Dein Script muß auf folgende Zustände reagieren:
a. der Client hat auf den EDIT Link geklickt und schickt demzufolge einen GET Request:
- Formular basteln und ausgeben.

b. der Client hat auf den Submit Knopp geklickt und schickt einen POST Request:
- SQL Anweisung basteln und immer schön die Uservariablen (in Abhängigkeit von magic_quotes_gpc ) mit mysql_escape_string() oder mit mysql_real_escape_string() entschärfen.
- den geänderten Datensatz anzeigen (oder sonstwas)
- einen Link zum nächsten Scrupt anbieten

c. der Client ist ein Böser und hat sich irgend was ausgedacht, um Dich zu ärgern.
- das Konzept ändern. So, wie das Konzept bis jetzt aussieht, kann jeder Depp jeden Datensatz verändern. Er braucht nämlich nur in der Adreßzeile des Browsers den Wert von edit zu verändern...

Gabi_M
17.12.2006, 09:59:33
Danke Meikel, das Error-Reporting meldet mir eine Zugriffsverweigerung.
Selsamerweise bleibt der edit-Wert bestehen (sobald ich auf Bearbeiten klicke ist er gesetzt und bleibt), trotz dem POST - bis dahin schafft es mein Browser wohl gar nicht. Extract war natürlich die "harte Methode", damit endlich meine Variablen übergeben werden.
Dass mir jemand in den Link eine Variable setzen wird, ist nicht anzunehmen - ich schreibe das Programm für 8 Leute, die alle keine Ahnung (sogar noch weniger als ich ;-) von php haben.
Nun habe ich momentan wieder geug Anregungen von Euch, um weiter nach dem Fehler zu suchen. Danke, dass ihr Euch Zeit genommen habt.

meikel (†)
17.12.2006, 12:13:03
Danke Meikel, das Error-Reporting meldet mir eine Zugriffsverweigerung.
Selsamerweise bleibt der edit-Wert bestehen (sobald ich auf Bearbeiten klicke ist er gesetzt und bleibt), trotz dem POST - bis dahin schafft es mein Browser wohl gar nicht.
Hast Du das geändert?

$edit = $_GET['edit'];
echo "Wert von edit" .$edit;

if ($edit)
{

if ( isset($_POST['submit']))


Das müßte prinzipiell so aussehen:

$edit = false; # default Wert setzen

if (isset($_GET['edit']))
$edit = $_GET['edit']; # es war ein GET Request

if (isset($_POST['edit']))
$edit = $_POST['edit']; # es war ein POST Request

if ($edit)
{
# ...

Dass mir jemand in den Link eine Variable setzen wird, ist nicht anzunehmen - ich schreibe das Programm für 8 Leute, die alle keine Ahnung (sogar noch weniger als ich ;-) von php haben.
Sowas kannst Du Dir bestenfalls in einem Intranet ohne Verbindung zum Internet erlauben, wenn die 8 Hansels Deine dicksten Freunde sind.