Gruppen-Thread: Programmierer

Hallo,
"mein" Seite ist die letzte also Werbung-4U.
Ich wollte sie erst zu einer allround Seite ausbauen aber so wie es aussieht werd ich es zu einer Mailtauschseite ausbauen.
Aber Banner, Textlinks und co sollen in einen Rotator kommen und gegen einige Lose dann für einen Tag, eine Woche, einen Monat oder ein Jahr in den Rotator kommen.

Leider hat die Sache auch den Hacken das nicht jeder alle Angebot sehen kann.
Deshalb werde ich versuchen als extra aktionen die Teilnahme bei den Projekten zuvergüten ;)
Somit kann ich nicht nur Erfolg verbuchen sondern auch die Seiten mit ihren neuen Usern ;)

Natürlich ist es nicht pflicht und damit es nicht darum geht mitzumachen ist die Vergütung gleich hoch.

Aber an guten Ideen wäre ich immer erfreut :)
 
@Tyrell: Nunja, aus deinem Code kann ich nichts wirkliches erkennen, außer jeder Menge Unterstriche. Der Compiler würde das vermutlich fressen, aber wirklich erkennen kann man daraus nichts ;)
Ich möchte dich also um weiteren Code bitten :)
Das war das Ergebnis meines bisher noch nicht fertiggestellten Code-Beautifiers. Bei Java kann man fast alle Bezeichner durch ________Unterstriche ausdrücken. Hab aber momentan weder Zeit noch Muße, das Teil zu vollenden.
Eigentlich war das auch nur ein Joke, da ich keine Quellcodes aus irgendwelchen Projekten posten werde.

Aber vllt. kann ich irgendwas zusammenkratzen....


Signalhandler in C, den ich mir irgendwann mal zusammengebaut habe.
Code:
#include <studio.h>
#include <unistd.h>
#include <signal.h>
#include <errno.h>
#include <stdlib.h>
void main () {
  void sighandler (int sig); /* prototype declaration */
    if (signal(SIGUSR1, sighandler)==SIG_ERR){ /* setup the handler */
      perror (“signal“);
      exit(1);
    }
    
     int i=0;
     while(1){ /* infinity loop */
       printf(“%i“, ++i); /* print i */
       printf(“\n“);
       fflush(stdout);
       sleep(1); / *wait a second */
     }
}

void sighandler(int sig){ /* signal handler */
  printf(“Gehandled!\n“); /* funny output when handled */
  fflush(stdout);
  sleep(3); /* wait for 3 seconds */
}

Code in irgendeiner merkwürdigen Assemblersprache, um eine Taylor-Entwicklung von der natürlichen Exponentialfunktion (e^x) bis zum 5. Summenglied zu machen.
Code:
Label Anweisung Kommentar
100: LOAD 1000, R0 X einlesen
101: SET R1, 0 Ergebnis der Summe bis zum aktuellen Durchlauf
102: SET R2, 0 Aktueller Durchlauf
103: SET R3, 5 Maximale Anzahl Durchläufe
104: SET Rt1, 0 1. Register für Zwischenergebnisse //Potenz
105: SET Rt2, 0 2. Register für Zwischenergebnisse //Fakultät
106: JUMP 200 In das Potenzier-Unterprogramm springen
107: JUMP 300 In das Fakultät-Unterprogramm springen
108: DIV Rt1, Rt2 Den Bruch bilden
109: ADD R1, Rt1 Ergebnis auf das Zwischenergebnis addieren
110: JUMPEQUAL R2, R3, 400 Wenn max. Anz. Schleifendurchl. erreicht, dann Ende
111: INCR R2 Anz. Schleifendurchläufe inkrementieren
112: JUMP 106 Schleife wieder von vorne beginnen
... ... ...
200: SET Rt3, 0 Laufvariable für Potenzieren auf 0 initialisieren
201: SET Rt1, 1 Ergebnis der Potenzierung auf 1 setzen (für x^0)
202: JUMPEQUAL Rt3, R2, 107 Falls Rt3=akt. Durchlauf, springe zurück ins Hauptprogramm
203: MULT Rt1, R0 Eine Multiplikation der Potenz durchführen
204: INCR Rt3 Schleifenzähler erhöhen
205: JUMP 202 Wieder an den Schleifenanfang springen
... ... ...
300: SET Rt3, 0 Laufvariable für Fakultät auf 0 initialisieren
301: SET Rt2, 1 Ergebnis für Fakultät auf 1 setzen (0!)
302: JUMPEQUAL Rt3, R2, 108 Wenn fertig, springe zurück ins Hauptprogramm
303: INCR Rt3 Laufvariable inkrementieren
304: MUL Rt2, Rt3 Laufvariable mit Zwischenergebnis multiplizieren
305: JUMP 302 An den Schleifenanfang springen
... ... ...
400: READY Programmende
 
entschuldige, wenn ich kurz und vor schmerzen losbrülle ...

1. den quelltext wird dir keiner klauen, glaub mir.
2. XHTML und CSS heisst nicht, dass du deine tabellen mit css verschönst ...

Nun die Tabellen und einige Wörter(Überschriften) nutzen CSS.
Klar ist noch nicht viel aber man sollte wissen das ich von C++ erst vor kurzem zu PHP und CSS sowie zu XHTML umgestiegen bin.
Falls du denkst das ich deshalb eine Designer HP machen kann dann muss ich dich enttäuschen.

Die Seite ist außerdem noch im Aufbau wie ich auch schon geschrieben hab.
 
Nun die Tabellen und einige Wörter(Überschriften) nutzen CSS.
Klar ist noch nicht viel aber man sollte wissen das ich von C++ erst vor kurzem zu PHP und CSS sowie zu XHTML umgestiegen bin.
Falls du denkst das ich deshalb eine Designer HP machen kann dann muss ich dich enttäuschen.

also:

1. du hast gesagt: die seite wäre mit xhtml und css aufgebaut, das ist schlichtweg nicht wahr und zeugt entweder davon, dass du nicht weisst, wovon du redest oder dass du uns für dumm verkaufen willst. ich unterstelle dir einfach mal ersteres ;)

2. entweder eine seite ist als xhtml aufgebaut oder nicht ... "noch nicht viel" gibt es da nicht. man kann auch nicht nur ein bisschen tot sein...

