Formularelement in Interaktion mit MYSQL

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Benutzeravatar
kratzer54847
Mitglied
Beiträge: 3065
Registriert: 20.01.2003 16:34
Wohnort: Düsseldorf/Hannover/Berlin
Kontaktdaten:

Formularelement in Interaktion mit MYSQL

Beitrag von kratzer54847 »

hoi hoi,

ich habe mir eine Liste 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 :

$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
Knowledge Base | MOD Datenbank | Boardsuche | HTML | PHP

Durch die richtige Verwendung dieser Links können viele Fragen beantwortet werden ;-)
Dennis63
Ehemaliges Teammitglied
Beiträge: 2597
Registriert: 02.07.2003 18:46

Beitrag von Dennis63 »

Und wie lautet Deine Frage?


Grüße
Dennis
Benutzeravatar
kratzer54847
Mitglied
Beiträge: 3065
Registriert: 20.01.2003 16:34
Wohnort: Düsseldorf/Hannover/Berlin
Kontaktdaten:

Beitrag von kratzer54847 »

ich habe ja eine Liste gebaut,die dem User alle beobachteten Themen anzeigt. Dieser Liste möchte ich nun um die Funktion erweitern,dass der User per Checkbox einzelne Themen markieren und über einen Button löschen die Themen aus seiner Watched Topics List löschen kann,sodas diese nicht mehr beobachtet werden

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.

mfg Johny
Knowledge Base | MOD Datenbank | Boardsuche | HTML | PHP

Durch die richtige Verwendung dieser Links können viele Fragen beantwortet werden ;-)
Dennis63
Ehemaliges Teammitglied
Beiträge: 2597
Registriert: 02.07.2003 18:46

Beitrag von Dennis63 »

Ah.. ok...

Also das Formular ruft ja eine Seite auf. Dieses muss eine PHP-Seitesein.

Hier hast Du dann in den Variablen die Werte. Also wenn die Checkbox "cb19" heißt, dann hasst Du nachher entweder in cb19 "checked" drinne oder nicht.
So mußt Du dann alle Variablen abfragen.

Du kannst auch zum Testen echo "cb19: ".ch19."<br>"; schreiben.

Wenn Fehler kommen, mache mal folgendes davor:

Code: Alles auswählen

$mode = ((isset($_POST["mode"])) ? $_POST["mode"] :  ((isset($_GET["mode"])) ? $_GET["mode"] :  ""));
(nur statt "mode" halt cb19 schreiben...

--

Dann kannst Du mit IF Abfragen die SQL-Anweisungen erstellen.

Grüße
Dennis
Benutzeravatar
kratzer54847
Mitglied
Beiträge: 3065
Registriert: 20.01.2003 16:34
Wohnort: Düsseldorf/Hannover/Berlin
Kontaktdaten:

Beitrag von kratzer54847 »

hoi hoi,

wie meinst du das genau?

Angenommen ich schreibe in der tpl:

Code: Alles auswählen

<input type="checkbox" name="unwatch">
lautet dann der Code in der topics_unwatch.php(in meinem Fall) im Grundsatz so?

Code: Alles auswählen

$unwatch = ((isset($_POST["unwatch"])) ? $_POST["unwatch"] : ((isset($_GET["unwatch"])) ? $_GET["unwatch"] : "")); 

if ($unwatch)
{
$sql = "{Anweisung_zum_Löschen}"
}
else
{
exit;
}
Knowledge Base | MOD Datenbank | Boardsuche | HTML | PHP

Durch die richtige Verwendung dieser Links können viele Fragen beantwortet werden ;-)
Benutzeravatar
kratzer54847
Mitglied
Beiträge: 3065
Registriert: 20.01.2003 16:34
Wohnort: Düsseldorf/Hannover/Berlin
Kontaktdaten:

Beitrag von kratzer54847 »

hoi nochmal,

ich hab das jetzt mal versucht,es will aber nicht.

hier ist der Formularteil in der TPL:

Code: Alles auswählen

