pragmaMx Support Forum

pragmaMx => Zusatzmodule => Thema gestartet von: Juliet am 21 August 2004, 20:15:15

Titel: User_Fotoalbum - Anzeige der vorhandenen Bilderanzahl im Profil?
Beitrag von: Juliet am 21 August 2004, 20:15:15
Hallo zusammen,

für mein Problem eine passende und aussagekräftige Überschrift zu finden war schon schwer genug, also erklär ich das ganze nochmal genau:

ich hätte gerne, dass im Userprofil angezeigt wird, ob ein User Fotos hochgeladen hat oder nicht.  Sinn der Sache ist es nicht 1000 User-Fotoalben durchklicken zu müssen, sondern direkt im Profil sehehn zu können, dass es zu diesem User Bilder gibt.

User hat X Fotos hochgeladen.

Das ganze soll dann entsprechend verlinkt sein, was ja weniger das Problem ist. Mein Problem ist es eher die Anzahl der Bilder auszulesen, da diese ja nicht in der Datenbank festgehalten werden.

Hat jemand eventuell eine Idee?

Liebe Grüße,
Juliet
Titel: Re: User_Fotoalbum - Anzeige der vorhandenen Bilderanzahl im Profil?
Beitrag von: jubilee am 22 August 2004, 11:08:40
Hallo !
Hab schon soetwas mal für einen block gebastelt.
Gebe dir hier mal die entsprechenden Funktionen:
Auslesen der Dateien eines Verzeichnisses:
 
Zitatfunction getDirList ($dirName)
{
global $uname;
   $d = dir($dirName); //Handle zum Verzeichnislesen öffnen
   while($entry = $d->read()) //Einträge aus den Verzeichnis auslesen
   {
      if ($entry != "." && $entry != "..") // Wenn Eintrag NICHT . oder ..
      {
         if (is_dir($dirName."/".$entry))
         {
            //wenn Eintrag ein Directory-Name, tue nichts
         }
         else
         {
            $files[]=$entry; //wenn Filename dann ins array schreiben
         }
      }
   }
   $d->close(); //Handle wieder schließen
   return $files; //array zurückgeben
}
 
Diese Funktion in das Script einbauen, wo es gebraucht wird.
Aufruf geschieht mit  $bilder= getDirList("modules/User_Fotoalbum/album");
Damit bekommst Du im array   $bilder alle hochgeladenen Bilder der User.
Jetzt müssen wir noch nach User aufschlüsseln:
 
Zitatfunction countUserbilder($bilder)
{
$ergebnis=0;
if (count($bilder))
{
$imglist = array();
while (list($k,$v) = each($files))
{
if (preg_match("#($uname)([0-9]+)(\.gif|\.jpe?g|\.png)$#i", $v, $matches))
{
$imglist[] = $matches[0];
}
}
$ergebnis= (count ($imglist));
}
return $ergebnis;
}
Auch diese Funktion einbauen.
Aufruf mit   $ergebnis=countUserBilder($bilder);
In der Variablen $ergebnis sollten dann die enstprechende Anzahl an Bilder stehen.
Wichtig ist das der Aufrufparameter in der Klammer dem Rückgabewert aus der ersten Funktion entspricht.
MfG
jubilee

[Editiert am 22/8/2004 von jubilee]

[Editiert am 23/8/2004 von jubilee]
Titel: Re: User_Fotoalbum - Anzeige der vorhandenen Bilderanzahl im Profil?
Beitrag von: Juliet am 22 August 2004, 12:22:58
Hey Jubilee und herzlichen Dank für die Hilfe.

Hab alles entsprechend eingebaut. Das array $bilder  liest auch wunderbar die files des Verzeichnisses  aus. Allerdings bekomm ich als Ergebnis zu
  $ergebnis=countUserBilder($bilder)  IMMER 0 raus, auch wenn der User Bilder hochgeladen hat.
Habe schon einiges versucht, aber das Ergebnis ist und bleibt immer null.

Eventuell mach ich ja irgendwo was im Aufruf falsch, daher hier mal meine Ausgabe:
 echo "<tr valign=\"top\"><td bgcolor=\"$bgcolor2\"><b>Bilder/Fotos:</b></td><td bgcolor=\"$bgcolor3\">".$ergebnis=countUserBilder($bilder)." Bilder/Fotos im Fotoalbum</td></tr>\n";  