3. was hat eine "Designer HP" mit dem thema zu tun? nach meinem verständnis ist das design der eine part einer seite und die beschreibung der andere. natürlich musst du nicht beides können ... ich kann auch nur den einen. falls du hier css-design meinstest bzw. sagen wolltest, dann kommen wir damit zurück zu meiner behauptung in punkt 1 :)

entschuldige wenn das hart klingt, das ist nicht persönlich gegen dich gemeint, sondern allgemein gegen die unmengen von leuten, die sich hier im forum hinstellen und behaupten etwas zu können, von dem sie nur den namen halbwegs richtig schreiben können. ... sorry, diesmal musstest du eben dran glauben ;) solche leute machen den wirklichen "könnern" das leben schwer und die preise kaputt. ich mag ja ein fachidiot sein und muss mit meinem wissen mein geld verdienen, ich gebe auch dieses wissen gern weiter und wo ich sehe dass sich der einsatz lohnt lege ich umso mehr herzblut rein. aber ein bisschen bescheidenheit und ein bisschen respekt verlange ich einfach für das, was ich mir in über 10 jahren erarbeiten musste. hätte ich einen "normalen" beruf gelernt, würde man mich nach 10 jahren meister nennen und meine erfahrung schätzen. da ich das nicht habe, muss ich mich tagtäglich vor scriptkiddies rechtfertigen und mich von 13-18-jährigen belehren lassen ...

aber wozu schreib ich das mal wieder ... bringt doch eh nix :(
 
Hallo,
also ich hab die Seite mit dem FF Plugin durchlaufen lassen und hatte daher keine Probleme.
Leider muss ich vermerken das ich einen iframe(kleines viereck) eingebaut hab und deshalb einiges nicht richtig funken kann.
Ich werd die Seite wohl nochmal überarbeiten!
 
@T-VIRUS: Du kannst (solltest) die Seite gerne überarbeiten, das fließt dann aber nicht mit in deine Bewertung ein. Es ist nicht Sinn und Zweck der Sache, hier aufgepushten Code zu zeigen, um in die Gruppe zu kommen, man muss generell coden können. (so zumindest meine Auffassung)

Zum Rest sag ich nachher was ;)
 
Na dann will ich auch mal :)
  • Welche Programmiersprachen beherrschst du ? Wie gut ?
    • PHP/MYSQL: Fortgeschritten
    • Java: Fortgeschritten
    • Natural: Fortgeschritten
    • Pascal: Ist zwar ewig her, aber dürfte noch was vorhanden sein
    • (X)HTML/CSS: mehr als Fortgeschritten
    • JS: Was man halt so braucht
  • Was ist dein Fachgebiet ?
    • Ich glaub so etwas habe ich nicht. Ich mach das, was gerade anfällt.
  • Du kannst ruhig etwas von dir erzählen, z.B. wie du mit der Programmierung angefangen hast.
    • Angefangen habe ich mit ganz einfachen HTML-Seiten. In PHP bin ich eingestiegen als ich ein Formular per Mail verschicken wollte.
    • Pascal hatte ich zu Schulzeiten im Leistungskurs.
    • Java, HTML, CSS und JS programmiere ich jetzt auf Arbeit
  • Referenzen:
    • Hier mein (X)HTML/CSS-Stil
    • PHP-Code suche ich daheim zusammen.
    • Was Java betrifft, kann ich nicht von Stil reden, da wir auf Arbeit an zu vielen Stadards gebunden sind.

edit: hmm... ich weiß nicht so recht, was ihr für nen PHP-Code sehen wollt. Da bei mir einiges in Klassen ausgelagert ist, bringt euch ein CodeSchnippsel nicht viel.
 
Zuletzt bearbeitet:
@tomtom (GO 510 :mrgreen:): Zeig uns einfach eine Klasse, wenn du hast - die sagen oft schon sehr viel über den Programmierstil aus. Wenn möglich, so 150-200 Zeilen, auf jeden Fall nicht weniger - nach oben ziemlich offen :)

Dein XHTML ist jedenfalls valid und eingerückt, so wollen wir's sehen :)
Dein CSS ist nicht ganz so überragend, das ist ziemlich schlecht formatiert und hat hier und da noch ein paar Macken (erst margin: 0, dann margin-top - in der selben Definition), aber sonst OK.

@ActionScripter: Da müssen wir glaube ich nicht lange diskutieren, der Code ist völlig OK. Du bist dann hiermit in die Gruppe aufgenommen :)

@Tyrell: Naja, sorry, der kurze C-Code ist zwar in Ordnung, soweit ich das überblicken kann - aber mir einfach zu kurz! (wie tH das hält, werde ich ihn gleich mal in unserer Privatdiskussion fragen)
Du kannst mir einen längeren Code von mir aus auch per PN schicken, falls du den hier auf gar keinen Fall zeigen willst. ;)

@T-Virus: Du hast nicht wirklich Ahnung, wovon du sprichst, oder? :-O
Das Validator-Ergebnis verursacht bei mir Herzrasen, und das ist sicher kein XHTML / CSS.

Poste bitte PHP-Code oder anderen echten Programmcode, bzw. schicke mir den per PN, aber wenn der genauso aussieht wie dein HTML-Code, dann war das wohl nen Griff in die Kloschüssel.

den quelltext wird dir keiner klauen
*anschließ*
 
