Seite 1 von 1

Programmierung einer Auswahlliste

Verfasst: 14.03.2006 14:18
von reinsle
Hy Forum,

wir haben bei uns im Forum jetzt eine Mail, die im Profil auswählbar ist, ob man diese haben möchte oder nicht. Jetzt möchte ich das so umbauen, das eine sog. Category auswählbar ist, also welche Art von Mails man haben möchte. Dies sollte wenn möglich eine Liste mit mehrfachauswahl sein, bei der der User auswählen kann, was er haben möchte. Der Inhalt dieser Liste sollte von einer Datenbank geladen werden, und die Auswahlen sollten in der Usertabelle gespeichert werden.

Hat von euch sowas jemand schon gemacht?? ICh muss dazu sagen, ich bin in HTML jetzt ned der fitteste.

Danke euch.

Verfasst: 14.03.2006 19:44
von S2B
  • Der HTML-Tag für Auswahllisten heißt <select>, die einzelnen Optionen <option>
  • Für die Auswahlmöglichkeiten legst du eine Tabelle mit 2 Spalten an: ID und Auswahlmöglichkeit (in meinem Beispiel-Code id und name). Diese wird ausgelesen und in ein <select> eingetragen:

    Code: Alles auswählen

    $sql = 'SELECT * FROM ' . MAIL_CAT_TABLE;
    if (!$result = $db->sql_query($sql))
    {
      message_die(GENERAL_ERROR, 'Could not get mail categories', '', __LINE__, __FILE__, $sql);
    }
    $select = '<select name="user_mail_cat'>';
    while ($cat = $db->sql_fetchrow($result))
    {
      // Ist die ID des aktuellen Eintrags die vom Benutzer ausgewählte?
      // wenn ja => als Standard auswählen...
      $selected = ($userdata['user_mail_cat'] == $cat['id']) ? ' selected="selected"' : '';
      $select .= '<option value="' . $cat['id'] . '"' . $selected . '>' . $cat['name'] . '</option>';
    }
    $db->sql_freeresult($result);
    $select .= '</select>';
    Natürlich müssen die Variablen und Spaltennamen aus der DB entsprechend angepasst werden.
  • Diese $select-Variable kannst du dann ganz normal per Template-System ausgeben lassen.

Verfasst: 15.03.2006 20:06
von reinsle
Hy,

oki, das sollte eigentlich nicht zu schwer sein. Das probier ich die Tage mal aus.

Hast du evtl. noch ne Idee, wie ich das Codiere, das ich das in der Usertabelle speichern kann?? Ich mein jetzt, ich hab ne ID-Spalte. Diese Spalte wird per auto_increment hochgezählt. Gibts da ne Funktion, wie ich das basteln kann?

Verfasst: 15.03.2006 20:12
von Dr.Death
Ich benutze das immer in einer definierten Funktion: ( Beispiel Generieren einer Dropdownbox aller User )

Code: Alles auswählen

function get_userliste() //Alle User in ein DropDown Filed packen
{
	global $lang, $db;
	
	
	//Vorbereiten der DropDown Box
    $select_user = array();
	$select_user = "<select name='selected_user'>";
	$select_user .= '<option value=\'0\'>'.$lang['cp_select_user'].'</option>';
	
    //Alle User IDs und Usernamen in $result packen
    $sql  = "SELECT user_id, username 
             FROM " . USERS_TABLE . "  
			 WHERE user_id != '-1' 
             ORDER BY username";
    $result = $db->sql_query($sql);
    
    //Solange im $result etwas vorhanden ist, den Namen ins Array $select_user packen
	while($row = $db->sql_fetchrow($result)) 
	{
		if ($selected_user == $row['user_id']) {
			$status = 'selected';
		}
		else
		{
			$status = '';
		}
		
		$select_user .= '<option value="' . $row['user_id'] . '" ' . $status . '>' . $row['username'] . '</option>';
	}
	
	$select_user .= '</select>';
	
    // Variable $result leeren
    $db->sql_freeresult($result);
      
    // Ergebnis Array zurückgeben an Anforderer
    return $select_user;
}

Verfasst: 15.03.2006 20:17
von reinsle
@dr.death:

Ja, oki, aber der baut mir ja wieder die eine Auswahlliste. Mein Gedankenproblem ist jetzt eigentlich, wie ich mir die Info speichere, welche Auswahlmöglichkeiten sind den vom User ausgewählt worden, damit ich sie wieder anzeigen kann, bzw. wenn ich die Mails sende, zu sehen, welche sind den eigentlich gewünscht?

Danke euch.

Verfasst: 15.03.2006 21:27
von AceVentura
Ein MOD Request durch die Hintertür gestellt ;)
Aber Respekt, dass du es selber versuchen willst.

Vorweg: haste dir den Newsletter MOD einmal angesehen ? Ich glaube der könnte was für dich sein.

Ansonsten bleibt dir nur die Möglichkeit alles in der Usertabelle zu speichern.
Hast du dich mal mit den SQL Befehlen vertraut gemacht ? (und damit, wie sie in phpBB ausgeführt werden)

@Doc:
warum nimmst du hier ein Array und keinen String?

Code: Alles auswählen

$select_user = array();

Verfasst: 16.03.2006 08:37
von reinsle
Hy AceVentura,

Also ich bin fit in SQL. bin selber Softwareentwickler und Programmiere RichtClients in Java. Wie gesagt, mit HTML bin ich leder ned so firm, hab aber schon einiges in PHPBB rumgebastelt, einige eigene MODS auch geschrieben.

Nein, den ModNewsletter kenn ich ned, schau ihn mir aber noch an, vielleicht kann ich den so umstricken, wie ichs brauch. Danke dir für deinen Tipp.

Verfasst: 16.03.2006 09:26
von Dr.Death
AceVentura hat geschrieben: @Doc:
warum nimmst du hier ein Array und keinen String?

Code: Alles auswählen

$select_user = array();
Tja, gute Frage :-)

Wer weiß was mich da geritten hat.

Der Code stammt aus meinem, nicht veröffentlichten, Kurs Planer MOD.

Verfasst: 16.03.2006 16:04
von S2B
Für die Profileigenschaft schmeiße ich einfach mal diesen Link in die Runde: MOD:modify_profile. :wink: