1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Values von Select speichern****?

Dieses Thema im Forum "PHP" wurde erstellt von PatrikB1985, 8. Mai 2012.

  1. PatrikB1985

    PatrikB1985 Grünschnabel

    Guten Tag liebe Community!
    Habe da ein Problem! Ich will Values von einer Select-Auswahl in der Datenbank speichern! Habe im Value eine Zahl angegeben******

    PHP:
    1.  
    2. $position1 = "<select name=\"position1\">" . "<optgroup label=\"Position 1\">" . "<option value=\"0\">" . "Keine Gruppe" . "</option>" . "<option value=\"1\">" . "Berufsfeuerwehr" . "</option>"
    3.              . "<option value=\"2\">" . "Rettungsdienst" . "</option>" . "<option value=\"3\">" . "Feuerwehr und Rettungsdienst" . "</option>" . "</optgroup>" . "</select>";
    4.  
    PHP:
    1.  
    2. while ($row = mysql_fetch_object($ergebnis)) {
    3.     echo "<tr>" . "<td>" . $row->Benutzer . "</td>" . "<td>" . $position1 . "</td>" . "<td>" . $position2 . "</td>" . "<td>" . $position3 . "</td>" . "<td>" . $position4 . "</td>"
    4.          . "<td>" . $freigabe . "</td>" . "</tr>";
    5. }
    6.  
    PHP:
    1.  
    2. if(isset($_POST['Benutzergruppenuebersicht'])) {
    3.     $position_1 = $_POST["position1"];
    4.     $position_2 = $_POST["position2"];
    5.     $position_3 = $_POST["position3"];
    6.     $position_4 = $_POST["position4"];
    7.     $freigabe_0 = $_POST["freigabe"];
    8. } else {
    9.     echo "Daten nicht gesendet!";
    10. }
    11.  
    PHP:
    1.  
    2. $eintrag = "UPDATE login SET P1='$position1', P2='$position2', P3='$position3', P4='$position4', Freigabe='$freigabe' ORDER BY Benutzer";
    3.  
    Was mache ich Falsch? Es werden die Values nicht übergeben!
    Bitte um einen Tip
    LG Patrik
  2. Maniac

    Maniac Erfahrenes Mitglied

    Schau dir mal deine Variablen an, du übergibst die String wo du deine Select-Auswahl speicherst ($position1). Die Felder allerdings stehen in "$position_1".
    Wie sieht deine Tabelle aus? Denn ein Update der Tabelle mit einem Order By scheint mir hier fehl am Platz. Sind das allgemeine Datensätze oder warum differenzierst du nicht nach einem Feld?
  3. tombe

    tombe Premium-User

    Sehe ich das richtig das es mehrere SELECT-Listen gibt (position1, position2, ...). Nur zur Sicherheit, haben diese immer einen anderen Namen?

    Wird der IF-Block "Benutzergruppenuebersicht" durchlaufen?

    Was wird ausgegeben wenn du dir den Inhalt von $eintrag mit echo am Bildschirm ausgibst?
  4. PatrikB1985

    PatrikB1985 Grünschnabel

    Ich habe eine Tabelle wo alle registrierten Mitglieder der Homepage aufgelistet werden und will ihnen Rechte verteilen!

    Brauche ich also nicht die Variablen Position1 abfangen****?
  5. PatrikB1985

    PatrikB1985 Grünschnabel

    Punkt 1:
    Die SELECT-Listen haben alle 5 einen anderen Namen!

    Punkt 2:
    Keine Ahnung!

    Punkt 3:
    Er gibt das aus: Positionen wurden vergeben!UPDATE login SET P1='0', P2='0', P3='0', P4='0', Freigabe='0' ORDER BY Benutzer
  6. Maniac

    Maniac Erfahrenes Mitglied

    In "$position1" steht doch ein String, dein gesamtes Select-HTML!
    In "$position_1" steht dein Wert nach dem absenden des Formulares, da es ein Kopie von "$_POST['position1']" ist.

    Wenn du ein UPDATE auf deiner Tabelle ohne einer expliziten Zuweisung/Kennung (zb ID der Zeile) durchführst, werden ausnahmslos alle Datensätze upgedatet. Also irgendwo solltest du referenzieren welcher User das ist.
  7. PatrikB1985

    PatrikB1985 Grünschnabel

    Punkt 1:
    Muss ich die Werte der SELECT-Listen mit mysql_real_escape_string(); abfangen?

    Punkt 2:
    Ich gebe jedem User eine ID die von MySQL per Auto Increment ausgegeben wird!


    Lösung:
    PHP:
    1.  
    2. while ($row = mysql_fetch_object($ergebnis)) {
    3.     $id = $row["ID"];
    4.     echo "<tr>" . "<td>" . $row->Benutzer[$id] . "</td>" . "<td>" . $row->P1[$id] . "</td>" . "<td>" . $row->P2[$id] . "</td>" . "<td>" . $row->P3[$id] . "</td>" . "<td>" . $row->P4[$id] . "</td>"
    5.          . "<td>" . $freigabe[$id] . "</td>" . "</tr>";
    6. }
    7. } else {
    8.     echo "<p />";
    9.     echo "<tr>" . "<td class=\"Problem\" colspan=\"6\">" . "<text class=\"Text1\">" . "Keine Benutzer gefunden!" . "</text>" . "</td>" . "</tr>";
    10. }
    11.  
    Kann man das so machen****?
    Zuletzt bearbeitet: 8. Mai 2012
  8. Maniac

    Maniac Erfahrenes Mitglied

    zu Punkt 1: nein, kannst du, musst du aber nicht, da die Werte nicht direkt vom User eingegeben werden.

    zu Punkt 2:
    Ich denke du gehst diese Sache ganz falsch an, du musst natürlich beim speichern/updaten der Tabelle auch schauen welchen User du gerade bearbeitet hast. In deinem Code ist einiges nicht ersichtlich.
  9. PatrikB1985

    PatrikB1985 Grünschnabel

    Kannst du mir da einen Tip geben? Ich lese mir gerade nebenbei ein PHP Buch durch, aber verstehen das nicht mit der ID******
  10. tombe

    tombe Premium-User

    Wie Maniac schon schreibt, die SQL-Anweisung ist sicher nicht korrekt. So in etwa solltest du die Update-Anweisung auf einen bestimmten Benutzer begrenzen.
    PHP:
    1.  
    2. $eintrag = "UPDATE login SET P1='$position1', P2='$position2', P3='$position3', P4='$position4', Freigabe='$freigabe' WHERE Benutzer = 'IRGEND_EIN_WERT'";
    Außerdem kommt doch hoffentlich auch noch irgendwo die Anweisung wo die SQL-Anweisung auch ausgeführt wird (mysql_query).

    Nochmal die Frage zu dem IF-Block. Wenn du nicht weißt ob er ausgeführt wird, dann mache doch einfach mal ein
    PHP:
    1. echo "Ich bin hier!";
    mit rein.
    Denn wenn der Block nicht durchlaufen wird, hilft es nichts wenn der enthaltene Code stimmt.

    Code (Text):
    1. ID | Nachname
    2. 01 | Müller
    3. 02 | Huber
    4. 03 | Schmid
    Code (SQL):
    1. UPDATE tabelle SET Nachname = 'Schmidt' WHERE ID = '03'
    So eine ID-Spalte hast du ja wohl auch. Mit diesem Wert musst du dann die SQL-Anweisung auf den entsprechenden Benutzer beschränken.

    Wenn du nur schreibst:

    Code (SQL):
    1. UPDATE tabelle SET Nachname = 'Schmidt'
    Gibt es nachher nur noch Datensaätze mit dem Nachnamen Schmidt (und bei dir ist es im Moment so!).
    Zuletzt bearbeitet: 8. Mai 2012
  11. Maniac

    Maniac Erfahrenes Mitglied

    Du hast zb eine Usertabelle wo die ID autincrement ist. Weitere Felder dieser Tabelle könnten zb. Namen, Email, PW usw... sein.
    Jetzt machst du eine weitere Tabelle mit den Rechten.
    Diese kann so aufgebaut werden:

    ID, UserId, Recht1, Recht2, usw...

    ID = autoincrement,
    UserID = Die ID welche zum referenzieren verwendet wird. sprich "User.ID == rechte.UserID"
    Hier stellst du die Beziehung zwischen den 2 Tabellen her.

    Die Rechte denk ich mal kannst du dir selbst zusammenreimen.
  12. PatrikB1985

    PatrikB1985 Grünschnabel

    Ich habe alles in einer Tabelle!
    ID, Benutzer, Passwort, Email usw.
    auch P1 = Position1 (bestimmte Benutzergruppen)!

    Ich weiss nur nicht wie ich auf die ID der User zugreife, da ich mir viele User anzeigen lasse!

    Kann ich das nicht mit dem Radio-Button und der Value= $row->ID machen?
    Zuletzt bearbeitet: 8. Mai 2012
  13. Yaslaw

    Yaslaw n/a Moderator

    Du siehst vor lauter Fehler nicht was wo wie läuft.
    Du musst mal debuggen um zu verstehen was da wirklich abgeht (das machen auch Profis!)
    PHP:
    1. [url="http://www.tutorials.de/content/214-php-mysql-debug-queries.html"][PHP] [MySQL] Debug Queries[/URL]
  14. PatrikB1985

    PatrikB1985 Grünschnabel

    @Yaslaw
    Ich habe euch nicht den kompletten Code geschickt! Sicher habe ich auch Debug Codes eingebaut! Diese geben mir aber keine Fehler mehr aus!
  15. Yaslaw

    Yaslaw n/a Moderator

    Dann versetze die var_dumps() dorthin wo du Probleme vermutest.
    Wenn du nicht weiss t ob ein if greift, dann ist das der Ort wo man vorher und nachher var_dump setzt:
    Code (PHP):
    1. var_dump('vor dem if()', $value);
    2. if($value == 'foobar'){
    3.     var_dump('im if()');
    4. }
    Nachtrag:
    Auch HTML-Code und SQL-Syntax kann man schön und lesbar formatieren. Es hilft einiges beid er Fehlersuche wenn man den Code besser lesen kann.

    a) den SQL-Teil in PHP formatieren: Heredoc-Syntax
    b) Die Complex (Curly) Syntax anwenden um die Strings zusammenzusetzen. Das reduziert das Chaos mit öffnenden und schliessenden Anführungszeichen und den Verbindungs-Punkten
    Code (PHP):
    1. $eintrag = <<<SQL
    2.     UPDATE login
    3.     SET
    4.         P1='{$position1}',
    5.         P2='{$position2}',
    6.         P3='{$position3}',
    7.         P4='{$position4}',
    8.         Freigabe='{$freigabe}'
    9.     ORDER BY Benutzer;
    10. SQL;
    11.  
    12. ...
    13.  
    14. $position1 = <<<HTML
    15. <select name="position1">
    16.     <optgroup label="Position 1">
    17.         <option value="0">Keine Gruppe</option>
    18.         <option value="1">Berufsfeuerwehr</option>
    19.         <option value="2">Rettungsdienst</option>
    20.         <option value="3">Feuerwehr und Rettungsdienst</option>
    21.     </optgroup>
    22. </select>
    23. HTML;
    24.  
    25. ...
    26.  
    27. while ($row = mysql_fetch_object($ergebnis)) {
    28.     echo <<<HTML
    29.     <tr>
    30.         <td>{$row->Benutzer}</td>
    31.         <td>{$position1}</td>
    32.         <td>{$position2}</td>
    33.         <td>{$position3}</td>
    34.         <td>{$position4}</td>
    35.         <td>{$freigabe}</td>
    36.     </tr>
    37. HTML;
    38. }

Diese Seite empfehlen