Zuletzt bearbeitet:
PHP:
<?php
class kategorieverwaltung {
  function pagenew($db,$akt,$subakt,$catdata)
 {
  if($akt=="do_it")
  {
   $db->db_query("SELECT id FROM seiten WHERE LOWER(query) = LOWER('<0>' AND cat = '<1>')",array($_POST['query'],$cat['id']));
   if($db->numede==0)
   {
    $db->db_query("INSERT INTO seiten (cat,query,titel,text) VALUES ('<0>','<1>','".base64_encode(stripslashes($_POST['titel']))."','".base64_encode(stripslashes($_POST['inhalt']))."')",array($catdata['id'],$_POST['query'],NULL,NULL,$_SESSION['user']));
    $db->db_query("SELECT id FROM seiten WHERE query = '<1>' AND cat='<0>'",array($cat['id'],$_POST['query']));
	$a=$db->db_array();
    $db->db_query("INSERT INTO `log` ( `id` , `benutzer` , `time` , `aktion` , `page` ) VALUES (NULL , '<0>', '<1>', '<2>', '<3>');",array($_SESSION['user'],func::timestamp(),"Seite erstellt",$a['id']));
	$inhalt = 'Seite '.$_POST['titel'].' erstellt<br />';
    $inhalt .= 'Adresse: <tt>'.html::system_addr('',func::cat_url_gen($catdata['id'],$db).'/'.stripslashes($_POST['query']),true).'</tt>';
   }
   else
   {
    $inhalt = "Es gibt schon eine Seite mit diesem Query";
   }
  }
  else
  {
   $felder['Titel']=array("typ" => "text", "name" => "titel", "value" => "");
   $felder['Query']=array("typ" => "text", "name" => "query", "value" => "", "pre" => html::system_addr('',func::cat_url_gen($catdata['id'],$db).'/',true));
   $felder['Inhalt']=array("spezial" => '<textarea cols="75" rows="40" name="inhalt" {[%style%]}> </textarea>');	    
   $inhalt .=html::gen_form(html::system_addr('verwaltung','kategorieverwaltung/pagenew/do_it'),$felder,"Neue Seite erstellen","Erstellen","POST","page_new_form");    
  }
  return $inhalt;
 }
 function menuedit($db,$akt,$subakt,$catdata)
 {
  if($akt=="do_it")
  {
   if($subakt=="sort")
   {
    $db->db_query("SELECT `id`, `cat`, `page`, `sort` FROM `menu` WHERE own_cat='<0>' ORDER BY `sort` ASC;",array($catdata['id']));
    $query=array();
    while($men = $db->db_array())
    {
     $query[]=$men['id'];
    }
    foreach ($query as $a => $b)
    {
     $db->db_query("UPDATE menu SET sort='<0>' WHERE id = '<1>' AND own_cat='<2>'",array($_POST['sort_'.$b],$b,$catdata['id']));
    }
    $inhalt = "Sortierung wurde angepasst";
   }
   elseif($subakt=="del")
   {
    $db->db_query("SELECT `id`, `cat`, `page`, `sort` FROM `menu` WHERE own_cat='<0>' ORDER BY `sort` ASC;",array($catdata['id']));
    $query=array();
    while($men = $db->db_array())
    {
     $query[]=$men['id'];
    }
    foreach ($query as $a => $b)
    {
     if($_POST['del_'.$b]=="ja")
     {
      $db->db_query("DELETE FROM menu WHERE id = '<0>' AND own_cat='<1>'",array($b,$catdata['id']));
     }
    }
    $inhalt = "Entfernen erfolgreich";
   }
   elseif($subakt=="add")
   {
    $db->db_query("SELECT id,titel,cat,text,query FROM seiten WHERE query = '<0>' AND cat='<1>'",array($_POST['query'],$_POST['cat_list']));
    if($db->numede==0)
    {
     $inhalt = "Diese Seite gibt es nicht.";
    }
    else
    {
     $a=$db->db_array();
     $db->db_query("INSERT INTO menu (id,cat,page,sort,own_cat) VALUES (NULL,'<0>','<1>','<2>','<3>')",array($_POST['cat_list'],$a['id'],$_POST['sort'],$catdata['id']));
     $inhalt = "Menüeintrag hinzugefügt";
    }
   }
  }
  else
  {
   $db->db_query("SELECT `id`, `cat`, `page`, `sort` FROM `menu` WHERE own_cat='<0>' ORDER BY `sort` ASC;",array($catdata['id']));
   if($db->numede!=0)
   {
    $menu_ent=array();
    while($men = $db->db_array())
    {
     $menu_ent[$men['id']]['cat']=$men['cat'];
     $menu_ent[$men['id']]['page']=$men['page'];
     $menu_ent[$men['id']]['sort']=$men['sort'];
    }
    foreach ($menu_ent as $a => $b)
    {
      $db->db_query("SELECT id,titel,cat,text,query FROM seiten WHERE id = '<0>' AND cat='<1>'",array($b['page'],$b['cat']));
      $c=$db->db_array();
	  $db->db_query("SELECT id,name,parent FROM cat WHERE id = '<0>' ",array($b['cat']));
      $d=$db->db_array();      
      $felder[base64_decode($c['titel'])."(".$d['name'].")[".$a."]"]=array("typ" => "text", "name" => "sort_".$a, "wert" => $b['sort']);
    }
    $inhalt .= html::gen_form(html::system_addr("verwaltung","kategorieverwaltung/menuedit/do_it/sort"),$felder,"Sortierung","Sortierung anpassen","POST","cat_sort_edit");
    $felder=array();
	foreach ($menu_ent as $a => $b)
    {
      $db->db_query("SELECT id,titel,cat,text,query FROM seiten WHERE id = '<0>' AND cat='<1>'",array($b['page'],$b['cat']));
      $c=$db->db_array();
      $db->db_query("SELECT id,name,parent FROM cat WHERE id = '<0>' ",array($b['cat']));
      $d=$db->db_array();      
      $felder[base64_decode($c['titel'])."(".$d['name'].")[".$a."]"]=array("spezial" => '<select name="del_'.$a.'" {[%style%]}><option value="nein">nein</option><option value="ja">ja</option></select>');
    }
    $inhalt .= html::gen_form(html::system_addr("verwaltung","kategorieverwaltung/menuedit/do_it/del"),$felder,"Entfernen","Eintrag entfernen","POST","cat_del_edit");
   }
   $db->db_query("SELECT id,name,parent FROM cat WHERE parent = 0",array());
   $felder=array();
   if($db->numede==0)
   {
    $inhalt .= "Keine Katgorie gefunden";	
   }
   else
   {	 
    $selects .='<option value="main">--Hauptebene</option>';
    $fetch = 1;
    $last = 0;
    while($fetch != 0)
    {
     $db->db_query("SELECT id,name,parent FROM cat WHERE parent = '<0>' AND id > <1>",array(0,$last));
     $fetch=$db->numede;
     $cataa = $db->db_array();
     $last = $cataa['id'];
     if($fetch != 0)
     {
      $selects .='<option value="'.$cataa['id'].'">--'.$cataa['name'].'</option>';
      $selects .=func::get_sub_list($cataa['id'],$db);
     }
    }
    $felder['Kategorie']=array("spezial" => '<select name="cat_list" {[%style%]}>'.$selects.'</select>');	
    $felder["Query der Seite"]=array("typ" => "text", "name" => "query");
    $felder["Sortierung"]=array("typ" => "text", "name" => "sort");
    $inhalt .= html::gen_form(html::system_addr("verwaltung","kategorieverwaltung/menuedit/do_it/add"),$felder,"Hinzufügen","Eintrag hinzufügen","POST","cat_add_edit");
   }
  }
  return $inhalt;
 }
 function mediacat($db,$akt,$subakt,$catdata)
 {
  if($akt=="del")
  {
   $db->db_query("SELECT filename FROM media WHERE id = '<0>' AND cat='<1>'",array($subakt,$catdata['id']));
   if($db->numede==0)
   {
    $inhalt =" Keine Mediadatensatz vorhanden";
   }
   else
   {
    $med = $db->db_array();
    if(unlink("./media/".$med['filename']))
	{
	 $inhalt ="Datei entfernt<br />";
	 $db->db_query("DELETE FROM media WHERE id = '<0>' AND cat='<1>'",array($subakt,$catdata['id']));
	 if($db->numede==0)
	 {
	 $inhalt .="Datensatz entfernt <br />";
	 }
	 else
	 {
	  $inhalt .="Konnte Datensatz nicht entfernen";
	 }
	}
	else
	{
	 	$inhalt .="Datei konnte nicht entfernt werden";
	}
   }
  }
  elseif($akt=="upload")
  {
   $loremipsum=mt_rand(1000,9999).time().rand(100,999)."-cat".$catdata['id']."-".mt_rand(900,7787).time().rand(877,765447).'-_-';
   if (move_uploaded_file($_FILES['userfile']['tmp_name'], "./media/".$loremipsum.$_FILES['userfile']['name'])) 
   {
    $db->db_query("INSERT INTO media (`filename`,`callname`,`cat`) VALUES ('<0>','<1>','<2>') ",array($loremipsum.$_FILES['userfile']['name'],$_POST['callname'],$catdata['id']));
    $inhalt .= " Erfolgreich eingetragen";
   }
   else
   {
    $inhalt .= "Konnte Datei nicht hochladen";
   }
  }
  $inhalt .= "<hr>";
  $db->db_query("SELECT `id`,`filename`,`callname`,`cat` FROM `media` WHERE `cat` = '<0>'",array($catdata['id']));
  if($db->numede==0)
  {
   $inhalt .=" Keine Mediadaten vorhanden";
  }
  else
  {
   $inhalt .="Mediadatenliste (kategorie)<br /><table border='1'>";
   $inhalt.="<tr><td>ID</td><td>Dateiname auf Server</td><td>Dateiname fuer Mediaaufruf</td><td>Link</td><td>Löschen</td></tr>";
   while($media = $db->db_array())
   {
    $inhalt .="<tr><td>".$media['id']."</td><td>".$media['filename']."</td><td>".$media['callname']."</td><td>".html::system_addr("media",$media['id']."/".$catdata['id']."/".$media['callname'],true)."</td><td><a href=".html::system_addr("verwaltung","kategorieverwaltung/mediacat/del/".$media['id']).">x</a></td></tr>";
   }
   $inhalt .="</table>";
  }
  $felder['Datei']=array("spezial" => '<input name="userfile" type="file" size="50" {[%style%]}>');	  
  $felder['Rufname']=array("typ" => "text", "name" => "callname", "value" => "");
  $inhalt .= html::gen_form(html::system_addr("verwaltung","kategorieverwaltung/mediacat/upload"),$felder,"Mediadatei hochladen","Hochladen","POST","file_upload_mediacat",'enctype="multipart/form-data"');
  return $inhalt;
 }
 function rights()
 {
   if(!in_array($catdata['id'],$_SESSION['priv']['cat_admin'])) {fehler::error(10);return false;}
 }
 function pagelist($db,$akt,$subact,$catdata)
 {
  $inhalt = 'Folgende Seiten sind in der Kategorie<br /><ul>';
  $db->db_query("SELECT id,titel,cat,text,query FROM seiten WHERE cat='<0>'",array($catdata['id']));
  if($db->numede==0)
  {
   $inhalt .= '<li>Irgendjemand hat die "main"-Seite gelöscht</li>';
  }
  else
  {
   while($seite = $db->db_array())
   {
    $inhalt .= '<li><a href="'.html::system_addr('',func::cat_url_gen($catdata['id'],$db).'/'.stripslashes($seite['query'])).'">'.base64_decode($seite['titel']).'</a></li>';
   }
  }
  $inhalt .='</ul>';
  return $inhalt;
 }
  function leer($db,$akt,$catdata)
 {
  return $inhalt;
 }
 function pageedit($db,$akt,$subact,$catdata)
 {
  if($akt=="")
  {
   $inhalt = 'Seite wählen<ul>';
   $db->db_query("SELECT id,titel,cat,text,query FROM seiten WHERE cat='<0>'",array($catdata['id']));
   if($db->numede==0)
   {
    $inhalt .= '<li>Irgendjemand hat die "main"-Seite gelöscht</li>';
   }
   else
   {
    while($seite = $db->db_array())
    {
     $inhalt .= '<li>'.html::make_menu("","<a href=\"".html::system_addr('verwaltung','kategorieverwaltung/pageedit/'.$seite['id'].'')."\">".base64_decode($seite['titel'])."</a>").'</li>';
    }
   }
   $inhalt .='</ul>';
  }
  else
  {
   $_SESSION['page_id'] = $akt;
   if($subact=="do_it")
   {
    $db->db_query("SELECT id FROM seiten WHERE (LOWER(query) = LOWER('<0>')) AND id == '<1>' AND cat = '<2>'",array($_POST['query'],$_SESSION['page_id'],$cat['id']));
    if($db->numede==0)
    {
     $db->db_query("SELECT query,cat FROM seiten WHERE id = '<0>'",array($_SESSION['page_id']));
	 if($db->numede==0)
	 {
	  fehler::error(6);
	 }
	 else
	 {
	  $seite = $db->db_array();
	  $del=$_POST['del'];
	  if($del=="ja")
	  {
       $db->db_query("DELETE FROM seiten WHERE id = '<0>'",array($_SESSION['page_id']));
       $inhalt = 'Seite '.$_POST['titel'].' wurde entfernt';
	  }
	  else
	  {
	   $cat = $seite['cat'];
 	   $query =$seite['query'];
       $db->db_query("INSERT INTO `log` ( `id` , `benutzer` , `time` , `aktion` , `page` ) VALUES (NULL , '<0>', '<1>', '<2>', '<3>');",array($_SESSION['user'],func::timestamp(),"Seite bearbeitet",$_SESSION['page_id']));
	   $db->db_query("UPDATE seiten SET query = '<1>' ,titel ='".base64_encode(stripslashes($_POST['titel']))."' ,text =  '".base64_encode(stripslashes($_POST['inhalt']))."' WHERE id = '<6>'",array(NULL,$_POST['query'],$_POST['titel'],$_POST['inhalt'],$log,$_POST['php'],$_SESSION['page_id']));
	   $inhalt = 'Seite '.$_POST['titel'].' wurde geaendert';
      }
 	 }
    }
    else
    {
     $inhalt = "Es gibt schon eine Seite mit diesem Query";
    }
   }
   else
   {
    $db->db_query("SELECT id,titel,cat,text,query FROM seiten WHERE id = '<0>' AND cat='<1>'",array($_SESSION['page_id'],$catdata['id']));
    if($db->numede==0)
    {
     fehler::error(6);
    }
    else
    {
     $seite = $db->db_array();
     $titel = base64_decode($seite['titel']);
     $inhalt =base64_decode($seite['text']);
     $query =$seite['query'];
     $log="";
     $db->db_query("SELECT `id` , `benutzer` , `time` , `aktion` , `page` FROM `log` WHERE page = '<0>'",array($_SESSION['page_id']));
	 while($ldata=$db->db_array())
	 {
	  $log .=$ldata['time']." - ".$ldata['aktion']." : ".html::make_menu("","<a href=\"".html::system_addr('system','benutzer/info/'.$ldata['benutzer'])."\">".$ldata['benutzer']."</a>")."\n";
	 }
     $felder['Titel']=array("typ" => "text", "name" => "titel", "wert" => $titel);
     $felder['Query']=array("typ" => "text", "name" => "query", "wert" => $query, "pre" => html::system_addr('',func::cat_url_gen($catdata['id'],$db).'/',true));
     $felder['Inhalt']=array("spezial" => '<textarea cols="75" rows="40" name="inhalt" {[%style%]}>'.$inhalt.'</textarea>');	    
     $felder['Seite Entfernen']=array("spezial" => '<select name="del" {[%style%]}><option value="nein">nein</option><option value="ja">ja</option></select>');
     $felder['Log']=array("spezial" => '<div {[%style%]}>'.$log.'</div>');	    
     $inhalt =html::gen_form(html::system_addr('verwaltung','kategorieverwaltung/pageedit/'.$_SESSION['page_id'].'/do_it'),$felder,"Seite bearbeiten","Speichern","POST","pageedit_form");    
    }
   }
  }
  return $inhalt;
 }
}
?>
so, hier der nachgereichte code. ich weiß, dass es besser ist, die klassen dynamisch zu verwenden, dies änder ich gerade. ich wollte mal sehen, wie es ist, statische klassen zu haben :ugly:
 
