Neuigkeiten:

still alive...

Hauptmenü

[Feature angenommen] Userfeld Typ Checkbox

Begonnen von bassquaeler, 13. Januar 2008, 16:26:43

Vorheriges Thema - Nächstes Thema

bassquaeler

Hi,
bin gerade dabei Checkboxen als Typ für die Userfelder einzubauen. Allerdings steh ich grad mal wieder aufm Schlauch. Ich hab keine Ahnung wie bzw wo bei i|Friends die Post-Variablen aufbereitet und übergeben werden. Da bei den Usereingaben für ein Userfeld mit mehreren Checkboxen ein Array übergeben wird muss ich den ja vorher \"Imploden\".
Bitte um einen kurzen Tip. Danke!
 - Editiert von k00ni am 26.01.2008, 20:02 -

k00ni

Welche Post-Variablen meinst du? Ich glaube, da wird auch noch eine Anpassung im Backend + die Einführung einer neuen Userfeldart nötig (Tabelle).
 
Grüße

bassquaeler

Den Userfeld Typ \"Checkbox\" hab ich in der Config hinzugefügt und alle Dateien zum Editieren und Anzeigen erweitert. Wird im Prinzip richtig angezeigt, allerdings bring ich den Array der vom Formular gepostet wird nicht in die Tabelle \"friends_user_profile_userfields_user\" in das Feld \"value\".  Ich müsst ja erstmal ein
 

if(is_array($_POST[\'checkboxname\'])) $checkboxname=implode(\', \',$_POST[\'checkboxname\']);

 
 
auf den Array anwenden bevor er in die Tabelle schreiben wird. Aber wie gesagt, ich bekomms net hin weil ich den Aufbau der Funktionen irgendwie noch net ganz check. Und ich hab auch keine Ahnung wie ich mich verständlicher Ausdrücken soll.  :ugly:

k00ni

Komm denn Fehlermeldungen? Poste mal die Stelle, wo du die Behandlung des Arrays hast.

bassquaeler

Ne, da kommt keine Fehlermeldung weil ich den Array ja noch nicht behandel. Weiß ja net wo ich den Code dazu einfügen sollte. Und die Funktion die die Formular Werte normal in die Tabelle insertiert schreibt einfach garkeinen Wert in dieses Feld rein. Is ja klar, ein Array wird ja nicht ins Tabellenfeld geschrieben, deswegen müsst ich den erstmal zu nem durch Kommata getrennten Wert implodieren.

k00ni

Also hier wird die Aktualisierung vorgenommen:
 

 0)
{
while ($A_friends_all_userfields = mysql_fetch_array ($Res_friends_all_userfields))
{
if ($_POST [$A_friends_all_userfields [\'id\']] != \'\')
   change_userfield_value ($A_friends_all_userfields [\'id\'], $_POST [$A_friends_all_userfields [\'id\']], $user [\'id\']);
}
header (\'Location: change_extended_user_details.php\');
} ?>

 
 
Zu finden, in der Datei: change_extended_user_details.php.
Der Ablauf ist folgender:
Es werden alle Userfelder ausgewählt, die vorhanden sind. Dann werden diese Schritt für Schritt durchgegangen. Dann wird geprüft, ob eine übergebene Variable, welche die ID des aktuellen Userfeldes, wo die Schleife gerade ist, ungleich 0 ist. Wenn ja, dann wird der Wert dieser in die Tabelle eingetragen.
Und hier musst du ansetzen. Schreibe in die if-Anweisung einfach eine Abfrage, ob der Inhalt ein Array ist. Wenn ja, tu dies mit dem Checkboxen, wenn nicht, dann könnte er es so machen, wie bisher.
Ich muss gestehen, dass ich lange Zeit (3 Monate) schon nicht mehr in Friends gewerkelt habe und deshalb auch nicht gleich alles weiß.

bassquaeler

Also tatsächlich ist das genau die Stelle an der ich schonmal versucht hab anzusetzen. Irgendwie komm ich trotzdem nicht weiter. Da steht ja überall $A_friends_all_userfields [\'id\']. Irgendwie is das zu abstrakt für mich grad. Da merkt man halt dass ich kein richtiger Programmierer bin. Bei puser wars damals einfacher das umzusetzen, da hatte jede Variable nen eigenen Namen.  /uploads/emoticons/icon_e_surprised.gif.a8707b3f35a569cb4cfe563fc72ef78d.gif\" alt=\":-o\" />

k00ni

Also die ID hat folgenden Zweck. Ich lasse in der Übersicht alle Userfelder nicht per Namen identifizieren und ausgeben, sondern anhand der ID. Schaue dir mal die HTML-Ausgabe der Seite an, wo man die Userfelder als User ändern kann. Wie heißen die einzelnen Userfelder?
Da dürfte überall eine Zahl stehen. Und damit kann ich diese Felder besser durchlaufen. Ich könnte auch den Namen nehmen, aber ich hatte damals halt die ID genommen. Was hast du denn bisher probiert? Poste ruhig mal Code. So ohne Code ist mir das auch zu abstrakt und meine Glaskugel ist derzeit in der Reinigung.

bassquaeler

Uff, jetz hab ichs endlich. Wenn man noch gewisse Kleinigkeiten übersieht sucht man sich immer nen Wolf. *g*
Datei: change_extended_user_details.php

// Ermittelt alle Userfelder.
$Res_friends_all_userfields = get_all_userfields ($user [\'id\']);
// Aktualisiert ein Userfeld mit dem Wert eines Users.
if ($_POST [\'I_update\'] == 1 AND mysql_num_rows ($Res_friends_all_userfields) > 0)
{
while ($A_friends_all_userfields = mysql_fetch_array ($Res_friends_all_userfields))
{
   if(is_array($_POST [$A_friends_all_userfields [\'id\']])) {
     change_userfield_value ($A_friends_all_userfields [\'id\'], implode(\', \',$_POST [$A_friends_all_userfields [\'id\']]), $user [\'id\']);
     }
elseif ($_POST [$A_friends_all_userfields [\'id\']] != \'\')
   change_userfield_value ($A_friends_all_userfields [\'id\'], $_POST [$A_friends_all_userfields [\'id\']], $user [\'id\']);
}
header (\'Location: change_extended_user_details.php\');
}

 
 
Datei: change_extended_user_details.tpl

         // Userfeld ist vom Typ Checkbox
      if ($A_friends_all_userfields [\'type\'] == \'checkbox\')
      {
         $A_friends_userfield_values = explode (\',\', $A_friends_all_userfields[\'content\']);
         for ($I_counter=0; $I_counter \'.$A_friends_userfield_values [$I_counter].\'\';
            }
            else
            {
              echo    \' \'.$A_friends_userfield_values [$I_counter].\'\';
            }
         }
      }

 
 
Und eben noch die Config und paar Kleinigkeiten geändert, aber es geht... danke.  /uploads/emoticons/icon_e_biggrin.gif.1a84f5257b36e14b36d04985314f877f.gif\" alt=\":-D\" />

k00ni

Kein Problem. Danke für das Posten des Quellcodes.

all your base are belong to us / Discord