<form name="watchedtopics" action="unwatch.php">
<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="unwatch" value="unwatch"></td>
</tr>
<!-- END watched -->
<tr>
<td colspan="6" align="center"><input type="submit" name="unwatch" value="Unwatch Marked" /></td>
</tr>
</table>
</form>
die unwatch.php sieht folgendermaßen aus:

Code: Alles auswählen

//
// Get Userdata
//
$userdata = session_pagestart($user_ip, PAGE_INDEX);
init_userprefs($userdata);

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

if ( $option )
{
$sql = "DELETE *
	  FROM phpbb_topics_watch
	  WHERE user_id = $userdata['user_id']
	  AND $option = true";
mysql_query($sql);
}
wenn ich das so mache,kommt im folgenden eine leere Seite mit der URL:

Code: Alles auswählen

http://localhost/phpbb2/unwatch.php?unwatch=unwatch&unwatch=unwatch&unwatch=unwatch&unwatch=unwatch&unwatch=Unwatch+Marked
hm ich weiß nicht mehr weiter,wer weiß rat?
Knowledge Base | MOD Datenbank | Boardsuche | HTML | PHP

Durch die richtige Verwendung dieser Links können viele Fragen beantwortet werden ;-)
Dennis63
Ehemaliges Teammitglied
Beiträge: 2597
Registriert: 02.07.2003 18:46

Beitrag von Dennis63 »

if ($unwatch == 'checked')
{
$sql = "{Anweisung_zum_Löschen}"
}
else
{
// exit;
}
Evtl solltes Du das Blaue mit einfügen:

Grüße
Dennis
Benutzeravatar
kratzer54847
Mitglied
Beiträge: 3065
Registriert: 20.01.2003 16:34
Wohnort: Düsseldorf/Hannover/Berlin
Kontaktdaten:

Beitrag von kratzer54847 »

Hoi Dennis,

ich habe den Code nun so abgeändert:

Code: Alles auswählen

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

if ( $unwatch == 'checked' )
{
$sql = "DELETE *
	  FROM phpbb_topics_watch
	  WHERE user_id = $userdata['user_id']
	  AND $unwatch = true";
mysql_query($sql);
}
else
{
// exit;
}
geht aber nicht...die URL lautet jetzt:

Code: Alles auswählen

http://localhost/phpbb2/unwatch.php?unwatch=unwatch&unwatch=Unwatch+Marked
Knowledge Base | MOD Datenbank | Boardsuche | HTML | PHP

Durch die richtige Verwendung dieser Links können viele Fragen beantwortet werden ;-)
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Beitrag von Pyramide »

Woher willst du denn wissen, welche Checkboxen angeklickt wurden, wenn diese alle nur den Wert "unwatch" haben? Am besten packst du da den Primärschlüssel der zu löschenden Tabelle rein. Und der Name sollte auf [] enden, dann macht PHP da automatisch ein Array draus. z.B:

Code: Alles auswählen

<input type="checkbox" name="unwatch[]" value="{watched.ID}">
(und dann mit [php:foreach] auswerten oder mit [php:implode] direkt ´ne WHERE id IN(...) SQL-Anweisung bauen.
Benutzeravatar
kratzer54847
Mitglied
Beiträge: 3065
Registriert: 20.01.2003 16:34
Wohnort: Düsseldorf/Hannover/Berlin
Kontaktdaten:

Beitrag von kratzer54847 »

hoi nochmal,

ich habe es jetzt mit deinem Codeteil versucht und möchte nun zum Test eine einfache Kontrollstruktur schreiben,die mit lediglich anzeigt,wie viele Checkboxen ausgewählt wurden(zum Test)

Code: Alles auswählen

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

foreach ( $unwatch == true )
{
echo "Unwatched";
}
damit soll zunächst mal für jede ausgewählte Checkbox ein "Unwatched" angezeigt werdne oder verstehe ich die Funktion falsch?
Knowledge Base | MOD Datenbank | Boardsuche | HTML | PHP

Durch die richtige Verwendung dieser Links können viele Fragen beantwortet werden ;-)
Antworten

Zurück zu „Coding & Technik“