Undefined variable

Toasty

Grünschnabel
Hallo

Es geht um eine Änderung eines bestimmten Datensatzes

Der Script macht folgendes:
Dem Benutzer werden alle Datensätze angezeigt.
Er wählt aus, welchen er ändern möchte.
Er gibt die Änderungen ein.
Er lässt sie durchführen.

Local habe ich die Scripte getestet, dies ging einwandfrei, anschliessend auf einem andern Rechner. Da hatte er Probleme mit den Scripten.
Es kommt die Fehlermeldung:
************************************************************************
Notice: Undefined variable: auswahl in ...........uf16b.php on line 4
Es wurde kein Datensatz ausgewählt
************************************************************************
Warum hat er Probleme mit der Variable Auswahl?

Ich habe die Scripte von der Seite
http://www.valar.ch/~asuzuki/mirror/galileo_php4/kapf.htm#t26
(Hoffe es ist Rechtlich vertretbar)

uf16a.php
***********************************************************************
<html>
<body>
Wählen Sie aus, welcher Datensatz geändert werden soll:<p>
<form action = "uf16b.php" method = "post">
<?php
$db = mysql_connect();
$res = mysql_db_query("firma",
"select * from personen");
$num = mysql_num_rows($res);

// Tabellenbeginn
echo "<table border>";

// Überschrift
echo "<tr> <td>Auswahl</td> <td>Name</td>";
echo "<td>Vorname</td> <td>Personalnummer</td>";
echo "<td>Gehalt</td> <td>Geburtstag</td> </tr>";

for ($i=0; $i<$num; $i++)
{
$nn = mysql_result($res, $i, "name");
$vn = mysql_result($res, $i, "vorname");
$pn = mysql_result($res, $i, "personalnummer");
$ge = mysql_result($res, $i, "gehalt");
$gt = mysql_result($res, $i, "geburtstag");

// Tabellenzeile mit -zellen
echo "<tr> <td><input type='radio' name='auswahl'";
echo " value='$pn'></td> <td>$nn</td> <td>$vn</td>";
echo "<td>$pn</td> <td>$ge</td> <td>$gt</td> </tr>";
}

// Tabellenende
echo "</table>";

mysql_close($db);
?>
<p>
<input type="submit" value="Datensatz anzeigen">
</form>
</body>
</html>
**************************************************************

uf16b.php
*************************************************************
<html>
<body>
<?php
if ($auswahl)
{
$db = mysql_connect();

$sqlab = "select * from personen where";
$sqlab .= " personalnummer = $auswahl";

$res = mysql_db_query("firma", $sqlab);

$altnn = mysql_result($res, 0, "name");
$altvn = mysql_result($res, 0, "vorname");
$altge = mysql_result($res, 0, "gehalt");
$altgt = mysql_result($res, 0, "geburtstag");

echo "Führen Sie die Änderungen durch,<p>";
echo "betätigen Sie anschließend den Button<p>";

echo "<form action = 'uf16c.php' ";
echo " method = 'post'>";

echo "<input name='neunn' value='$altnn'>";
echo " Nachname<p>";
echo "<input name='neuvn' value='$altvn'> ";
echo " Vorname<p>";
echo "<input name='neupn' value='$auswahl'>";
echo " Personalnummer<p>";
echo "<input name='neuge' value='$altge'>";
echo " Gehalt<p>";
echo "<input name='neugt' value='$altgt'>";
echo " Geburtstag<p>";
echo "<input type='hidden' name='oripn' ";
echo " value='$auswahl'>";

echo "<input type='submit' ";
echo " value='Änderungen in DB speichern'><p>";
echo "<input type='reset'>";
echo "</form>";

mysql_close($db);
}

else
echo "Es wurde kein Datensatz ausgewählt<p>";
?>
</body>
</html>
**********************************************************

uf16c.php
********************************************************
<html>
<body>
<?php
$db = mysql_connect();

$sqlab = "update personen set name = '$neunn',";
$sqlab .= "vorname = '$neuvn',";
$sqlab .= "personalnummer = '$neupn',";
$sqlab .= "gehalt = '$neuge',";
$sqlab .= "geburtstag = '$neugt'";
$sqlab .= "where personalnummer = $oripn";

mysql_db_query("firma", $sqlab);

$num = mysql_affected_rows();
if ($num>0)
echo "Der Datensatz wurde geändert<p>";
else
echo "Der Datensatz wurde nicht geändert<p>";

mysql_close($db);
?>
Zurück zur <a href="uf16a.php">Auswahl</a>

</body>
</html>
**********************************************************

Ich hoffe es kann mir jemand einen Denkanstoss geben.
Vielen Dank im Voraus

Gruss Toasty
 
Dein Server im Internet hat register_globals auf 0. Also musst du die Variablen mit $_POST und $_GET auslesen.

