HONDA: Hidden Field --> Update von MySQL DB

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);

?>

  1. 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

    --
    L-Andre @ gmx.de
    1. Hallo André,

      er spukt gar nichts aus.

      Wie wenn er den Befehl ignorieren würde.
      Honda

      1. 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

      2. 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

        1. Hallo Ilja,

          zit: "enthält die variable $ID nicht sichtbare zeichen wie ein leerzeichen ?"

          Wie kann ich das feststellen?

          Honda

          1. 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

            1. 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";

              1. echo $begrueszung;
                echo $inhalt;
                echo "$verabschiedung $name";

              2. 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.

                falls magic_quotes_gpc()

                $_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

                --
                Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                Nur selber lernen macht schlau
                1. 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

                  --
                  Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                  Nur selber lernen macht schlau
                  1. 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

                    --
                    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                    Nur selber lernen macht schlau
                    1. 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

                      --
                      /voodoo.css:
                      #GeorgeWBush { position:absolute; bottom:-6ft; }
                      1. 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

                        1. 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

                          --
                          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                          Nur selber lernen macht schlau
                2. 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";

                  1. 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

                    --
                    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                    Nur selber lernen macht schlau
  2. 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

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau