php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Probleme mit UPDATE


 
el_comandante
16-07-2003, 16:30 
 
Hallo zusammen

Dieses Script habe ich aus dem Buch MySQL für Dummies kopiert und abgeändert.
Dieser Script ändert jedoch den Datensatz nicht. Aber es erscheint auch keine Fehlermeldung.
Wäre froh wenn mir jemand helfen könnte


require("biblio2.inc");

$film_in_anschaffung_ID= $HTTP_GET_VARS["film_in_anschaffung_ID"];
$film_name = $HTTP_GET_VARS["film_name"];
$film_genre = $HTTP_GET_VARS["film_genre"];

if (!isset($set))
{
seitenAnfang("Filme verändern");
echo "<h1>$name ver&auml;ndern</h1>\n";
echo "<form action=\"$PHP_SELF\" method=\"post\">\n";
echo "<input type=\"hidden\" name=\"set\" value=\"true\">\n";
echo "<input type=\"hidden\" name=\"film_in_anschaffung_ID\" value=\"$f_id\">\n";
echo "<table border=\"0\">\n";

echo "<tr>\n";
echo "<td><b>Name:</b></td>\n";
echo "<td>\n";
echo "<input type=\"text\" name=\"name\" value=\"$film_name\" size=\"50\" maxlength=\"30\">\n";
echo "</td>\n";
echo "</tr>\n";

echo "<tr>\n";
echo "<td><b>Genre:</b></td>\n";
echo "<td>\n";
echo "<input type=\"text\" name=\"genre\" value=\"$film_genre\" size=\"50\" maxlength=\"50\">\n";
echo "</td>\n";
echo "</tr>\n";


echo "</table>\n";
echo "<p>\n";
echo "<input type=\"submit\" value=\"Daten abspeichern\">\n";
echo "<input type=\"reset\" value=\"Daten verwerfen\">\n";
echo "</form>\n";

} //!isset($set)
else
{
include("db_connect2.inc");
seitenAnfang("Filme ver&auml;ndert");
if(mysql_connect($host, $user, $pwd))
{
if(mysql_select_db($dbname))
{
$sql = "UPDATE filme_in_anschaffung SET "
. "film_name =$name"
. "film_genre =$genre"
. "WHERE film_in_anschaffung_ID = '$f_id'" or die(mysql_error());

if(mysql_query($sql) or die(mysql_error()))
{
echo "<h1>&Auml;nderung erfolgreich</h1>\n";
echo "Die Filmdaten von <b> $name</b> wurde erfolgreich ge&auml;ndert.<p>";
}
else
{
echo "Der Datensatz konnte leider nicht gespeichert werden. ";
echo "&Uuml;berpr&uuml;fen Sie Ihre Eingaben und versuchen es noch einmal.<p>\n";
}
} //mysql_select_db()
else
echo "<br><i>Verbindung zur Datenbank ist im Moment nicht m&ouml;glich!</i><br>\n";
mysql_close();
} //mysql_connect()
else
echo "<br><i>Der Server ist wegen Wartungsarbeiten vor&uuml;bergehend nicht erreichbar.</i><br>\n";
} //else-Zweig !isset($set)

 
Wurzel
16-07-2003, 16:43 
 
1. strings musst du in '' setzen:
$sql = "UPDATE filme_in_anschaffung SET
film_name ='".$name."'
film_genre ='".$genre."'
WHERE film_in_anschaffung_ID = ".$f_id;

// und das => or die(mysql_error()); ist hier hyperfluid
2. wo werden eigentlich $name, $genre, $f_id definiert?

3. btw: ist eigentlich sql, oder?

 
wahsaga
16-07-2003, 16:43 
 
Original geschrieben von el_comandante
Dieser Script ändert jedoch den Datensatz nicht. Aber es erscheint auch keine Fehlermeldung.
ach! und nu?

welche debug-versuche hast du bisher unternommen?

wie wäre es z.b. mal mit einer augabe von
echo "pfurz!";
hinter dem
if (!isset($set))
um zu sehen, ob er in den if-zweig reingeht, bei else analog, etc.


btw: wenn $set per GET oder POST übergeben worden sein soll, dann hast du mit ziemlicher wahrscheinlichkeit einfach nur ein register_globals-problem (suche bitte, was du dagegen tun kannst.)

 
el_comandante
16-07-2003, 17:08 
 
@Wurzel

1. habe ich gemacht funkt leider immer noch nicht
2. nach dem Buch sollten diese echo "<input type=\"text\" name=\name\" value=\"$film_name\">\n";hier definiert sein
3. MySQL

@wahsaga

wie kann ich die echo's einfügen ohne dass diese Fehlermeldung erscheint.

Fehlermeldung: parse error, unexpected T_ELSE

Die Variable $set sollte eigentlich nicht per GET übergeben worden sein. Diese Variable habe ich nur in diesem script

 
mister_x1
16-07-2003, 17:19 
 
ich hoffe, du hast das query jetzt ordentlich übernommen.
echo "<input type=\"text\" name=\name\" value=\"$film_name\">\n";
da fehlt schonmal nen ".
$set ist ne $_POST['set'] variable und ist nicht einfach so da.

 
el_comandante
16-07-2003, 17:34 
 
