Hidden Field --> Update von MySQL DB
HONDA
- php
Hallo,
ich bin beinahe am Verzweifeln.
1.) Ich versuche ein mehrseitiges Formular zu erstellen.
Mittels Hidden Field reiche ich die "ID" des Anmelders weiter.
2.) Mittels echo"$ID"; lasse ich mir diese auf der nächsten Seite anzeigen;.... funktioniert!
3.) Nun möchte ich die neuen Daten mittels UPDATE in die MySQL-Datenbank bringen indem ich am Ende "WHERE UserID='$ID'"; einfüge.
Resultat: NEGATIV.
Wenn ich hingegen "WHERE UserID='15'"; eingebe funktioniert es tadellos.
Wie kann es sein, dass es funktioniert, wenn ich eine Zahl eingebe, nicht hingegen, wenn ich die mittels hidden field weitergereichte Variable eingeben möchste;... zumal ich eine Zeile vor dem SQL-UPDATE mittels Echo feststelle, dass $ID gleich 15 ist (sie also ordnungsgemäß übernommen wurde).
Merci für jegliche Problemlösungsvorschläge!!
Anbei der Code zur besseren Veranschaulichung:
<html>
<head>
<body>
....EINGABEFORMULAR "COUNTRY"....
</body>
</html>
<!-- NUN DER DATENBANK EINTRAG (UPDATE) -->
<?php
include("../connect.inc.php");
echo"$ID"; //hier wird im Browser die Zahl 15 angezeigt
$xerxes="UPDATE country
SET Country='".$_POST['Country']."' WHERE
UserID='$ID'";
mysql_query($xerxes);
?>
Hallo!
3.) Nun möchte ich die neuen Daten mittels UPDATE in die MySQL-Datenbank bringen indem ich am Ende "WHERE UserID='$ID'"; einfüge.
$xerxes="UPDATE
country
SET Country='".$_POST['Country']."' WHERE
UserID='$ID'";mysql_query($xerxes);
?>
Was sagt den MySQL-Error?
$xerxes="UPDATE country
SET Country='".$_POST['Country']."' WHERE
UserID='$ID'";
mysql_query($xerxes)
echo mysql_error(); // <<<----
MfG, André Laugks
Hallo André,
er spukt gar nichts aus.
Wie wenn er den Befehl ignorieren würde.
Honda
Hallo,
ich habe soeben festgestellt, dass er stets die Zeile "0" updatet....
Wie kann das sein, ich weise genau die Variable zu, die eine Zeile zuvor mittels echo 15 ergibt?? >> echo"$ID";
LG,
Honda
yo,
er spukt gar nichts aus.
Wie wenn er den Befehl ignorieren würde.
sieht ganz so aus, als wenn es den datensatz nicht geben würde. eventuell enthält die variable $ID nicht sichtbare zeichen wie ein leerzeichen ?
Ilja
Hallo Ilja,
zit: "enthält die variable $ID nicht sichtbare zeichen wie ein leerzeichen ?"
Wie kann ich das feststellen?
Honda
yo,
mach doch mal folgende ausgabe.
echo "UPDATE country
SET Country='".$_POST['Country']."' WHERE
UserID='$ID'";
was $ID betrifft, so kann man mit hilfe einer funktion wie strlen die länge ermitteln. es kann aber auch einen ganz anderen grund haben.
Ilja
echo $begrueszung;
was $ID betrifft, so kann man mit hilfe einer funktion wie strlen die länge ermitteln. es kann aber auch einen ganz anderen grund haben.
Nimm doch da var_dump() das gibt dir auch gleich noch den Typ mit aus.
echo "$verabschiedung $name";
echo $begrueszung;
echo $inhalt;
echo "$verabschiedung $name";
Hello,
Nimm doch da var_dump() das gibt dir auch gleich noch den Typ mit aus.
Der Typ für aus dem Environment übernommene Paramete sollte bei PHP immer 'String' sein, sonst ist PHP kaputt. ;-)
Zu HONDA:
Dass diese Vorgehensweise allgemein nur ein vereindachtes Modell sein sollte, ist Dir hoffentlich klar. Externe Paramter direkt in ein Query einzubinden, ist nicht sicher. Die müssen vorher behandelt werden.
$_POST['Country'] = stripslashes($_POST['Country']);
$sql = "UPDATE country
";
$sql .= "SET Country='". mysql_escape_string($_POST['Country']) ."'";
$sql .= "WHERE UserID=". strval($_POST['id'])";
$query = mysql_query($sql,$con);
if (!$query or mysql_errno() > 0)
{
echo "<p class="error">Abfragefehler: (".mysql_errno().") ".mysql_error()."</p>";
}
else
{
echo "<p class="result">Betroffene Zeilen: ".mysql_affected_rows($con)."</p>";
}
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Hello,
$sql = "UPDATE country
\n";
$sql .= "SET Country='". mysql_escape_string($_POST['Country']) ."'\n";
$sql .= "WHERE UserID=". strval($_POST['id'])\n";
Da fehlte noch ein Whitespace am Ende der zweiten Zeile :-|
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Hello,
Hello,
$sql = "UPDATE
country
\n";
$sql .= "SET Country='". mysql_escape_string($_POST['Country']) ."'\n";
$sql .= "WHERE UserID=". intval($_POST['id'])\n";
und außerdem sollte es inval() heißen. Kommt davon, wenn man zu früh aufsteht.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
hi,
$sql .= "WHERE UserID=". intval($_POST['id'])\n";
und außerdem sollte es inval() heißen. Kommt davon, wenn man zu früh aufsteht.
T-om, dass du jetzt schon wie die T-elekom anfängst, anderen ihre Ts zu missgönnen, kann ich nicht gutheißen - die funktion heißt immer noch intval(). inval() gibt es nicht.
gruß,
wahsaga
Hallo,
ich glaube nun zu wissen wo der eigentliche Fehler liegt....
...also es funktioniert scheinbar nicht, wenn ich in einem Skript (Skript1.php) ein INSERT in die DB durchführe, und im Anschluss daran mittels Inlcude("Skript2.php")... (von Skript 1 ausgehend) versuche die zuvor erstellte Zeile upzudaten (UPDATE)....
Hat damit jemand Erfahrungen?
LG,
HONDA
Hello,
@ wahsaga: Danke für das "t"
@ HONDA: ich versteh leider nicht ganz, wie das abläuft bei Dir.
Mal doch bitte ein Bild (Ablaufdiagramm), dann können wir Dir vielleicht folgen.
Dazu solltes Du eines zeichnen, dass die unterschiedlichen Requests in ihrer zeitlichen Folge darstellt und dann für jeden Request ein eigenes, wie er abgewickelt werden soll.
Warum Du ein Insert durchführst, um dann im selben Script den Datensatz gleich wieder mit update zu verändern ist mir noch nicht klar. Habe ich das falsch verstanden?
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
echo $begrueszung;
Nimm doch da var_dump() das gibt dir auch gleich noch den Typ mit aus.
Der Typ für aus dem Environment übernommene Paramete sollte bei PHP immer 'String' sein, sonst ist PHP kaputt. ;-)
Das ist leider nicht allgemein gültig. Hier kann man sich nämlich auch noch Fehler einfangen (wenn man alle Warnungen in den Wind schlägt).
Bei
script.php?parameter[]=test
ergibt ein
echo strlen($_GET['parameter']);
beispielsweise 5
Der var_dump() ist hier hilfreicher als ein strlen().
echo "$verabschiedung $name";
Hello,
Der Typ für aus dem Environment übernommene Paramete sollte bei PHP immer 'String' sein, sonst ist PHP kaputt. ;-)
echo strlen($_GET['parameter']);
beispielsweise 5
Der var_dump() ist hier hilfreicher als ein strlen().
Ich habe auch kein strlen() benutzt.
Dass auch ein Array aufbreitet werden kann, ist allerdings wahr. Ich habe da nur an die Skalaren Entitäten gedacht, das sind immer Strings.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Hello,
echo"$ID"; //hier wird im Browser die Zahl 15 angezeigt
$xerxes="UPDATE
country
SET Country='".$_POST['Country']."' WHERE
UserID='$ID'";mysql_query($xerxes);
Nach nochmaliger Durchsicht des Threads komme ich auf eine andere Idee:
Du schreibst unten, dass nur die Zeile 0 updated wird.
Da drängt sich mir der Verdacht auf, dass Du die Statements nicht wirklich in der Reihenfolge stehen hast, wie oben beschreiben, sondern irgendwann das "$xerxes" definierst, um es dann später zu benutzen. Könnte es sein, dass Du "$ID" erst aus $_POST['ID] lädst, _nachdem_ Du "$xerxes" zugewisen hast?
Harzliche Grüße aus http://www.annerschbarrich.de
Tom