@tomtom (GO 510 :mrgreen:): Zeig uns einfach eine Klasse, wenn du hast - die sagen oft schon sehr viel über den Programmierstil aus. Wenn möglich, so 150-200 Zeilen, auf jeden Fall nicht weniger - nach oben ziemlich offen :)
Mag jetzt irgendwie doof klingen, aber das, was ich in php zeigbar fertig geschrieben habe, hat so gut wie nie 200 Zeilen Code. Dafür lager ich zu viel aus. Ich habe lieber viele kleine Dateien, als wenige große Dateien. Finde ich übersichtlicher. ;)

Hier trotzdem mal ein kleines Beispiel:
PHP:
<?php

Class Template {
	/**
	* Template Class
	* Version 1.0
	*/

	var $version = "1.0";   // version
	var $tpl; 				// template-file

	/**
    * public method setTemplate
	* @param: String $tpl (Template Name)
	* @returns string $error (Errorcode)
	*/
	function setTemplate ($template) {
        foreach ($template as $tpl) {
            if(file_exists("template/".$tpl.".tpl")) {
				$this->tpl .= implode("",file("template/".$tpl.".tpl"));
    	    	$error = 0;
			} else {
				$error = 1;
			}
		}
	 return $error;
	}

   	/**
    * public method echoTemplate
	* write out the html-code
    * @return: void
	*/
	function echoTemplate () {
    	$this->parse();
        echo $this->tpl;
    }

    /*
    * public method parse
	* replaces the special code
    * @return: void
    *
	* Template codes
	* - <if var="variable" value="wert"><else></else></if> ODER <if var="variable" value="wert"></if>
	* - <include>template</include>
	* - <foreach></foreach>
	*/
    function parse () {
        $this->tpl = implode("",file("template/head.tpl")).implode("",file("template/header.tpl")).implode("",file("template/menu.tpl")).$this->memberMenu.$this->tpl;
        $this->tpl = $this->tpl.implode("",file("template/foot.tpl"));
        // insert number=1, if not set  (for forEach in forEach)
        $this->tpl = preg_replace("/<forEach var=\"([^\"]+)\" value=\"([^\"]+)\">(.*)<\/forEach>/isU","<forEach var=\"\\1\" value=\"\\2\" number=\"1\">\\4</forEach number=\"1\">",$this->tpl);
        // replace <forEach></forEach>
        while(preg_match("/<forEach var=\"([^\"]+)\" value=\"([^\"]+)\" number=\"([^\"]+)\">(.*)<\/forEach number=\"\\3\">/siU",$this->tpl,$treffer)) {
             $outerarray = $GLOBALS[$treffer[1]];
             $temp = "";
             for ($i=0; $i<count($outerarray); $i++) {
                $innerarray = $outerarray[$i];
                $zeile = $treffer[4];
                for ($j=0; $j<count($innerarray); $j++) {
                    preg_match("/%([_\d\w^%]+)%/e",$zeile, $test);
                     if ($innerarray[$test[1]] != "") {
						$zeile = str_replace($test[0],$innerarray[$test[1]],$zeile);
                     } else {
                        $zeile = str_replace($test[0],$test[0],$zeile);
                     }
                }
                   $temp .= $zeile;
             }
             $this->tpl = str_replace("<forEach var=\"".$treffer[1]."\" value=\"".$treffer[2]."\" number=\"".$treffer[3]."\">".$treffer[4]."</forEach number=\"".$treffer[3]."\">",$temp,$this->tpl);
		}
        // replace <include>template</include> ODER <include>%template%</include>
        while(preg_match("/<include>(.*)<\/include>/siU",$this->tpl, $treffer)) {
            if(preg_match("/%([_\d\w^%]+)%/e",$treffer[1],$sub)) {
            	$file = substr($sub[1],1,strlen($sub[1]));
		  	} else {
            	$file = $treffer[1];
            }
			$tplToReplace = $this->getTempplate($file);
			$this->tpl = str_replace("<include>".$treffer[1]."</include>", $tplToReplace, $this->tpl);
        }
        // insert number=1, if not set  (for if in if)
        $this->tpl = preg_replace("/<if var=\"([^\"]+)\" value=\"([^\"]+)\">(.*)<\/if>/isU","<if var=\"\\1\" value=\"\\2\" number=\"1\">\\3</if number=\"1\">",$this->tpl);
        // insert operator=1, if not set
        $this->tpl = preg_replace("/<if var=\"([^\"]+)\" value=\"([^\"]+)\" number=\"([^\"]+)\">(.*)<\/if number=\"\\3\">/siU","<if var=\"\\1\" value=\"\\2\" number=\"\\3\" op=\"1\">\\4</if number=\"\\3\">",$this->tpl);
        // replace <if var="variable" value="wert">doSomeThing</if>
         while(preg_match("/<if var=\"([^\"]+)\" value=\"([^\"]+)\" number=\"([^\"]+)\" op=\"([^\"]+)\">(.*)<\/if number=\"\\3\">/siU",$this->tpl,$treffer)) {
            if ($treffer[4] == "1") {
            	$GLOBALS[$treffer[1]] == $treffer[2] ? $StrToReplace = $treffer[5] : $StrToReplace = "";
            } else {
                $GLOBALS[$treffer[1]] != $treffer[2] ? $StrToReplace = $treffer[5] : $StrToReplace = "";
            }
			$this->tpl = str_replace("<if var=\"".$treffer[1]."\" value=\"".$treffer[2]."\" number=\"".$treffer[3]."\" op=\"".$treffer[4]."\">".$treffer[5]."</if number=\"".$treffer[3]."\">",$StrToReplace,$this->tpl);
		}
        // replace %platzhalter%
     	while (preg_match("/%([_\d\w^%]+)%/e", $this->tpl, $treffer)) {
     			$this->tpl = str_replace($treffer[0],$GLOBALS[$treffer[1]], $this->tpl);
	    }
    }

    function getTempplate($tpl) {
    	if(file_exists("template/".$tpl.".tpl")) {
			return implode("",file("template/".$tpl.".tpl"));
		} else {
        	return "Die Datei ".$tpl.".tpl existiert nicht!.";
		}
    }
}
?>