da fehlt schonmal nen ".

war nur ein Schreibfehler im Forum

Also die $set Variable ist zuerst false bis man den "Daten abspeichern" button drückt, nachher wird sie true
sollte eigentlich schon stimmen

 
Wurzel
16-07-2003, 17:49 
 
1. wenn du dein form aufrufst, schau mal in den quelltext, ob alle felder => hidden auch mit einem wert gefüllt sind
2. kommen die vars in der art an, wie $_POST['name'], $_POST['genre']
3. hier
echo "<input type=\"hidden\" name=\"film_in_anschaffung_ID\" value=\"$f_id\">\n";
definierst du $_POST['film_in_anschaffung_ID'] und nicht $f_id, die du später beim update verändern willst
4. http://www.schattenbaum.net wäre sicher ne gute adresse, um erstmal die grundlagen zu lernen :teach:

... to be continued ...

 
el_comandante
16-07-2003, 18:14 
 
1. alle felder sind mit einem Wert gefüllt auch hidden

2. die vars $_POST['name'], $_POST['genre'] kommen soweit ich das beurteilen kann richtig an.
habe sie mit einem echo ausgegeben

bevor ich etwas ändere stimmen sie mit den Daten im form überein
wenn ich sie ändere gibt das echo die Änderung aus, jedoch im Form oder in der Datenbank geschieht nichts.

3. habe es geändert, funkt aber weiterhin nicht

4. wäre nicht nur, ist. Hilft mir bei diesem Problem aber leider nicht weiter. Und leider stehe ich unter Zeitdruck.

 
Wurzel
16-07-2003, 18:25 
 
Original geschrieben von el_comandante
4. wäre nicht nur, ist. Hilft mir bei diesem Problem aber leider nicht weiter. Und leider stehe ich unter Zeitdruck. ja, ja, wir haben alle unsere probleme :dontknow:

poste mal das sql-statement.

 
el_comandante
17-07-2003, 09:54 
 
also

tbl filme_in_anschaffung

film_in_anschaffung_ID Primary Key
film_name
film_genre
kommentar
benutzer_ID

wenn du das mit sql statement meinst

 
Wurzel
17-07-2003, 10:38 
 
nein, das meine ich nicht, ^^das ist die tabellenstruktur.

also, ich sehe für dich hier nur 2 möglichkeiten:
1. du willst es lernen
- dann bring zeit mit
- lerne die grundlagen aus einem buch oder bei schattenbaum.net
- übe an einfachen beispielen

2. du willst eine schnelle problemlösung
- poste es als projekthilfe oder unter jobangebote

so hat das jedenfalls keinen sinn.


btw: das habe ich gemeint: $sql = "hier steht das statement, um die datenbanktabelle abzufragen, zu änder, etc.";

 
el_comandante
17-07-2003, 11:06 
 
Ok werde es unter projekthilfe posten.

Danke für die mithilfe

 
el_comandante
17-07-2003, 18:02 
 
Könntest du dir trotzdem das sql statement nochmals ansehen

$sql = "UPDATE filme_in_anschaffung SET
film_name ='".$film_name."'
film_genre ='".$film_genre."'
kommentar ='".$kommentar."'
benutzer_ID ='".$benutzerID."'
WHERE film_in_anschaffung_ID = ".$film_in_anschaffung_ID;

wenn ich das !isset auf isset setze gibt er mir folgende Fehlermeldung

Fehler in der Syntay bei 'film_genre='Action' kommentar='fdklas gewrtwe" in Zeile 3

 
Wotan
17-07-2003, 18:29 
 
Poste mal bitte den letzten Zustand des Scriptabschnittes!

 
el_comandante
17-07-2003, 18:35 
 
<?php
require("biblio2.inc");

$film_in_anschaffung_ID= $HTTP_GET_VARS["film_in_anschaffung_ID"];
$film_name = $HTTP_GET_VARS["film_name"];
$film_genre = $HTTP_GET_VARS["film_genre"];
$kommentar = $HTTP_GET_VARS["kommentar"];
$benutzer_ID = $HTTP_GET_VARS["benutzer_ID"];