Den Rest habe ich eins zu eins übernommen. Erst die erste Funktion, dann den Aufruf dieser durch $bilder= getDirList("modules/User_Fotoalbum/album");  - die zweite Funktion und dann den Aufruf dieser wie oben stehend.

Irgendwie komm ich da nicht weiter...
Titel: Re: User_Fotoalbum - Anzeige der vorhandenen Bilderanzahl im Profil?
Beitrag von: jubilee am 22 August 2004, 12:26:41
Hallo !
Sorry, kleine Unterlassungssünde von mir:
Die Funktion countUserBilder();
bitte so anpassen :
alt :
 
Zitatfunction countUserbilder($bilder)
{
$ergebnis=0;
 
neu :
 
Zitatfunction countUserbilder($bilder)
{
global $uname;
$ergebnis=0;
Und : es muss natürlich in der Variablen $uname auch der username drin stehen.
Dann sollte es gehen .
MfG
jubilee
Titel: Re: User_Fotoalbum - Anzeige der vorhandenen Bilderanzahl im Profil?
Beitrag von: Juliet am 22 August 2004, 12:37:18
Ja, da könnte dann der Fehler liegen. Ich arbeite mit der view.php aus der Userinfo.
Hier wird der Username ja mit $uinfo['uname'] ausgegeben.
Daher bleibt die Variable $uname leer.
Ich habe es aber auch bereits versucht mit der Variable $uinfo['uname'] versucht.
Wenn ich Deine Zeile nehme:
 if (preg_match('#('".$uname."')([0-9]?1)(\.gif|\.jpe?g|\.png)$#i', $v, $matches))

oder eben
 if (preg_match('#('".$uinfo['uname']."')([0-9]?1)(\.gif|\.jpe?g|\.png)$#i', $v, $matches))
kommt er mir aber immer mir einem Parse Error in dieser Zeile, welchen ich beim besten Willen NICHT finden kann!
Titel: Re: User_Fotoalbum - Anzeige der vorhandenen Bilderanzahl im Profil?
Beitrag von: jubilee am 22 August 2004, 12:46:23
Hallo !
Wenn du die Variable $uinfo['uname'] verwenden möchtest, muss dieser auch in dem globals der funktion drinstehen (dann nicht   global $uname; sonder   global $uinfo['uname'];
deweiteren versuche das dann mal so :
if (preg_match('#('".$uinfo[uname]."')([0-9]?1)(\.gif|\.jpe?g|\.png)$#i', $v, $matches))
OHNE die Hochkommatas innerhalb der eckigen Klammern.
Wenn das nicht geht, alles wieder zurück und VOR dem Aufruf der zweiten Funktion   $uname=$uinfo['uname']; zuweisen.
MfG
jubilee
Titel: Re: User_Fotoalbum - Anzeige der vorhandenen Bilderanzahl im Profil?
Beitrag von: Juliet am 22 August 2004, 12:57:32
Die erste Variante ging nicht, daher hab ich dann die zweite angewendet. Zumindest ist nun die Variable $uname gesetzt.

Allerdings hab ich weiterhin das Parse Error Problem in Zeile:
if (preg_match('#('".$uname."')([0-9]?1)(\.gif|\.jpe?g|\.png)$#i', $v, $matches))

Nehm ich die Hochstriche web - also so:
if (preg_match('#(".$uname.")([0-9]?1)(\.gif|\.jpe?g|\.png)$#i', $v, $matches))
bekomme ich keine Fehlermeldung mehr, aber das zurückgegebene Ergebnis der Bilder ist WIEDER nur 0.
Titel: Re: User_Fotoalbum - Anzeige der vorhandenen Bilderanzahl im Profil?
Beitrag von: jubilee am 22 August 2004, 20:28:12
Hallo !
Hat wahrscheinlich etwas mit dem Maskieren von Sonderzeichen zu tun ($). Die Regex bringen mich nochmal um den Verstand.
Änder die Regex mal so ab:
 
Zitatif (preg_match("#(".$uname.")([0-9]?1)(\.gif|\.jpe?g|\.png)$#i", $v, $matches));
Also gar keine einfachen Hochkommata mehr
Damit sollte die Regex dann funktionieren.
MfG
jubilee

[Editiert am 22/8/2004 von jubilee]
Titel: Re: User_Fotoalbum - Anzeige der vorhandenen Bilderanzahl im Profil?
Beitrag von: Juliet am 22 August 2004, 21:09:24
Also:

Keine Fehlermeldung mehr - aber - es werden nun alle Bilder die in diesem Verzeichnis liegen gezählt und ausgegeben. Nicht nur die, die der User hochgeladen hat. Die Variable $uname enthält den Usernamen, wie gewollt.

*grübel*
Titel: Re: User_Fotoalbum - Anzeige der vorhandenen Bilderanzahl im Profil?
Beitrag von: jubilee am 23 August 2004, 08:48:49
Ja, ja. ich sags doch.
Diese Regex sind nicht ganz einfach.
Hier mal der geänderte Abschnitt zum korrigieren.
alt:
 
Zitatwhile (list($k,$v) = each($bilder))
{

if (preg_match('#('".$uname."')([0-9]?1)(\.gif|\.jpe?g|\.png)$#i', $v, $matches))
{
$imglist[] = $matches;
}
}

 
neu:
Zitatwhile (list($k,$v) = each($files))
{
if (preg_match("#($uname)([0-9]?1)(\.gif|\.jpe?g|\.png)$#i", $v, $matches))
{
$imglist[] = $matches[0];
}
}
 
So, ich hoffe nun funkts endlich ;)
MfG
jubilee

[Editiert am 23/8/2004 von jubilee]

[Editiert am 23/8/2004 von jubilee]
Titel: Re: User_Fotoalbum - Anzeige der vorhandenen Bilderanzahl im Profil?
Beitrag von: Juliet am 23 August 2004, 09:56:08
WUNDERBAR - es klappt ...  aber noch eine kleine Korrektur, welche Du im Eifer des Gefechts  wohl übersehen hast:

while (list($k,$v) = each($files)): streiche $files - setze $bilder

DANKE SCHÖN Jubilee!!!  :D  
Titel: Re: User_Fotoalbum - Anzeige der vorhandenen Bilderanzahl im Profil?
Beitrag von: Juliet am 23 August 2004, 12:47:39
Noch eine kleine Entdeckung hinterher:

Wenn ich nun die Userinfo aufrufe bekomme ich die Bilder richtig ausgezählt.
Ruft der User selber die Your_Account auf bekommt er wieder alle Files des Verzeichnisses ausgezählt.
habe schon versucht die globale 4uname zu übergeben und zu deifinieren. Hat beides nicht funktioniert ...
Titel: Re: User_Fotoalbum - Anzeige der vorhandenen Bilderanzahl im Profil?
Beitrag von: jubilee am 23 August 2004, 13:43:57
Hmmm...
Nochmal eine Änderung in den regex:
alt:
 
Zitatif (preg_match("#($uname)([0-9] +)(\.gif|\.jpe?g|\.png)$#i", $v, $matches))
neu:
 
Zitatif (preg_match("#($uname)([0-9] ?1)(\.gif|\.jpe?g|\.png)$#i", $v, $matches))
Jetzt zum Fehler :
 
ZitatWenn ich nun die Userinfo aufrufe bekomme ich die Bilder richtig ausgezählt.
Ruft der User selber die Your_Account auf bekommt er wieder alle Files des Verzeichnisses ausgezählt.
 
Es könnte damit zusammenhängen, das im 2. Fall die $uname gar nicht gefüllt ist ?!
ansonsten nochmal zum ausprobieren :
 
Zitatif (preg_match("#($userinfo[uname])([0-9] ?1)(\.gif|\.jpe?g|\.png)$#i", $v, $matches))
Wenn der Effekt hier derselbe ist, liegt es an der Variable, die falsch gefüllt ist.
MfG
jubilee
Titel: Re: User_Fotoalbum - Anzeige der vorhandenen Bilderanzahl im Profil?
Beitrag von: jubilee am 23 August 2004, 14:01:11
So nochmal !
Hier eine kombinierte Funktion die die beiden einzelfunktionen ersetzen können sollte ;)
 
Zitatfunction getUserPhotos ($dirName, $uname)
{
   $d = dir($dirName); //Handle zum Verzeichnislesen öffnen
   while($entry = $d->read()) //Einträge aus den Verzeichnis auslesen
   {
      if ($entry != "." && $entry != "..") // Wenn Eintrag NICHT . oder ..
      {
         if (is_dir($dirName."/".$entry))
         {
            //wenn Eintrag ein Directory-Name, tue nichts
         }
         else
         {
            $files[]=$entry; //wenn Filename dann ins array schreiben
         }
      }
   }
   $d->close(); //Handle wieder schließen
   if (count($files)) // Hat der User Files gespeichert
   {
      $imglist = array();
      while (list($k,$v) = each($files))
      {
         if (preg_match("#($uname)([0-9]?1)(\.gif|\.jpe?g|\.png)$#i", $v, $matches)) // Images nach Usernamen auswerten
         {
            $imglist[] = $matches[0];
         }
      }
   }
   if ((count($imglist))>0)
   {
      $ergebnis=(count($imglist));
   }
   else
   {
      $ergebnis=0;
   }
return $ergebnis; //Daten zurückgeben
}

 
Aufruf via : $ergebnis=getUserPhotos("modules/User_Fotoalbum/album", $uinfo['uname']);
Imn der Variablen $ergebnis sollte dann die Anzahl der Bildes des Users stehen.
MfG
jubilee
Titel: Re: User_Fotoalbum - Anzeige der vorhandenen Bilderanzahl im Profil?
Beitrag von: Juliet am 23 August 2004, 14:47:46
Sooo - Dein vorletztes Post mal außer Acht gelassen, denn das klappte beides nicht.

Habe dann die function aus dem letzten post eingebaut., Ging zunächst nicht.
Habe aber dann einfach vor der Funktion $dirName und $uname definiert und als Ausgabe NUR  $ergebnis=getUserPhotos genommen. geht prima.

Dann hab ich noch die zeile
 if (preg_match("#($uname)([0-9]?1)(\.gif|\.jpe?g|\.png)$#i", $v, $matches))
wieder auf
 if (preg_match("#($uname)([0-9]+)(\.gif|\.jpe?g|\.png)$#i", $v, $matches))
geändert.
Hatte ein User nämlich 3 bilder hochgeladen, dann aber wieder das erste Bild gelöscht wurden 0 angezeigt, obwohl 2 da waren. mit dem + statt ?1 funktioniert es jetzt... auch in der Your_Account.

Titel: Re: User_Fotoalbum - Anzeige der vorhandenen Bilderanzahl im Profil?
Beitrag von: jubilee am 23 August 2004, 15:16:33
Hallo !
 
ZitatGing zunächst nicht.
Habe aber dann einfach vor der Funktion $dirName und $uname definiert und als Ausgabe NUR $ergebnis=getUserPhotos genommen
Normalerweise sollte das aber nicht so sein. dafür ja die Aufrufparameter der Funktion ($dirName, $uname)
Wenn Du beim Aufruf jetzt 2 Parameter angibst ('modules/User_Fotoalbum/album', $uinfo['uname']) werden die ja in die entsprechenden Aufrufvariablen gemappt und stehen der Funktion dann als interne Variablen mit diesem Namen zur Verfügung.
Evt. musst Du aber den Pfad anpassen, evt. musst Du ab dem Verzeichnis rechen von wo diese Script/Funktion gestartet wird.

 
ZitatHatte ein User nämlich 3 bilder hochgeladen, dann aber wieder das erste Bild gelöscht wurden 0 angezeigt, obwohl 2 da waren. mit dem + statt ?1 funktionirt
Upsss.....
Kommt es vor, das die Dateinamen auch 2 Nummern hinter dem Usernamen haben? Denn das ist der Unterschied
([0-9]?1) sagt aus Wertebereich 0-9 einstellig
([0-9]+) sagt aus Wertebereich 0-9 anzahl beliebig.
MfG
jubilee

Titel: Re: User_Fotoalbum - Anzeige der vorhandenen Bilderanzahl im Profil?
Beitrag von: Juliet am 23 August 2004, 16:26:22
 
ZitatNormalerweise sollte das aber nicht so sein. dafür ja die Aufrufparameter der Funktion ($dirName, $uname)
Wenn ich aber $ergebnis=getUserPhotos ('modules/User_Fotoalbum/album', $uinfo['uname']) nehme bekomm ich erneut einen Parse Error in der Zeile!

 
ZitatKommt es vor, das die Dateinamen auch 2 Nummern hinter dem Usernamen haben?
Nein, da die User maximal 3 bilder hochladen dürfen kommt es nicht zu einer zweistelligen bilderzahl.

edit:
mein Fehler - den Parse Error hab ich selber verbockt. Ok, Ausgabe sieht nun so aus:
 $ergebnis=getUserPhotos('modules/User_Fotoalbum/album', $uinfo['uname'])  
$uname muß trotzdem weiterhin zusätzlich definiert werden ... ansonsten klappt es nun in Your_Account und Userinfo.

Danke jubilee - super Einsatz von Dir. Ganz herlichen Dank von dieser Stelle aus :)

[Editiert am 23/8/2004 von Juliet]
Titel: Re: User_Fotoalbum - Anzeige der vorhandenen Bilderanzahl im Profil?
Beitrag von: jubilee am 23 August 2004, 21:40:01
Hallo !
 
Zitat$uname muß trotzdem weiterhin zusätzlich definiert werden ... ansonsten klappt es nun in Your_Account und Userinfo.
 
Irgendwas stimmt da noch nicht. Normalerweise kannst Du die Funktion einfach mit den  erforderlichen Parametern aufrufen. dabei müssen die nocht nicht mal als Variable übergeben werden. du kannst Die auch beide als String übergeben--->
getUserPhotos("Hier/Der/Pfad", "HierDerUsername");
oder über Variablen (die natürlich mit den ensprechenden Werten gefülltsein müssen
--->
getUserPhotos($pfad, $username);
...
Mfg
jubilee
Titel: Re: User_Fotoalbum - Anzeige der vorhandenen Bilderanzahl im Profil?
Beitrag von: Juliet am 28 August 2004, 11:26:10
*mööööp*

Hab heute einen kleinen Bug in der Bildabfrage für das Profil gefunden.

Ein User namens teddy hat vor einiger Zeit 2 Bilder hochgeladen.
Gestern nun meldet sich ein User namens eddy an und bekommt 2 Bilder im Profil angezeigt, hat aber keine hochgeladen. Es werden logischerweise auch keine angezeigt.

Kann man da irgendwas machen, dass er nicht andere Usernamen zerflückt ... sondern genau DEN Usernamen sucht?
Titel: Re: User_Fotoalbum - Anzeige der vorhandenen Bilderanzahl im Profil?
Beitrag von: jubilee am 28 August 2004, 12:37:17
Ja, das geht.
Anstatt von   preg_match zum auswerten der Regex, musst Du mal mit
  preg_match_all versuchen.
Das sollte dann besser funktionieren.
MfG
jubilee
Titel: Re: User_Fotoalbum - Anzeige der vorhandenen Bilderanzahl im Profil?
Beitrag von: Juliet am 28 August 2004, 16:57:37
Nein,

funktioniert leider nicht. eddy hat immer noch 2 Bilder - die er nicht hat ;)
Titel: Re: User_Fotoalbum - Anzeige der vorhandenen Bilderanzahl im Profil?
Beitrag von: Andi am 28 August 2004, 18:46:12
Moin :)

so wie der regex im Moment ist, sucht er den Usernamen innerhalb des Bildnamens, egal wo er vorkommt.

#($uname)([0-9]?1)(\.gif|\.jpe?g|\.png)$#i

Beim Usernamen Eddy findet er auch Teddy, kabeltreddy, usw....

Es muss ein Anker gesetzt werden, der nur matchen lässt, wenn der Bildname komplett dem Usernamen (und der Rest hintendran) entspricht.

#^($uname)([0-9]?1)(\.gif|\.jpe?g|\.png)$#i

Das ^ Zeichen bewirkt, dass nur vom Anfang des Suchstrings gematcht wird.
Titel: Re: User_Fotoalbum - Anzeige der vorhandenen Bilderanzahl im Profil?
Beitrag von: Juliet am 29 August 2004, 11:18:22
Wunderbar - herzlichen Dank. Klappt jetzt  :D  
Titel: Re: User_Fotoalbum - Anzeige der vorhandenen Bilderanzahl im Profil?
Beitrag von: jubilee am 29 August 2004, 13:25:03
Hallo !
Ja, hätt ich mir ja Denken können, das ich da bei der Regex noch etwas vergesse.
Aber POSIX war auch noch nie mein Ding :.
MfG
jubilee