Zum Beispiel würde der Fehler nicht in Zeile 4 auftreten, wenn du statt
PHP:
if ($auswahl)
{
$db = mysql_connect();

das hier verwenden würdest.
PHP:
if ($_POST['auswahl'])
{
$db = mysql_connect();
 
Man sollte vielleicht nicht immer alle Skripte, die man so im Netz findet blind verwenden ohne sich Gedanken zu machen, was da passiert...

Tip: Such mal nach REGISTER_GLOBALS bzw. $_POST.


.... Mist, zu langsam :rolleyes:
 
Original geschrieben von Toasty
Local habe ich die Scripte getestet, dies ging einwandfrei, anschliessend auf einem andern Rechner. Da hatte er Probleme mit den Scripten.
Es kommt die Fehlermeldung:
************************************************************************
Notice: Undefined variable: auswahl in ...........uf16b.php on line 4
Es wurde kein Datensatz ausgewählt
************************************************************************
Warum hat er Probleme mit der Variable Auswahl?
Das liegt bestimmt daran, dass auf dem Server register_globals deaktiviert ist.

Daher versuch mal folgendes:

PHP:
/* ... */
if ($_POST['auswahl'])
{
$db = mysql_connect();

$sqlab = "select * from personen where";
$sqlab .= " personalnummer = ".$_POST['$auswahl']."";
/* ... */

Noch ein kleiner Hinweis: Die Funktion [phpf]mysql_db_query[/phpf] ist etwas veraltet. Benutze stattdessen lieber [phpf]mysql_select_db[/phpf] und [phpf]mysql_query[/phpf]
 
Danke das ihr mir so schnell geholfen habt

Habe folgendes Ausprobiert: register_globals = ON
Hat leider nichts gebracht.

Anschliessend habe ich folgendes Probiert:
*******************************************************************
if ($_POST['auswahl'])
{
$db = mysql_connect();

$sqlab = "select * from personen where";
$sqlab .= " personalnummer = ".$_POST['$auswahl']."";
********************************************************************

Nun bringt er folgende Meldungen:
*************************************************************************
Notice: Undefined index: $auswahl in ....uf16b.php on line 11

Warning: mysql_result(): supplied argument is not a valid MySQL result resource in ....uf16b.php on line 16

Warning: mysql_result(): supplied argument is not a valid MySQL result resource in .....uf16b.php on line 17

usw.
*************************************************************************

scheinbar hat er Probleme mit

******************************************
$altnn = mysql_result($res, 0, "name");
$altvn = mysql_result($res, 0, "vorname");
usw.
*******************************************

Und das mit dem aus dem Netz kopieren da gebe ich euch recht.
Versuche mich deswegen in PHP reinzuarbeiten. Aber aller Anfang ist schwer.

Was ich eben möchte ist aus der MySQL-DB Daten auslesen. Datensätze editieren und anschliessend wieder in die DB reinschreiben. Und da kam mir dieses Script gerade recht.

Gruss Toasty
 
Original geschrieben von Toasty
Anschliessend habe ich folgendes Probiert:
*******************************************************************
if ($_POST['auswahl'])
{
$db = mysql_connect();

$sqlab = "select * from personen where";
$sqlab .= " personalnummer = ".$_POST['$auswahl']."";
********************************************************************

Nun bringt er folgende Meldungen:
*************************************************************************
Notice: Undefined index: $auswahl in ....uf16b.php on line 11

Warning: mysql_result(): supplied argument is not a valid MySQL result resource in ....uf16b.php on line 16

Warning: mysql_result(): supplied argument is not a valid MySQL result resource in .....uf16b.php on line 17

usw.
*************************************************************************
Wie wärs wenn man mal ein wenig nachdenkt? Oder alternativ etwas Self-Debugging betreibt?

PHP:
$sqlab = "select * from personen where"; 
$sqlab .= " personalnummer = ".$_POST['$auswahl']."";

muss heissen:

PHP:
$sqlab = "select * from personen where"; 
$sqlab .= " personalnummer = ".$_POST['auswahl']."";
 
Sorry wenn ich gerade nicht den Unterschied sehe, aber ich würde es so machen:
PHP:
$sqlab = "SELECT * FROM `personen` WHERE `personalnummer` = '".$_POST['$auswahl']."'";
 
Hi,
ich würde
PHP:
if (isset($_POST['auswahl'])) {
verwenden. Wenn man error_reporting auf E_ALL hat, meckert er sonst ;)

Gruß
Marvin
 
Danke nun funktioniert alles ausser das update.

****************************************************************
<?php
$db = mysql_connect();

$sqlab = "update personen set name = 'neunn',";
$sqlab .= "vorname = 'neuvn',";
$sqlab .= "personalnummer = 'neupn',";
$sqlab .= "gehalt = 'neuge',";
$sqlab .= "geburtstag = 'neugt'";
$sqlab .= "where personalnummer = 'oripn";

mysql_db_query("firma", $sqlab);

$num = mysql_affected_rows();
if ($num>0)
echo "Der Datensatz wurde geändert<p>";
else
echo "Der Datensatz wurde nicht geändert<p>";

mysql_close($db);
?>
***************************************************************
kein update

Daher habe ich noch folgendes probiert:
*************************************************************
<?php
$db = mysql_connect();

$sqlab = "update personen set name = 'neunn', name = 'neuvn', name = 'neupn', name = 'neuge', name = 'neugt' ";
$sqlab .= " personalnummer = ".$_POST['auswahl']."";

mysql_db_query("firma", $sqlab);

$num = mysql_affected_rows();
if ($num>0)
echo "Der Datensatz wurde geändert<p>";
else
echo "Der Datensatz wurde nicht geändert<p>";

mysql_close($db);
?>
********************************************************
aber leider auch dann gibt es kein update.......

warum macht er den update nicht, die Anweisung ist richtig?

@ Danke Marvin
**************************************
if (isset($_POST['auswahl'])) {
**************************************
funktiniert prima!
 
Zum ersten Versuch:
$sqlab .= "where personalnummer = 'oripn'";
Das Singlequote fehlte (heißt es das Singlequote oder der Singlequote?)

Zum zweiten Versuch:
Code:
$sqlab = "update personen set name = 'neunn', name = 'neuvn', name = 'neupn', name = 'neuge', name = 'neugt' ";
$sqlab .= " WHERE personalnummer = '".$_POST['auswahl']."'";

Jeweils die rot markierten Sachen haben gefehlt und logische Fehler sind unterstrichen.

Gruß
Marvin
 
Zurück