if (!isset($set))
{
seitenAnfang("Filme ver&auml;ndern");
echo "<h1>$film_name ver&auml;ndern</h1>\n";
echo "<form action=\"$PHP_SELF\" method=\"post\">\n";
echo "<input type=\"hidden\" name=\"set\" value=\"true\">\n";
echo "<input type=\"hidden\" name=\"film_in_anschaffung_ID\" value=\"$film_in_anschaffung_ID\">\n";
echo "<table border=\"0\">\n";

echo "<tr>\n";
echo "<td><b>Name:</b></td>\n";
echo "<td>\n";
echo "<input type=\"text\" name=\"film_name\" value=\"$film_name\" size=\"50\" maxlength=\"30\">\n";
echo "</td>\n";
echo "</tr>\n";

echo "<tr>\n";
echo "<td><b>Genre:</b></td>\n";
echo "<td>\n";
echo "<input type=\"text\" name=\"film_genre\" value=\"$film_genre\" size=\"50\" maxlength=\"50\">\n";
echo "</td>\n";
echo "</tr>\n";

echo "<tr>\n";
echo "<td><b>Kommentar:</b></td>\n";
echo "<td>\n";
echo "<input type=\"text\" name=\"kommentar\" value=\"$kommentar\" size=\"50\" maxlength=\"50\">\n";
echo "</td>\n";
echo "</tr>\n";

echo "<tr>\n";
echo "<td><b>Benutzer ID:</b></td>\n";
echo "<td>\n";
echo "<input type=\"text\" name=\"benutzerID\" value=\"$benutzer_ID\" size=\"50\" maxlength=\"50\">\n";
echo "</td>\n";
echo "</tr>\n";

echo "</table>\n";
echo "<p>\n";
echo "<input type=\"submit\" value=\"Daten abspeichern\">\n";
echo "<input type=\"reset\" value=\"Daten verwerfen\">\n";
echo "</form>\n";

} //!isset($set)
else
{
include("db_connect2.inc");
seitenAnfang("Filme ver&auml;ndert");


if(@mysql_connect($host, $user, $pwd))
{
if(@mysql_select_db($dbname))
{
$sql = "UPDATE filme_in_anschaffung SET
film_name ='".$film_name."'
film_genre ='".$film_genre."'
kommentar ='".$kommentar."'
benutzer_ID ='".$benutzerID."'
WHERE film_in_anschaffung_ID = ".$film_in_anschaffung_ID;

if(mysql_query($sql) or die(mysql_error()))
{
echo "<h1>&Auml;nderung erfolgreich</h1>\n";
echo "Die Filmdaten von <b> $film_name</b> wurde erfolgreich ge&auml;ndert.<p>";
}
else
{
echo "Der Datensatz konnte leider nicht gespeichert werden. ";
echo "&Uuml;berpr&uuml;fen Sie Ihre Eingaben und versuchen es noch einmal.<p>\n";
}
} //mysql_select_db()
else
echo "<br><i>Verbindung zur Datenbank ist im Moment nicht m&ouml;glich!</i><br>\n";
mysql_close();
} //mysql_connect()
else
echo "<br><i>Der Server ist wegen Wartungsarbeiten vor&uuml;bergehend nicht erreichbar.</i><br>\n";
} //else-Zweig !isset($set)
back(5);
?>

 
Wurzel
17-07-2003, 18:40 
 
du hast folgende felder:<input type=\"hidden\" name=\"set\" value=\"true\">
<input type=\"hidden\" name=\"film_in_anschaffung_ID\" value=\"$f_id\">
<input type=\"text\" name=\"name\" value=\"$film_name\" size=\"50\" maxlength=\"30\">
<input type=\"text\" name=\"genre\" value=\"$film_genre\" size=\"50\" maxlength=\"50\">
dann brauchst du einen code in der art:if(isset($_POST['set']))
{
...

$sql = "UPDATE filme_in_anschaffung SET film_name ='".$_POST['name']."', film_genre ='".$_POST['genre']."' WHERE film_in_anschaffung_ID = ".$_POST['film_in_anschaffung_ID'];
echo $sql; // nur zum testen, ob die werte auch richtig drinne stehen
mysql_query($sql) or die (mysql_error());
...
}

merke: der NAME des feldes wird zur VARIABLEN mit dem inhalt der feldeingabe:
<input type=text name=test value="bla">
wird zu
$_POST['test'], $_GET['test'] ( je nach art der übergabe) mit dem zugewiesenen wert "bla"

 
Wotan
17-07-2003, 18:44 
 
if(mysql_connect($host, $user, $pwd))
{
if(mysql_select_db($dbname))
{
$sql = "UPDATE filme_in_anschaffung SET
film_name ='".$film_name."'
film_genre ='".$film_genre."'
kommentar ='".$kommentar."'
benutzer_ID ='".$benutzerID."'
WHERE film_in_anschaffung_ID = ".$film_in_anschaffung_ID;

if(mysql_query($sql) or die(mysql_error()))
{
echo "<h1>&Auml;nderung erfolgreich</h1>\n";
echo "Die Filmdaten von <b> $film_name</b> wurde erfolgreich ge&auml;ndert.<p>";
}
else
{
echo "Der Datensatz konnte leider nicht gespeichert werden. ";
echo "&Uuml;berpr&uuml;fen Sie Ihre Eingaben und versuchen es noch einmal.<p>\n";
}
}

Mach mal folgende Änderung.
:teach: Auf die Klammeraffen solltest du als Anfänger verzichten. Damit unterdrückst du schon im Vorfeld wichtige Fehlermeldungen. :teach:

 
el_comandante
17-07-2003, 18:58 
 
Danke vielmals

jetzt funkt es.
:D

 
Wotan
17-07-2003, 19:19 
 
Wie kann es jetzt funktionieren wenn doch eigentlich jetzt die Fehlermeldungen kommen müssten. :confused:
Naja egal. Wenn es den jetzt geht ist es ja gut.


Alle Zeitangaben in WEZ +2. Es ist jetzt 18:46 Uhr.