Dein CSS ist nicht ganz so überragend, das ist ziemlich schlecht formatiert und hat hier und da noch ein paar Macken (erst margin: 0, dann margin-top - in der selben Definition), aber sonst OK.
Die CSS war eher ein schlechtes Beispiel, weiß ich. Wurde auch nur fix zusammengeschustert.
 
Zuletzt bearbeitet:
Dein CSS ist nicht ganz so überragend, das ist ziemlich schlecht formatiert und hat hier und da noch ein paar Macken (erst margin: 0, dann margin-top - in der selben Definition), aber sonst OK.
hmm, also ich mach das eigentlich auch so. gut meist im umgekehrten fall, da spart man sich dann 1 anweisung :)

@ActionScripter: Da müssen wir glaube ich nicht lange diskutieren, der Code ist völlig OK. Du bist dann hiermit in die Gruppe aufgenommen :)
ätschibätsch ich bin jetzt programmierer ... lalala ... *rumtanz*
 
@Tyrell: Naja, sorry, der kurze C-Code ist zwar in Ordnung, soweit ich das überblicken kann - aber mir einfach zu kurz! (wie tH das hält, werde ich ihn gleich mal in unserer Privatdiskussion fragen)
Du kannst mir einen längeren Code von mir aus auch per PN schicken, falls du den hier auf gar keinen Fall zeigen willst. ;)

