Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 13

Thema: Projekt Mitarbeiter

  1. #1
    Fortgeschrittene/r
    Registriert seit
    25.06.2016
    Beiträge
    157
    Danke
    5
    Bekam 11 mal "Danke" in 11 Postings

    Standard Projekt Mitarbeiter

    Hey zusammen,

    ich habe jetzt mit einem kleinen Projekt begonnen. Dabei möchte ich das ein Mitarbeiter das Mitarbeiterformular ausfüllt. Dann werden die Daten in die Datenbank gespeichert. Dann möchte ich mittels der id des jeweiligen Mitarbeiters auf einer anderen seite ein link ausgeben (welcher aus den vornamen und nachnamen besteht). Und zum Schluss auf der 3.Seite möchte ich das da die ganzen Daten zu diesem Mitarbeiter ausgegeben werden. Auf allen scripts habe ich verbindung zur datenbank.

    Mein Problem ist das immer nach dem klicken des submit buttons bei der file mitarbeitersuche.php folgende fehlermeldung kommt : Fehler bei Datenbankverbindung: SQLSTATE[HY000] [2002] Es konnte keine Verbindung hergestellt werden, da der Zielcomputer die Verbindung verweigerte.

    Warum ist das denn so ? Ich habe schon nachgeschaut ob password und die verbindungsdaten alle stimmen. Aber die stimmen alle.

    Hoffe ihr könnt mir helfen

    Hier ist die file mitarbeitersuche.php:

    PHP-Code:
    <?php
        session_start
    ();
        
    $personal_id null;
        
    $error = array();

        if(isset(
    $_POST['submit'])){

            
    $personal_id $_POST['personal_id'];
            
    $_SESSION['personal_id'] = $personal_id;

            if(empty(
    $personal_id)){
                
    $error[] = 'Bitte eine Mitarbeiternummer eingeben!';
            }

            if(
    count($error) === 0){


            try{

                
    $pdo = new PDO ('mysql:host=localhost;
                                dbname=apple231'
    ,
                                
    'apple231',
                                
    '****',

                            array(
                    
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_OBJ,     
                    
    // gibt an, dass man die Rückgabe eines Datensatzes von Methoden als Objekt erhaltet
                    
    PDO::ATTR_EMULATE_PREPARES => false,                
                    
    // sagt, dass man nicht nur emulieren wollen, sondern PreparedStatements nutzen wollen
                    
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION         
                    
    // PDO veranlassen , Exceptions zu werfen, die man abfangt und darauf reagiert
                    
    )
                );

                
    $pdo->query("SET NAMES 'utf8'"); //zeichenkodierung auf utf-8 setzen

            
    } catch (Exception $w){
                exit(
    'Fehler bei Datenbankverbindung: ' $w->getMessage());
            }


            try{

                
    $stmt $pdo->prepare('SELECT vorname, nachname FROM `mitarbeiterdaten` WHERE `id` = "' $personal_id '"');
                
    $stmt->execute();

                while (
    $rows $stmt->fetch(PDO::FETCH_OBJ)) {
                    echo 
    '<a href="mitarbeiteranzeige?'$personal_id '">'$rows->vorname $rows->nachname .'</a>';
                }

                

            } catch (
    Exception $d){
                exit(
    'Fehler bei datenbankabfrage : ' $d->getMessage());
            }
        }
    }
    ?>

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <title>Mitarbeitersuche</title>

        <style type="text/css">
            div#innen{
                border: 1px solid black;
                width: 20%;
                padding: 0px 10px 10px 10px;
            }

            input[type='submit']:hover{
                cursor: pointer;
            }

        </style>
    </head>
    <body>
        <form method="POST">
          <div id="innen">
            <h3>Mitarbeitersuche</h3>
                <input type="number" name="personal_id" placeholder="Mitarbeitersuche...">
                <input type="submit" name="submit" value="Mitarbeiter suchen!">
          </div>
          <?php
              
    if(isset($error) && count($error) > 0){
                  echo 
    implode('<br>'$error);
              }
          
    ?>
        </form>
    </body>
    </html>

    Gruß,
    Stef
    Geändert von Stef (06.01.2017 um 20:24 Uhr)

  2. #2
    Moderator Avatar von Arne Drews
    Registriert seit
    20.01.2016
    Ort
    Friedrichstadt, NF
    Beiträge
    789
    Danke
    16
    Bekam 90 mal "Danke" in 89 Postings

    Standard AW: Projekt Mitarbeiter

    Hi,

    Setz die Connection mal so um:
    PHP-Code:
    $pdo = new PDO (
            
    'mysql:host=127.0.0.1;dbname=apple231;charset=utf8','apple231','****',
            array(
                
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_OBJ,     
                
    PDO::ATTR_EMULATE_PREPARES => false,                
                
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION         
            
    )
    ); 
    localhost kann ab PHP5.3+ und der mysqlnd Erweiterung manchmal zu Problemen führen. Über die IP des localhost sollte es dann klappen.

    Diese Zeile kannst Du entfernen:
    PHP-Code:
    $pdo->query("SET NAMES 'utf8'"); 
    Das funktioniert zwar, ist aber die "alte" Variante. Die "moderne" sieht die Verbindungskodierung im DSN vor, siehe oberer Codeblock.

    Gruß Arne

  3. #3
    Fortgeschrittene/r
    Themenstarter

    Registriert seit
    25.06.2016
    Beiträge
    157
    Danke
    5
    Bekam 11 mal "Danke" in 11 Postings

    Standard AW: Projekt Mitarbeiter

    Hey,

    ich habe es nun mal geändert. Und nun funktioniert alles. Danke.

    Nun noch eine frage zur Sicherheit. Und zwar wenn jetzt ein "böser" Mitarbeiter javascript code in die text fälder eingiebt und somit eine attacke ausführt wie kann man sich dagegen am besten schützen ?

    ich habe gelesen das man die function htmlspecialchars() verwenden kann. Hab ich jetzt auch gemacht wie folgt:

    PHP-Code:
    $vorname $_POST['vorname'];
        
    $nachname $_POST['nachname'];
        
    $alter = (int)$_POST['alter'];
        
    $wohnort $_POST['wohnort'];
        
    $aktuelles_einsatzgebiet $_POST['aktuelles_einsatzgebiet'];
        
    $qualifikationen $_POST['qualifikationen'];
        
    $hobbys $_POST['hobbys'];
        
    $v_arbeitsplatz $_POST['v-arbeitsplatz'];

        
    $vorname =  htmlspecialchars($vorname);
        
    $nachname =  htmlspecialchars($nachname);
        
    $alter =  htmlspecialchars($alter);
        
    $wohnort =  htmlspecialchars($wohnort);
        
    $aktuelles_einsatzgebiet =  htmlspecialchars($aktuelles_einsatzgebiet);
        
    $qualifikationen htmlspecialchars($qualifikationen); 
        
    $hobbys =  htmlspecialchars($hobbys);
        
    $v_arbeitsplatz htmlspecialchars($v_arbeitsplatz); 
    Dies erfolgt vor datenbank eintrag.
    Nun wenn ich jetzt über das Formular javascript code absende und auf der 2ten seite den Mitarbeiter mit namen aufrufe als link und dann auf ihn klick wird zwar die user eingabe angegeben (z.b. Mitarbeiter : <script>alert('Hallo Guys');</script> <script>alert('Hallo Guys');</script>) aber nicht ausgeführt. Bei den vorigen test wurde immer der js code ausgeführt. Ist es jetzt dann eigentlich sicher oder immernoch auf diese weise angreifbar ?

    Denn htmlspecialchars() sollte ja sonderzeichen in HTML-Code umwandeln. Hat es aber nicht gemacht.

    EDIT: Habe als Test nochmals mehrere XSS-Attacken durchgeführt (Javascript code in input feld reingeschrieben und abgesendet) und beim aufrufen des namens nach dem suchen klicken wird der JS-code dann ausgeführt. Also hat htmlspecialchars() nix genützt....

    Nochwas: Ich möchte überprüfen ob sucheingabe größer als $row->id ist. Ich habe es wie folgt gemacht:

    PHP-Code:
    if($personal_id $row->id){
                    
    $error[] = '<p class="error">Bitte eine richtige Mitarbeiternummer angeben!</p>';

                } 
    Nun wird aber bei jeder eingabe der nummer diese Meldung ausgegeben. Ich geh davon aus das $row-> id ja die zahlen 1-14 (momentan enthält als array) und daher immer der error kommt. Aber wie kann man es nun machen das die fehlermeldung erst kommt wenn man eine nummer größer als die letzte id eingibt ?

    Gruß,
    Stef
    Geändert von Stef (07.01.2017 um 15:46 Uhr)

  4. #4
    Moderator Avatar von Arne Drews
    Registriert seit
    20.01.2016
    Ort
    Friedrichstadt, NF
    Beiträge
    789
    Danke
    16
    Bekam 90 mal "Danke" in 89 Postings

    Standard AW: Projekt Mitarbeiter

    Du solltest filter_var() bzw. filter_input() verwenden, je nach erwarteter Eingabe bieten die Funktionen entsprechende Filter-Typen.
    Für Formulare mit vielen Eingaben eignet sich auch filter_input_array() sehr gut.

  5. #5
    Fortgeschrittene/r
    Themenstarter

    Registriert seit
    25.06.2016
    Beiträge
    157
    Danke
    5
    Bekam 11 mal "Danke" in 11 Postings

    Standard AW: Projekt Mitarbeiter

    Hi,

    vielen Dank für die Info. Nun klappt es.

    Wenn ich jetzt alle formulareingaben in ein array lege, und dies dann mit filter_input_array() durchfiltere wie kann ich dann die werte in dem array in die db mit den platzhaltern eintragen ?

    Gruß Stef

  6. #6
    Moderator Avatar von Arne Drews
    Registriert seit
    20.01.2016
    Ort
    Friedrichstadt, NF
    Beiträge
    789
    Danke
    16
    Bekam 90 mal "Danke" in 89 Postings

    Standard AW: Projekt Mitarbeiter

    Du kannst doch im Formular direkt Arrays definieren, das mache ich bei eigenen Formularen immer so, bspw:
    HTML-Code:
    <input type="text" name="frm[data][]">
    <input type="text" name="frm[data][]">
    Das kannst Du in PHP direkt über $_POST ansprechen:
    PHP-Code:
    $_POST['data'][0// value aus dem ersten input element
    $_POST['data'][1// value aus dem zweiten input element 
    Auf die Weise gruppiere ich größere Formulare auch.

  7. #7
    Fortgeschrittene/r
    Themenstarter

    Registriert seit
    25.06.2016
    Beiträge
    157
    Danke
    5
    Bekam 11 mal "Danke" in 11 Postings

    Standard AW: Projekt Mitarbeiter

    Hey,

    ok gut zu wissen ist auch viel weniger arbeit dann z.b. bei dem filtern usw.

    Ich habe jetzt mal so ein Beispiel erstellt. Hab ich es richtig gemacht oder kann man da noch was verbessern ?

    PHP-Code:
    <?php
        $errors 
    = array();
        
    $formulardaten = array();

        
        if(isset(
    $_POST['submitted'])){

            
            

            
    $formulardaten[] = isset($_POST['form']['data'][0]) ? $_POST['form']['data'][0] : null;
            
    $formulardaten[] = isset($_POST['form']['data'][1]) ? $_POST['form']['data'][1] : null;
            
    $formulardaten[] = isset($_POST['form']['data'][2]) ? $_POST['form']['data'][2] : null;

            
    filter_var_array($formulardatenFILTER_SANITIZE_STRING);

            
    var_dump($formulardaten);

            if(empty(
    $formulardaten['form']['data'][0])){
                
    $erros[] = 'Bitte Vorname angeben!';
            }
            if(empty(
    $formulardaten['form']['data'][1])){
                
    $erros[] = 'Bitte Nachname angeben!';
            }
            if(empty(
    $formulardaten['form']['data'][2])){
                
    $erros[] = 'Bitte Wohnort angeben!';
            }

            
    $ausgabe 'Vielen Dank. Die Daten werden nun verarbeitet!';


            if(
    count($errors) === 0){

                try{
                
    $pdo = new PDO ('mysql:host=127.0.0.1;
                                dbname=apple231;
                                charset=utf8'
    ,
                                
    'apple231',
                                
    '**************************',

                                 array(
                    
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_OBJ,     
                    
    // gibt an, dass man die Rückgabe eines Datensatzes von Methoden als Objekt erhaltet
                    
    PDO::ATTR_EMULATE_PREPARES => false,                
                    
    // sagt, dass man nicht nur emulieren wollen, sondern PreparedStatements nutzen wollen
                    
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION         
                    
    // PDO veranlassen , Exceptions zu werfen, die man abfangt und darauf reagiert
                  

                );

                    }     catch(
    Exception $e){
                            exit(
    'Fehler bei Datenbankverbindung aufgetreten : ' $e->getMessage());
                }

                try{

                    
    $statement $pdo->prepare('INSERT INTO `testdb` (vorname,nachname,wohnort) VALUES (:vorname, :nachname, :wohnort)');
                    
    $result $statement->execute(
                            array(
                                    
    ':vorname' => $formulardaten['form']['data'][0],
                                    
    ':nachname' => $formulardaten['form']['data'][1],
                                    
    ':wohnort' => $formulardaten['form']['data'][2]
                                )
                        );
                } catch(
    Exception $w){
                            exit(
    'Fehler bei Datenbankabfrage aufgetreten : ' $w->getMessage());
                }
            }
        }
    ?>

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <title>Formular</title>
    </head>
    <body>
        <form method="POST">
            <label>Vorname:</label><input type="text" name="form[data][0]"><br>
            <label>Nachname:</label><input type="text" name="form[data][1]"><br>
            <label>Wohnort:</label><input type="text" name="form[data][2]"><br>

            <input type="submit" name="submitted">

            <?php
                
    if(isset($errors) && count($errors) > 0){
                    echo 
    implode('<br>'$errors);
                } else if(isset(
    $ausgabe)) {
                    echo 
    $ausgabe;
                }
            
    ?>
        </form>
    </body>
    </html>
    Hm komisch. Hier wird das filtern irgendwie nicht durchgeführt und keine fehlermeldungen angezeigt. Warum denn das?

    Stef

  8. #8
    Moderator Avatar von Arne Drews
    Registriert seit
    20.01.2016
    Ort
    Friedrichstadt, NF
    Beiträge
    789
    Danke
    16
    Bekam 90 mal "Danke" in 89 Postings

    Standard AW: Projekt Mitarbeiter

    Hi,

    Die Prüfung der Daten kannst Du flexibler gestalten.
    Auf Deine Weise musst Du jedesmal, wenn ein Feld im Formular dazu kommt auch den Code anpassen, so wie hier musst Du das nicht:
    PHP-Code:
        $formulardaten = isset( $_POST['form']['data'] )? $_POST['form']['data']: null;

        if ( !
    is_null($formulardaten) )
            
    filter_var_array$formulardatenFILTER_SANITIZE_STRING ); 
    Grundsätzlich würde ich auch überlegen, ob Du die Formular Felder nicht auch komplett benennst:
    HTML-Code:
    <label>Vorname:</label><input type="text" name="form[data][vorname]"><br>
    <label>Nachname:</label><input type="text" name="form[data][nachname]"><br>
    <label>Wohnort:</label><input type="text" name="form[data][wohnort]"><br>
    Dann kannst Du - ist jetzt ein wenig weiter führend, aber erwähnenswert, wie ich finde - das Array $error bspw. bequem gegen die Namen laufen lassen:
    PHP-Code:
        $formulardaten = isset( $_POST['form']['data'] )? $_POST['form']['data']: null;

        if ( !
    is_null($formulardaten) )
            
    filter_var_array$formulardatenFILTER_SANITIZE_STRING );

        
    var_dump($formulardaten);


        
    $errors array_filter(
                
    array_map(
                    function( 
    $data$key ) {
                        return empty(
    trim($data))? 'Bitte ' $key ' eingeben!'null;
                    }
                    , 
    $formulardaten
                
    )
            ); 
    So brauchst Du auch im Prinzip nie wieder diese Logik anzufassen, selbst wenn Du Dein $_POST['form']['data'] mal erweiterst.Es gibt hier natürlich noch etliche andere Wege und auch bessere, aber es zeigt glaube ich ganz gut, dass man sich ne Menge Arbeit sparen kann, wenn man die Dinge logisch benennt und anpackt.

    Bei den try-/catch Blöcken unterstelle ich Dir mal, dass Du die Exceptions fangen willst, die von PDO kommen. Die sind allerdings dann vom Typ PDOException:
    PHP-Code:
    catch ( PDOException $e ) { ... 
    Würde dann insgesamt alles so aussehen ( allerdings ungetestet! ):
    PHP-Code:
    <?php
    if ( isset($_POST['submitted']) ) {

        
        
    $formulardaten = isset( $_POST['form']['data'] )? $_POST['form']['data']: null;

        if ( !
    is_null($formulardaten) )
            
    filter_var_array$formulardatenFILTER_SANITIZE_STRING );


        
    $errors array_filter(
                
    array_map(
                    function( 
    $data$key ) {
                        return empty(
    trim($data))? 'Bitte ' $key ' eingeben!'null;
                    }
                    , 
    $formulardaten
                
    )
            );

        
    $ausgabe 'Vielen Dank. Die Daten werden nun verarbeitet!';


        if( 
    count($errors) === ) {

            try {

                
    $pdo = new PDO ('mysql:host=127.0.0.1;dbname=apple231;charset=utf8',
                    
    'apple231',
                    
    '**************************',

                    array(
                        
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_OBJ,     
                        
    PDO::ATTR_EMULATE_PREPARES => false,                
                        
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION         
                    

                );

            } catch( 
    PDOException $e ) {

                exit( 
    'Fehler bei Datenbankverbindung aufgetreten : ' $e->getMessage() );

            }

            try {

                
    $statement $pdo->prepare('INSERT INTO `testdb` (vorname,nachname,wohnort) VALUES (:vorname, :nachname, :wohnort)');
                
    $result $statement->execute(
                    array(
                            
    ':vorname' => $formulardaten['vorname'],
                            
    ':nachname' => $formulardaten['nachname'],
                            
    ':wohnort' => $formulardaten['wohnort']
                        )
                    );

            } catch( 
    PDOException $e ){

                exit( 
    'Fehler bei Datenbankabfrage aufgetreten : ' $e->getMessage() );

            }

        }

    }
    ?>

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <title>Formular</title>
    </head>
    <body>
        <form method="POST">
            <label>Vorname:</label><input type="text" name="form[data][vorname]"><br>
            <label>Nachname:</label><input type="text" name="form[data][nachname]"><br>
            <label>Wohnort:</label><input type="text" name="form[data][wohnort]"><br>

            <input type="submit" name="submitted">

            <?php // hier kann man vermutlich auch noch optimieren...
                
    if(isset($errors) && count($errors) > 0){
                    echo 
    implode('<br>'$errors);
                } else if(isset(
    $ausgabe)) {
                    echo 
    $ausgabe;
                }
            
    ?>
        </form>
    </body>
    </html>
    Gruß Arne

  9. #9
    Fortgeschrittene/r
    Themenstarter

    Registriert seit
    25.06.2016
    Beiträge
    157
    Danke
    5
    Bekam 11 mal "Danke" in 11 Postings

    Standard AW: Projekt Mitarbeiter

    Hey,

    vielen Dank für die guten Ratschläge. Ups... ja ich wollte die Exceptions abfangen.

    Noch paar Fragen:
    1. Warum tuhst du $formulardaten nicht erst zu einem array umwandeln ?
    2. In der function welche schaut ob es errors gibt sprichst du mit $data die felder an und mit $key den namen des feldes ?
    3. Würdest du es bei der ausgabe der errors beim formular auch so machen oder hälst du dies etwas übertrieben?
    PHP-Code:
    <label>Vorname:</label><input type="text" name="form[data][vorname]" value ="<?php if(isset($formulardaten['vorname'])) print $formulardaten['vorname']?>"> <?php if(isset($errors['vorname'])){echo $errors['vorname'];} ?><br>
            <label>Nachname:</label><input type="text" name="form[data][nachname]" value ="<?php if(isset($formulardaten['nachname'])) print $formulardaten['nachname']?>"> <?php if(isset($errors['nachname']) ){echo $errors['nachname'];}?><br>
            <label>Wohnort:</label><input type="text" name="form[data][wohnort]" value = "<?php if(isset($formulardaten['wohnort'])) print $formulardaten['wohnort']?>">  <?php if(isset($errors['wohnort']) ){echo $errors['wohnort'];}?><br>
    Folgende Probleme treten jetzt auf:
    1. Die Eingaben werden nicht gefiltert! Es kommt so raus wie man es eingegeben hat.
    2. Es werden folgende Meldungen angezeigt :

    Warning: Missing argument 2 for {closure}() in E:\Web\XAMPP\htdocs\form.php on line 17
    Notice: Undefined variable: key in E:\Web\XAMPP\htdocs\form.php on line 18

    Der variable key wird nie ein wert beim testen zugefügt. Nie. und die Warning meldung kommt bestimmt weil $key nicht deklariert ist ?
    Denn als ich mal $key ganz rausgenommen habe kam keine Meldung mehr. Aber wie kann ich es nun machen ?

    Stef
    Geändert von Stef (12.01.2017 um 16:34 Uhr)

  10. #10
    Moderator Avatar von Arne Drews
    Registriert seit
    20.01.2016
    Ort
    Friedrichstadt, NF
    Beiträge
    789
    Danke
    16
    Bekam 90 mal "Danke" in 89 Postings

    Standard AW: Projekt Mitarbeiter

    Hi,

    Die beiden Meldungen kommen, weil ich vergessen habe die Keys des Array an die Closure zu übergeben, richtig muss es so aussehen:
    PHP-Code:
        $errors array_filter(
                
    array_map(
                    function( 
    $data$key ) {
                        return empty(
    trim($data))? 'Bitte ' $key ' eingeben!'null;
                    }
                    , 
    $formulardaten
                    
    array_keys$formulardaten )
                )
            ); 
    Warum tuhst du $formulardaten nicht erst zu einem array umwandeln ?
    Wozu? $formulardaten wird ja im Erfolgsfall ( also wenn die Formulardaten gesendet wurden ) ein Array zugewiesen. Und im Fehlerfall wird das auf null gesetzt.
    Dadurch kann ich an notwendigen Punkten ( siehe die Validierung ) mit !is_null() immer prüfen, ob Daten vorhanden sein müssten. Auch is_array() würde hier gehen, aber für nicht gesetzte Werte handle ich das immer gern mit null.

    In der function welche schaut ob es errors gibt sprichst du mit $data die felder an und mit $key den namen des feldes ?
    Ja richtig, ich hatte lediglich vergessen, das Array mit den Keys zu übergeben, s.o.

    Würdest du es bei der ausgabe der errors beim formular auch so machen oder hälst du dies etwas übertrieben?
    Das halte ich persönlich für übertrieben und entspricht für mein Verständnis nicht EVA.
    Ich würde die Ausgabe auf Basis des $errors-Array vorher zusammenklöppeln und in der Ausgabe dann nur kurz und knackig:
    PHP-Code:
    if ( is_null($sHtmlErrors) )
        echo 
    $sHtmlErrors
    Wobei $sHtmlErrors dann halt die zusammengelöppelte Variable ist.
    Ebenso kannst Du das auch mit dem Erfolgstext machen.

    Gruß Arne

Ähnliche Themen

  1. [suche] [S] Mitarbeiter
    Von fanboij im Forum Job Forum - Jobs für Grafiker, Programmierer und Webmaster
    Antworten: 1
    Letzter Beitrag: 27.01.2011, 17:54
  2. Suche Mitarbeiter
    Von siccario im Forum Promotion - SEO - Suchmaschine (Google & Co) – Mitarbeiter & Linkpartnersuche
    Antworten: 0
    Letzter Beitrag: 22.06.2010, 20:50
  3. Suche Mitarbeiter
    Von Sensei im Forum Promotion - SEO - Suchmaschine (Google & Co) – Mitarbeiter & Linkpartnersuche
    Antworten: 1
    Letzter Beitrag: 18.02.2009, 15:30
  4. Mitarbeiter gesucht
    Von Peppy im Forum Job Forum - Jobs für Grafiker, Programmierer und Webmaster
    Antworten: 12
    Letzter Beitrag: 22.06.2008, 18:23
  5. Mitarbeiter gesucht
    Von Rinko im Forum Promotion - SEO - Suchmaschine (Google & Co) – Mitarbeiter & Linkpartnersuche
    Antworten: 9
    Letzter Beitrag: 06.04.2005, 01:35

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •