oli: Hilfe bei einem Problem

Hallo,

ich habe ein sehr kurioses Problem, und komm einfach nicht auf die Lösung.

Auf folgendes habe ich es reduziert:

while($row=mysqli_fetch_array($result) ){
  ... DB Text ...
  <form action='adresse.php' method='post'>
  <input type='hidden' name='id' value='".$row[id]."'/>
  <input type='submit' name='was' value='entfernen'">
  </form>
}

Also Quasi die Liste der Datenbank, mit jeweils einem Löschenbutton daneben.

(Sieht in etwa so aus:

Text 1| entfernen
Text 2| entfernen
Text 3| entfernen
...

)

Witziger Weiße ist aber die id sobald ich sie bei "adresse.php" auslese immer die id des Datensatzes nachher, nur wenn nur noch ein Datensatz übrig ist, stimmt die id.

Was für Ursachen kann das haben?

Ich muss hinzufügen, es hat schonmal funktioniert, aber nachdem ich einige unwiederrufliche Layout veränderungen vorgenommen habe, spinnts.

Bitte um Hilfe

lg
Oli

  1. Hello,

    while($row = mysqli_fetch_array($result) )

    {

    ... DB Text ...
      <form action='adresse.php' method='post'>

    <input type='hidden' name='id' value='".$row['id']."'/>

    Meintest Du $row['id'] oder meintest Du $id oder $row[$id]?

    Da Du leider die wichtigsten Zeilen weggeschnitten hast, kann man ja nicht sehen, woher der von Dir gemeinte Wert wirklich kommt und was in 'id' drinsteht.

    Liebe Grüße aus Syburg bei Dortmund

    Tom vom Berg

    --
    Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
    1. while($row=mysqli_fetch_array($result) ){
        ... DB Text ...
        <form action='adresse.php' method='post'>
        <input type='hidden' name='id' value='".$row[id]."'/>
        <input type='submit' name='was' value='entfernen'">
        </form>
      }

      so wie es da steht: $row[id]

      das ist einfach die id von dem datensatz, der jeweils auslesen wird.

      Aber es geht mir darum, dass wenn ich die "id" im "<form>" ausgebe stimmt sie, sobald ich aber auf absenden gehe, und sie ganz oben auf der "adresse.php" wieder auslese ist sie falsch, und ich versteh einfach nicht woran das liegen kann.

      1. Hello,

        while($row=mysqli_fetch_array($result) ){
          ... DB Text ...
          <form action='adresse.php' method='post'>
          <input type='hidden' name='id' value='".$row[id]."'/>
          <input type='submit' name='was' value='entfernen'">
          </form>
        }

        so wie es da steht: $row[id]

        Ist denn 'id' nun eine Konstante, die Du in PHP festgelegt hast, oder ist 'id' der Spaltenbezeichner in Deiner Tabelle, mit dessen Hilfe Du auf das zugehörige Element des assoziativen Arrays $row zugreifen willst?

        das ist einfach die id von dem datensatz, der jeweils auslesen wird.

        Und wie liest Du diese ID im Postrequest aus?
        Das kann man leider nicht erkennen aus Deinen hier publizierten Zeilen.
        Aber das schrieb ich ja schon!

        Also einen Versuch hast Du noch, alle relavanten Teile des Scriptes zu posten und außerdem Deinen Fehler (die fehlerträchtige Stelle) in

        <input type='hidden' name='id' value='".$row[id]."'/>

        zu beseitigen.

        Liebe Grüße aus Syburg bei Dortmund

        Tom vom Berg

        --
        Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de
        1. ok, wies aussieht reden wir aneinander vorbei, darum versuche ich mich nochmal auszudrücken:

          $row ist die Tabelle aus der Datenbank, welche ich in der while schleife auslese.

          [id] ist die Spalte id, also die id Nummer.

          Aber um das geht es ja nicht, die Nummer stimmt ja, wenn ich sie im "<form>" ausgebe, da steht dann 16, oder 17, oder was auch immer im value.

          Aber sobald ich das <form> Abschicke, und wieder auslese, stimmt sie nicht mehr. (ich lese sie einfach mit $id=htmlspecialchars($_POST[id]) aus).

          Ich weis nicht ob ich mich so schlecht ausdrücke, oder ob du meinen Programmierstil nicht verstehst, aber falls du es immer noch nicht nachvollziehen kannst, Antworte bitte nicht mehr, vll kann mir ja jemand anderes weiter helfen.

          trotzdem danke

          1. Es Funktioniert!

            Ich hab es neu geschrieben, und es funktioniert merkwürdiger Weiße ...

            Danke jedenfalls, und das hier kann man löschen ...

            1. echo $begrüßung;

              [...] es funktioniert merkwürdiger Weiße ...

              Es schreibt sich entweder "merkwürdigerweise" als Adverb oder "auf merkwürdige Weise" als Adjektiv-Substantiv-Kombination.

              echo "$verabschiedung $name";

          2. echo $begrüßung;

            ok, wies aussieht reden wir aneinander vorbei, darum versuche ich mich nochmal auszudrücken:
            $row ist die Tabelle aus der Datenbank, welche ich in der while schleife auslese.

            Nein, in $row stehen die Daten eines Datensatzes der Ergebnismenge. Die kann aus einer, keiner oder mehreren Tabellen gewonnen werden, aber das ist unerheblich.

            [id] ist die Spalte id, also die id Nummer.

            Wenn id der Spaltenname ist, dann ist das ein String, der wie alle Strings in '' oder "" zu notieren ist. id ohne Anführungszeichen ist ein Konstantenname, der von PHP stillschweigend in einen String konvertiert wird, falls keine solche Konstante existiert. Und stillschweigend, solange man das error_reporting nicht um die für das Entwickeln wichtigen E_NOTICE-Meldungen beraubt, was aber PHPs Voreinstellung ist.
            Siehe Why is $foo[bar] wrong?

            Aber um das geht es ja nicht, die Nummer stimmt ja, wenn ich sie im "<form>" ausgebe, da steht dann 16, oder 17, oder was auch immer im value.
            Aber sobald ich das <form> Abschicke, und wieder auslese, stimmt sie nicht mehr. (ich lese sie einfach mit $id=htmlspecialchars($_POST[id]) aus).

            htmlspecialchars() ist keine Funktion zum Auslesen, also zur Eingabedatenbehandlung, sondern eine für HTML-gerechtes Ausgeben, also Ausgabedatenbehandlung. Du verwendest sie also in einem falschen Kontext.

            Nochmal konkret gefragt: Wie sieht der HTML-Text für zwei solcher Datensätze aus? Wie sieht das aus, was beim Server nach dem Absenden des Formulars ankommt? $_POST ist bereits von PHP aufbereitet. Vielleicht wird dir dein Fehler deutlicher bewusst, wenn du das Formular mal mit GET absendest und dabei in die URL schaust.

            echo "$verabschiedung $name";