Formularelement in Interaktion mit MYSQL

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Formularelement in Interaktion mit MYSQL

    hoi hoi,

    ich habe mir eine Liste für mein Forum gebaut,die mir alle Themen anzeigt,die ein User beobachtet.

    So weit so gut,funktioniert auch alles.

    Jetzt soll man aber bei jedem angezeigten Thema eine Checkbox auswählen können und dann per Klick auf einen entsprechenden Button die markierten Themen nicht mehr beobachten.

    also es soll quasi in etwa solch eine Query zustande kommen :

    Code:
    $sql = "DELETE *
    FROM phpbb_topics_watch
    WHERE w.user_id = $userdata['user_id']
    AND w.topic_id = $markedtopics";


    wobei $markedtopics den Zustand der jeweiligen zum Thema gehörenden Checkbox ausliest,wenn die Checkbox aktiviert ist soll das Thema natürlich aus der Tabelle phpbb_topics_watch entfernt werden sofern u.user_id gleich der ID des eingeloggten Users ist

    Meine Frage lautet,wie ich erreichen kann,dass erfasst wird,welches Thema markiert ist und wie ich weiterhin realisieren kann,dass über den klick auf den Button "Unwatch marked" die markierten Themen für den jeweiligen User aus der Datenbanktabelle gelöscht werden.

    ich habe mir dazu zunächst ein Formular gebaut,das beim Absenden eine Datei unwatch.php aufruft.

    Wie kann ich dieser unwatch.php eine Funktion beifügen,die erkennt,welche Ckeckboxen aktiviert wurden?

    Mein erster Ansatz ist,dass ich über einen Array arbeite:

    Code:

    <td><input type="checkbox" name="unwatch[]" value="{watched.WTOPICID}"></td>



    und dann in der unwatch.php folgendes festlege:

    Code:
    $unwatch = ( isset($HTTP_POST_VARS['unwatch']) ) ? ( ($HTTP_POST_VARS['unwatch']) ? TRUE : 0 ) : 0;

    foreach ( $unwatch = true )
    {
    echo "Unwatched";
    }


    sodass ich überhaupt erstmal testweise über die Ausgabe von "Unwatched" sehe,ob die Formulareingaben überhaupt erfasst werden.

    Werden sie aber nicht. Wo liegt der Fehler?

  • #2
    mach mal
    PHP-Code:
    echo '<pre>';
    print_r($HTTP_POST_VARS);
    echo 
    '</pre>'
    dann siehst du, wo du anpacken musst.

    Kommentar


    • #3
      wenn ich das so mache,kommt auf der Seite dann:

      Array
      (
      )

      Kommentar


      • #4
        dann ist was faul bei deiner Form, oder du hast gar nicht per POST gesendet. Wie sieht denn die Form-Deklaration bei dir aus? Ich meine die Zeile mit <form ... >

        Kommentar


        • #5
          hoi,

          Code:
          <form name="watchedtopics" action="ucp_unwatch.php">

          Kommentar


          • #6
            Original geschrieben von Johny
            hoi,

            Code:
            <form name="watchedtopics" action="ucp_unwatch.php">
            mach so:
            Code:
            <form name="watchedtopics" action="ucp_unwatch.php" method="post">

            Kommentar


            • #7
              hat funktioniert,es kommt:

              Array
              (
              [x] => Array
              (
              [0] => on
              [1] => on
              )

              [unwatched] => Unwatch Marked
              )

              doch wie verknüpfe ich das nun mit einer SQL-Abfrage?

              ich bräuchte nur die jeweiligen Topic-IDs der markierten Einträge:

              Code:
              <table width="100 %">
              <tr>
              <td colspan="2" class="row2">
              <span class="gensmall">Title</span>
              </td>
              <td class="row2">
              <span class="gensmall">Views</span>
              </td>
              <td class="row2">
              <span class="gensmall">Comments</span>
              </td>
              <td class="row2">
              <span class="gensmall">Forum</span>
              </td>
              <td class="row2">
              <span class="gensmall">Last Post</span>
              </td>
              <td class="row2">
              <span class="gensmall">Mark</span>
              </td>
              </tr>
              <!-- BEGIN watched --> 
              <tr> 
              <td width="25">
              <img src="{watched.WTOPICFOLDER}">
              </td> 
              <td>
              <span class="gensmall">
              <a href="viewtopic.php?t={watched.WTOPICID}" class="nav">{watched.WTOPICTITLE}</a>
              </span>
              </td> 
              <td>
              <span class="gensmall">{watched.WTOPICVIEWS}</span>
              </td> 
              <td>
              <span class="gensmall">{watched.WTOPICREPLIES}</span>
              </td> 
              <td>
              <span class="gensmall">
              <a href="viewforum.php?f={watched.WTOPICFORUMID}" class="nav">{watched.WTOPICFORUM}</a>
              </span>
              </td> 
              <td>
              <span class="gensmall">
              <a href="viewtopic.php?p={watched.WTOPICLASTPOSTID}">
              <img src="templates/subSilver/images/icon_latest_reply.gif" border="0">
              </a>
              <a href="profile.php?mode=viewprofile&u=watched.WTOPICLASTPOSTAUTHORID}" class="gensmall"">
              {watched.WTOPICLASTPOSTAUTHOR}
              </a>
              <br>
              {watched.WTOPICLASTPOSTTIME}
              </span>
              </td> 
              <td>
              <input type="checkbox" name="x[]">
              </td>
              </tr>
              <!-- END watched -->
              <tr>
              <td colspan="6" align="center">
              <input type="submit" name="unwatched" value="Unwatch Marked" />
              </td>
              </tr>
              </table>
              hier habe ich mal den Template-HTML-Code.

              die Liste wird über einen Array erstellt
              Zuletzt geändert von Johny; 14.07.2004, 13:20.

              Kommentar


              • #8
                Hm... wenn du die Checkboxs so aufbaust, woher
                weisst du dann welche gesetzt wurde.
                Du musst jedem Checkbox einen Wert (etwa topic_id)
                geben. Dann bekommst du das Array x bzw.
                $HTTP_POSTVARS['x']somit kannste mal durchlaufen
                und den Wert in deinem SQL-String einbauen,
                oder besser mit implode() dann als Liste für
                WHERE IN ($Liste) übergeben.

                BTW: Bitte alle deiner bisherigen Posting editieren (Button "ändern") und die Zeilen so umbrechen, dass man beim Lesen nicht scrollen muss. Danke.
                Zuletzt geändert von asp2php; 14.07.2004, 13:16.

                Kommentar


                • #9
                  hoi,

                  hab die postings geändert.

                  Das Problem ist ja,dass die Liste aus einer SQL-Abfrage entsthet und sich so die Topic-IDs immer ändern.

                  Kommentar


                  • #10
                    Original geschrieben von Johny
                    hoi,

                    hab die postings geändert.
                    Danke .

                    Das Problem ist ja,dass die Liste aus einer SQL-Abfrage entsthet und sich so die Topic-IDs immer ändern.
                    sollen sie auch, denn nur somit kannst du gezielt löschen, ist doch dein Ziel (gewesen), oder ?

                    Kommentar


                    • #11
                      so auch das hat funktioniert.
                      die Topic_Ids werden jetzt mit angezeigt.

                      wie muss jetzt die SQL-Abfrage lauten?

                      DELETE * FROM phpbb_topics_watch
                      WHERE user_id = $userdata['user_id']
                      AND topic_id = {ausgelesene Topic-IDS des Arrays)

                      doch wie bekomme ich nun die Topic-IDs da raus?

                      Kommentar


                      • #12
                        einfach mit implode arbeiten:
                        PHP-Code:
                        $sql "DELETE * FROM phpbb_topics_watch
                        WHERE user_id = "
                        .$userdata['user_id']." AND topic_id IN (".implode(",",$HTTP_POST_VARS['x']).")";
                        mysql_query ... 

                        Kommentar


                        • #13
                          hm jetzt bekomme ich:

                          Code:
                          Warning: Bad arguments to implode() in c:\apache\htdocs\phpbb2\ucp_unwatch.php on line 27
                          der Code:

                          Code:
                          $sql = "DELETE *
                          	FROM phpbb_topics_watch
                          	WHERE user_id = ".$userdata['user_id']."
                          	AND topic_id IN (".implode(",",$HTTP_POST_VARS['x']).")";
                          mysql_query( $sql );

                          Kommentar


                          • #14
                            vorher $HTTP_POST_VARS['x'] auf Existenz -> isset() und Gültigkeit -> is_array prüfen. Aber das ist Grundlage, das muss man nicht vorsagen

                            BTW: nimmt den * hinter DELETE raus, ist überflüssig.

                            Kommentar


                            • #15
                              ok hab hier mal was versucht:

                              Code:
                              $marked = $HTTP_POST_VARS['{watched.WTOPICID}[]']; 
                              
                              if (isset ($marked))
                              {
                              $sql = "DELETE * FROM phpbb_topics_watch WHERE user_id = $userid
                              	AND topic_id IN (".implode(",",$marked).")";
                              mysql_query( $sql );
                              }
                              else
                              {
                              echo "No Topics Marked!";
                              }
                              funzt aber nicht

                              Kommentar

                              Lädt...
                              X