Ich hab einen längeren Code, den ich posten kann, allerdings wird man damit nicht viel anfangen können, da er mitten aus einem Projekt gerissen ist. Ohne den Rest und ohne Eclipse wird man nicht viel sehen können, da z.B. alle hartgecodeten Strings lokalisiert worden sind und nicht mehr im Code stehen (Überall da, wo jetzt //$NON-NLS-xxx$ als Kommentar dran steht).

PHP:
	/**
	 * Looks which tracers are set and adds relevant information to log file
	 * @param sim The Simulation
	 */
	public void updateLog(Simulation sim){
		Tracer theTracer;
		ComponentInstance theComp;
		MessageBufferInstance theBuff;
		String log=Messages.getString("DiagMainControl.4"); //$NON-NLS-1$
		int counter;
		//Update sim's stepcounter
		if (simSteps.get(sim)!=null){
			counter=((Integer)simSteps.get(sim)).intValue();
			counter++;
			simSteps.remove(sim);
			simSteps.put(sim,new Integer(counter));
		}
		else{
			simSteps.put(sim,new Integer(0));
			counter=0;
		}
		if (simLog.get(sim)!=null){
			Object objString=(simLog.get(sim));
			simLog.remove(sim);
			log=objString.toString();
		}
		
		log+=Messages.getString("DiagMainControl.5")+Integer.toString(counter)+Messages.getString("DiagMainControl.6"); //$NON-NLS-1$ //$NON-NLS-2$
		
	
		//get the component and messagebuffer tracers 
		Iterator iterTracer=sim.getTracer().iterator();
		while (iterTracer.hasNext()){
			theTracer=(Tracer)iterTracer.next();
			//log for components
			if (theTracer instanceof ComponentTracer){
				Iterator iterComp=((ComponentTracer)theTracer).getComponentInstance().iterator();
				//gets all the componentinstances of the tracer
				while (iterComp.hasNext()){
					theComp=(ComponentInstance)iterComp.next();
					log+=theComp.getName()+Messages.getString("DiagMainControl.7")+theComp.getStateMachineInstance().getCurrentState().getName()+Messages.getString("DiagMainControl.8"); //$NON-NLS-1$ //$NON-NLS-2$
				}
			}
			//log for buffers
			if (theTracer instanceof BufferTracer){
				Iterator iterBuff=((BufferTracer)theTracer).getMessageBufferInstance().iterator();
				//gets all the buffers of the tracer
				while (iterBuff.hasNext()){
					theBuff=(MessageBufferInstance)iterBuff.next();
					log+=Messages.getString("DiagMainControl.9")+theBuff.getPortInstance().getName()+Messages.getString("DiagMainControl.10")+Integer.toString(theBuff.getMessageInstance().size())+Messages.getString("DiagMainControl.11"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
					
				}
			}		
		}
		IPath projectPath=((IFileEditorInput)editorInput).getFile().getLocation();
		projectPath.removeFileExtension();
		projectPath.removeLastSegments(1);
		try{
			PrintWriter out = new PrintWriter(new FileWriter(projectPath.toOSString()+sim.getName()+Messages.getString("DiagMainControl.12"))); //$NON-NLS-1$
			out.print(log);  
			out.close();
		}
		catch(IOException e){
			System.out.println(Messages.getString("DiagMainControl.13")); //$NON-NLS-1$
		}
		simLog.put(sim,log);
		updateGrapher(sim,counter);
	}
	
	
	/**
	 * updates the bufferstates for the timeline graph for each msgbuffer
	 * @param sim the simulation
	 * @param counter the current step counter
	 */
	private void updateGrapher(Simulation sim, int counter){
		MessageBufferInstance msgbuf=null;
		if (simBuffers.get(sim)==null){
			simBuffers.put(sim, new HashMap());
		}
		HashMap bufferTimes=(HashMap)simBuffers.get(sim);
		try{
			//look at all the msgbuffers
			Iterator msgbuffers=sim.getDeploymentDiagram().getMessageBufferInstance().iterator();
			while (msgbuffers.hasNext()){
				msgbuf=(MessageBufferInstance)msgbuffers.next();
				//if msgbuffer hasnt got a hashmaps for his states, create one
				if (bufferTimes.get(msgbuf)==null){
					bufferTimes.put(msgbuf,new HashMap());
				}
				//Put a new timestamp into the map
				HashMap timeMap=(HashMap)bufferTimes.get(msgbuf);
				timeMap.put(Messages.getString("DiagMainControl.14")+Integer.toString(counter),new Double( (double)(msgbuf.getMessageInstance().size()) ));  //$NON-NLS-1$
			}
		}
		catch(Exception e){}
	}
 
Zuletzt bearbeitet:
Ich hab einen längeren Code, den ich posten kann, allerdings wird man damit nicht viel anfangen können,

2 tips: 1. benutz doch bitte [ PHP ] anstatt [ CODE ], dann schaut das ganze wenigstens halbwegs lesbar aus. und 2. wenn dein eclipse das schöner anzeigt, dann versuchs doch mal mit nem screenshot oder zwei oder drei :)
 
Meine Bewerbung:

Welche Programmiersprachen beherrscht du ? Wie gut ?
PHP - Profi
MySQL - Fortgeschritten
Perl - Grundkenntnisse
Javascript - Fortgeschritten
Delphi - Profi
Basic - Profi

Du kannst ruhig etwas von dir erzählen, z.B. wie du mit der Programmierung angefangen hast.
Vor genau 26 Jahren habe ich mir meinen ersten Computer gekauft. Seitdem programmiere ich. Zunächst in Basic, später in Z80-Assembler. In meiner Ausbildung habe ich CNC-Steuerungen in Assembler programmiert - das erste Projekt war ein Multitasking-System in Assembler. Über verschiedene Sprachversuche (u.a. die heute nur noch wenig bekannte Sprache "Forth") kam ich zu Pascal. Zunächst Turbo-Pascal 4, dann über Versionen 5 und 6 zu Delphi. Habe dann viele Jahre in Delphi programmiert. U.a. ein Programm "DMS-Inkasso" zur Abwicklung von Vorgängen in einem Inkasso-Büro. Beruflich entwickle ich heue kleine Delphi-Anwendungen, die zusammen mit Host-Schnittstellen (Fachdienste, Webservices und SQL-Datenbanken) Vorgänge bei einem großen Versandhaus in Fürth automatisieren. Privat habe ich mich dann mit der Programmierung in PHP beschäftigt, was heute im privaten Bereich zu annähernd 100% meiner Programmierarbeit entspricht. Aktuell ist das Projekt eines CMS in PHP namens "DMS-Modulweb V2.1" in Arbeit.

Was ist dein Fachgebiet?
Die Programmierung von Webseiten mit den zugehörigen Tools zur "Selbstpflege" wurde in den letzten Jahren zu einem Markenzeichen. Meine Kunden sind diesbezüglich sehr zufrieden. Mehr so zum Spaß habe ich mich auch mit der Programmierung von Spielen befasst.

Referenzen?
Im Losebereich wohl erst mal das Großprojekt "Spielen4Lose.de" - eine Website die komplett in PHP programmiert und per Adminschnittstelle vollständig verwalrtet wird. Insgesamt umfasst dieses Projekt rd. 60.000 Programmzeilen PHP-Code - strukturiert in rd. 100 Dateien. Alleine der Cronjob, der den Betreibern alle anfallenden Wartungsarbeiten abnimmt kommt auf 10.000 Programmzeilen (Insgesamt knapp 20 Dateien). Unfang der Seite:

- Nagelneues einmaliges Bankscript
- Loginvergütung 50 Lose (Reloadsperre 30 Minuten)
- Bettellink (bis 150 Lose )
- 4 Refebenen (1%,0.75%,0.50%,0.25%)
- einstellbares Autorefback über die gesamte Downline des Users
- einstellbare Auto-Userrallys (Werber für Ihre Refs)
- Ref-Bonussystem
- Girokonto (1% Basiszins und bis 90% Aktivzins p.M) bis 10.000.000
- Sparbuch (2% Basiszins) bis 10.000.000
- Prämiensparen (7% Basiszins und bis 20% Aktivzins + Extra-Prämienzahlungen)
- Losetresor
- interne / externe Überweisung und Daueraufträge
- Treuhand-Service
- Bonuspunkte (eintauschbar in Lose)
- Refkauf
- Userprofil
- interne Messages und Kurzmitteilungen
- WMS
- Verdienen durch Paidbanner (+Jokerklick)
- Verdienen durch (Lose)Mails(ab 300 Lose)
- Verdienst im Losechat
- verschiedene Rallys
- einzigartige Flashgames und Slots mit zahlreichen Jackpots
- Ranglisten-Spiele mit Monatsjackpots
- Forum
- eigene Mailadresse (Klammid@spielen4lose.de)
- Monats-Bonus-Codes
- Newsticker für dein Widget oder RSS/XML-Reader
- SMS for Lose
- S4L Mobile für Pocket PC verfügbar


Dann mein eigenes Werbenetzwerk "LoseBannerService.de" - vollständig selbst programmiert. Besonderheit: Getarnte Minusbanner verhindern das Klicken von Bannern via Scripten.

Mehr als "Spielerei" mein "PuzzleDictionary.de"

Dann verschiedene Spielautomaten bei S4L (Grafik und Flash sind nicht von mir, die sind von CFD. Die PHP-Scripte von mir):
- Video-Poker
- Poker-Line
- Pirates-Story
- Ghost-Palace
- Black-Jack

Aktuelles Projekt ist die Anpassung des DMS-Modulweb an LoseSeiten. Damit dann auch LoseUser in den "Genuss" von Webseiten mit DMS-ModulWeb kommen können.

Darüber hinaus zahlreiche andere Seiten die von meiner Firma DMS erstellt wurden. Eine komplette Aufstellung der Referenzen finden sich auf https://www.dms-webspace.de/des_referenz.shtml

Strukturieres Programmieren?
Bei entsprechend großen Projekten ist eine saubere Programmierung unablässig und ich lege sehr großen Wert drauf.

So... sollte es erst mal sein.... Und was kommt jetzt?

Gruß
Georg W. Seefried
Frames
 
Welche Programmiersprachen beherrscht du ? Wie gut ?
PHP - Fortgeschritten
MySQL - Fortgeschritten
Java - Schulinformatikwissen
Delphi / Pascal - Über Fortgeschritten
QBasic - Über Fortgeschritten
HTML - Normal würde ich sagen
Casio Basic :biggrin:

Du kannst ruhig etwas von dir erzählen, z.B. wie du mit der Programmierung angefangen hast.

Ja... Angefangen habe ich mit 13 Jahren mit QuickBasic, da ich es einfach schon faszinierend fand, dass man selbst sowas tolles wie Programme schreiben kann und die nicht nur von anderen bekommen kann. Das wissen dazu hatte ich aus dem Internet, also selbst beigebracht. Mein Endprodukt mit Quickbasic war ein Chatbot.
Zwischendurch kam dann HTML und erste Webseiten entstanden (mit einem wirklich grauenhaften Design, aber da bin ich auch völlig unbegabt).
C++ habe ich angefangen, aber nicht weiter fortgesetzt, was ich jedoch demnächst nachholen möchte. Bei Java gilt das gleiche, wobei ich das jetzt notgedrungen in der Schule durchnehme (Java ist von der Syntax her nicht gerade meine Lieblingssprache, da es einfach zu viele Vorgaben gibt).
PHP fand ich mehr durch Zufall, als ich nach etwas suchte, das HTML interessanter machen könnte (JavaScript - siehe Java, aber ich musste mich notgedrungen auch damit anfreunden). Mit PHP in Verbindung mit MySQL entstanden dann mehrere Management-Systeme, zuletzt sogar ein komplettes CMS für unsere Schule mit kompletter Datenverwaltung, größtenteils ohne HTML-Kenntnisse.
Zu Delphi kam ich eher durch Zufall, als mein Bruder mir mal gezeigt hat, in welcher Sprache er gerade programmiert. Ich fand das so faszinierend, dass ich es einfach mal ausprobierte. Zunächst entstanden natürlich nur Programme, die nur aus Komponenten bestanden und vielleicht beim Klick auf einen Button ein Label veränderten. Dies blieb auch größtenteils so, bis ich ein Praktikum in einer Softwareschmiede machte (https://www.bau-su.de), in der ich einen 2-Wochen-Intensivkurs (Morgens 8 bis abends 6) in Informatik bekam. Von da an habe ich mich selbst wieder weitergebildet, was vorher ohne die Kenntnis, was denn jetzt genau ein Objekt und die dazugehörige Programmierung ist, nicht möglich war. Momentan programmiere ich fast nur noch in Delphi und bin mit Netzwerkprogrammierung beschäftigt.

Was ist dein Fachgebiet?
Ein Fachgebiet könnte ich im Moment nicht benennen. Wenn mir was besseres einfällt als das, was ich gerade mache, wird das gewechselt *g*

Referenzen
Schwer, da zu entscheiden, welcher Code meinen Programmierstil am besten ausdrückt...
Aber hier ein paar Beispiele:

Delphi: Token-Funktionen
Code:
//-------------------------------------------
//TOKEN-Funktionen
//-------------------------------------------

function getTokenByString(_String: string; _Index: integer; _Seperator: string): string;
var
  I: integer;
  PosExAlt, PosExAkt: cardinal;
begin
  PosExAlt := 0;
  PosExAkt := 0;
  for I := 0 to _Index - 1 do    // Iterate
  begin
    PosExAkt := PosEx(_Seperator, _String, PosExAlt + 1);
    if I = _Index - 1 then
      break;
    PosExAlt := PosExAkt;
  end;    // for
  Result := copy(_String, PosExAlt + 1, PosExAkt - 1 - PosExAlt);
end;


function countTokensByString(_String: string; _Seperator: string): integer;
var
  PosExAkt: cardinal;
  I: integer;
begin
  I := 0;
  PosExAkt := 0;
  while (PosExAkt <> 0) or (I = 0) do
  begin
    PosExAkt := PosEx(_Seperator, _String, PosExAkt + 1);
    Inc(I);
  end;    // while
  Result := I - 1;
end;

Eine Sammlung von selbst geschriebenen Objekten findet sich hier: u_MyObj.pas
(in der u_functions-Unit, auf die verwiesen wird, befinden sich z.B. die Token-Funktionen, die oben gepostet sind.). Einige Kommentare sind nur drin, da ich das mal im Informatikunterricht dem Kurs vorstellen musste, bitte nicht wundern.

Ansonsten finden sich hier Programme, die ich in Delphi geschrieben habe.

PHP:

Alle System auf https://www.stexmedia.com und https://www.stefanexner.de habe ich selbst geschrieben, als Beispiel hier das Galeriemodul meines CMS, über das Upload und Verwaltung funktionieren. Ich habe die PHP-Datei in .txt umbenannt, damit ich sie nicht erst packen muss. => pictures.txt


Hm... ich glaube, damit hätte ich die Liste abgearbeitet und hoffe mal ,das reicht *g*

Gruß,
Stefan