ilch Forum » Allgemein » HTML, PHP, SQL,... » Awards Drop Down

Geschlossen
  1. #1
    User Pic
    Arik24 Mitglied
    Registriert seit
    30.12.2012
    Beiträge
    5
    Beitragswertungen
    0 Beitragspunkte
    Hallo liebes Ilch Team, da ich leider nicht viel Ahnung von php habe, hoffe ich ihr könnt mir helfen.

    In meinen Awards im Adminbereich ist mir aufgefallen, das man den Link zum Bild angeben kann. Nun möchte ich es aber so, das es ein Dropdownmenu an dieser Stelle hat, welches die möglichen Bilder aus einem Ordner ließt. Die Endungen der Dateien sollen nicht mit angezeigt werden. (sind immer .png)

    In dem ordner befindet sich ebenfalls eine index.html und eine .htaccess, diese sollen natürlich nicht mitgelistet werden.

    Der Ordner aus dem die Möglichen Bilder zur auswahl gelesen werden sollen, ist 'include/images/awards/'

    das ganze kann man irgendwie mit readdir und option value realisieren, so habe ich erfahren und auch probiert, leider alles ohne erfolg.

    Hier mal die original awards.php, wie sie aktuell bei mir ausschaut

    <?php 
    #   Copyright by: Manuel
    #   Support: www.ilch.de
    
    
    defined ('main') or die ( 'no direct access' );
    defined ('admin') or die ( 'only admin access' );
    
    $design = new design ( 'Admins Area', 'Admins Area', 2 );
    $design->header();
    
    if (!has_right(-7, 'awards')) {
        echo 'Dieser Bereich ist nicht f&uuml;r dich...';
        $design->footer();
        exit();
    }
    
    ##### F u n k t i o n e n
    
    function get_Teams () {
      
    	$squads = '';
      $erg1 = db_query("SELECT name, id FROM prefix_groups ORDER BY pos");
      while ($row = db_fetch_assoc($erg1) ) {
        $squads .= '<option>'.$row['name'].'</option>';
      }
    	return ($squads);
    	
    }
    
    ##### A k t i o n e n
    
    #Löschen
    if ($menu->getA(1) == 'd' AND is_numeric($menu->getE(1))) {
      db_query('DELETE FROM `prefix_awards` WHERE id = "'.$menu->getE(1).'" LIMIT 1');
      }
    
    #Eintragen
    if (isset($_POST['ins'])) {  
      $datum = get_datum ($_POST['datum']);
      $wofur = escape($_POST['wofur'], 'string');
      $text  = escape($_POST['text'], 'string');
      $platz = escape($_POST['platz'], 'string');
      $bild  = get_homepage(escape($_POST['bild'], 'string'));
      if ($_POST['atype'] == 'user') {
        $team = escape($_POST['name'],'string');
      } else {  
        $team = escape($_POST['team'],'string');
      }
          
      if ($menu->getA(1) == 'e' AND is_numeric($menu->getE(1))) {
        $id = $menu->getE(1);
        db_query("UPDATE `prefix_awards` SET time = '$datum', platz = '$platz',
                  team = '$team', wofur = '$wofur', bild = '$bild', text = '$text' WHERE id = $id");
        echo mysql_error();
        $menu->set_url(1,'');    
        }
      else {
        db_query("INSERT INTO `prefix_awards` (time, platz, team, wofur, bild, text) VALUES
        ('".$datum."', '".$platz."', '".$team."', '".$wofur."', '".$bild."', '".$text."')");
        }
      }
    
    #Ändern/Ausgabearray füllen
    if ($menu->getA(1) == 'e' AND is_numeric($menu->getE(1))) {
      $r = db_fetch_assoc(db_query("SELECT * FROM `prefix_awards` WHERE id = ".$menu->getE(1)));
      $r['id'] = '-e'.$r['id'];
      $t = explode('-',$r['time']);
      $r['datum'] = $t[2].'.'.$t[1].'.'.$t[0];
      }
    else {
      $r = array('id' => '', 'datum' => date('d.m.Y'), 'platz' => '', 'wofur' => '',
                 'bild' => '', 'text' => '', 'teams' => get_Teams());
      }
    
    #Ausgabe
    $tpl = new tpl('awards', 1);
    $tpl->set_ar_out($r,0);
    if (empty($r['team'])) $tpl->set_ar_out($r,1);
    else $tpl->set_ar_out($r,2);
    $tpl->set_ar_out($r,3);
    
    $erg = db_query('SELECT * FROM `prefix_awards` ORDER BY time DESC');
    while ($row = db_fetch_assoc($erg)) {
      $t = explode('-',$row['time']);
      $row['datum'] = $t[2].'.'.$t[1].'.'.$t[0];
      $tpl->set_ar_out($row,4); 
      }
    $tpl->out(5);
    
    $design->footer();
    ?>


    Ich hoffe wirklich Ihr könnt mir helfen.

    Vielen Dank

    LG Arik


    Zuletzt modifiziert von Arik24 am 30.12.2012 - 01:15:09
    0 Mitglieder finden den Beitrag gut.
  2. #2
    User Pic
    Ahrtas Moderator
    Registriert seit
    17.12.2007
    Beiträge
    2.368
    Beitragswertungen
    210 Beitragspunkte
    Ich kann es im Moment dir zwar nicht bearbeiten aber ich muss mich melden und dir ein Lob aussprechen weil du genau das beschreibst was du wie haben möchtest!

    Vorallem auch solche Details wie z.B. dass du nur PNG-Dateien verwendest, dass sich im Bild-Verzeichnis noch andere Dateien sich befinden wie html und .htaccess

    Genaue Angaben erleichtern die Arbeit erheblich und man hat größere Chancen für schnelle Hilfe und ein gutes Ergebnis!


    Das ist ein ernst gemeinter Lob (!) nicht jeder beschreibt es ausreichend geschweige denn detailreich ( egal ob User im Forum oder Kunde beim Auftrag ) - weiter so. Yeszwinker
    0 Mitglieder finden den Beitrag gut.
  3. #3
    User Pic
    Lord|Schirmer Administrator
    Registriert seit
    21.03.2007
    Beiträge
    7.681
    Beitragswertungen
    1218 Beitragspunkte
    Habs nicht getestet, aber probiers mal:

    <?php 
    #   Copyright by: Manuel
    #   Support: www.ilch.de
     
     
    defined ('main') or die ( 'no direct access' );
    defined ('admin') or die ( 'only admin access' );
     
    $design = new design ( 'Admins Area', 'Admins Area', 2 );
    $design->header();
     
    if (!has_right(-7, 'awards')) {
        echo 'Dieser Bereich ist nicht f&uuml;r dich...';
        $design->footer();
        exit();
    }
     
    ##### F u n k t i o n e n
     
    function get_Teams () {
    	$squads = '';
    	$erg1 = db_query("SELECT name, id FROM prefix_groups ORDER BY pos");
    	while ($row = db_fetch_assoc($erg1) ) {
        $squads .= '<option>'.$row['name'].'</option>';
    	}
        return ($squads);  
    }
    
    function getAwards () {
    	$squads = '';
    	$od = opendir ( 'include/images/awards' );
    	while ( $f = readdir ( $od ) ) {
    		if ( $f != '.' AND $f != '..' ) {
    			$f = substr($f, 0, -4);
    			$awards .= '<option>'.$f.'</option>';
    		}
    	}
    	return ($awards);
    }
     
    ##### A k t i o n e n
     
    #Löschen
    if ($menu->getA(1) == 'd' AND is_numeric($menu->getE(1))) {
    	db_query('DELETE FROM `prefix_awards` WHERE id = "'.$menu->getE(1).'" LIMIT 1');
    }
     
    #Eintragen
    if (isset($_POST['ins'])) {
    	$datum = get_datum ($_POST['datum']);
    	$wofur = escape($_POST['wofur'], 'string');
    	$text  = escape($_POST['text'], 'string');
    	$platz = escape($_POST['platz'], 'string');
    	$bild  = 'include/images/awards/'.escape($_POST['bild'], 'string').'.png';
    	if ($_POST['atype'] == 'user') {
    		$team = escape($_POST['name'],'string');
    	} else {
    		$team = escape($_POST['team'],'string');
    	}
        
    	if ($menu->getA(1) == 'e' AND is_numeric($menu->getE(1))) {
    		$id = $menu->getE(1);
    		db_query("UPDATE `prefix_awards` SET time = '$datum', platz = '$platz', team = '$team', wofur = '$wofur', bild = '$bild', text = '$text' WHERE id = $id");
    		echo mysql_error();
    		$menu->set_url(1,'');
    	} else {
    		db_query("INSERT INTO `prefix_awards` (time, platz, team, wofur, bild, text) VALUES ('".$datum."', '".$platz."', '".$team."', '".$wofur."', '".$bild."', '".$text."')");
        }
    }
     
    #Ändern/Ausgabearray füllen
    if ($menu->getA(1) == 'e' AND is_numeric($menu->getE(1))) {
    	$r = db_fetch_assoc(db_query("SELECT * FROM `prefix_awards` WHERE id = ".$menu->getE(1)));
    	$r['id'] = '-e'.$r['id'];
    	$t = explode('-',$r['time']);
    	$r['datum'] = $t[2].'.'.$t[1].'.'.$t[0];
    } else {
    	$r = array('id' => '', 'datum' => date('d.m.Y'), 'platz' => '', 'wofur' => '', 'bild' => getAwards(), 'text' => '', 'teams' => get_Teams());
    }
     
    #Ausgabe
    $tpl = new tpl('awards', 1);
    $tpl->set_ar_out($r,0);
    if (empty($r['team'])) {
    	$tpl->set_ar_out($r,1);
    } else {
    	$tpl->set_ar_out($r,2);
    }
    $tpl->set_ar_out($r,3);
     
    $erg = db_query('SELECT * FROM `prefix_awards` ORDER BY time DESC');
    while ($row = db_fetch_assoc($erg)) {
    	$t = explode('-',$row['time']);
    	$row['datum'] = $t[2].'.'.$t[1].'.'.$t[0];
    	$tpl->set_ar_out($row,4); 
    }
    $tpl->out(5);
     
    $design->footer();
    ?>


    und in der include/admin/templates/awards.htm folgendes ändern:

    von
    <td class="Cmite">Bild zum Award</td>
    <td class="Cnorm"><input name="bild" size="40" value="{bild}" /></td>

    zu
    <td class="Cmite">Bild zum Award</td>
    <td class="Cnorm"><select name="bild"><option>bitte auswählen</option>{bild}</select></td>


    Die Award-Bilder in den Ordner include/images/awards/ setzen!
    Neue Funktion getAwards();


    Zuletzt modifiziert von Lord|Schirmer am 30.12.2012 - 09:14:20
    rules :: doku :: faq :: linkus
    0 Mitglieder finden den Beitrag gut.
  4. #4
    User Pic
    Arik24 Mitglied
    Registriert seit
    30.12.2012
    Beiträge
    5
    Beitragswertungen
    0 Beitragspunkte
    Erstmal Danke für das Lob Arthas auch wenn meine Formulierung hinreichend wirr erschien (für mich zumindest)^^ Aber ich seh das so, wer was will sollte auch genau sagen wie^^ und ein Danke darf am ende auch nicht fehlen, ist ja das mindeste lachen

    @ Schirmer: Soweit funktioniert das, jedoch werden mir noch die .htacess und die index.html gelistet.

    Ein weiteres kleines mango ist, das es beim editieren nicht wieder ausließt welches Bild ausgewählt war.

    Ansonsten funzt alles klasse, würde mich freuen wenn man das noch beheben könnte

    Ich danke euch soweit lachen

    Edit: Habe jetzt die zwei Dateien aus der get Funktion ausgeschlossen, bleibt nur noch das wieder ausgelesen wird beim editieren

    function getAwards () {
        $squads = '';
        $od = opendir ( 'include/images/awards' );
        while ( $f = readdir ( $od ) ) {
            if ( $f != '.' AND $f != '..' AND $f != 'index.htm' AND $f != '.htaccess' ) {
                $f = substr($f, 0, -4);
                $awards .= '<option>'.$f.'</option>';
            }
        }
        return ($awards);
    }



    Zuletzt modifiziert von Arik24 am 30.12.2012 - 12:54:50
    0 Mitglieder finden den Beitrag gut.
  5. #5
    User Pic
    Saarlonz Hall Of Fame
    Registriert seit
    07.08.2008
    Beiträge
    3.003
    Beitragswertungen
    235 Beitragspunkte
    Mal eine doofe frage, aber warum befinden sich dort eine .htacces und eine index.html Datei?? Verstehe den Sinn nicht.
    0 Mitglieder finden den Beitrag gut.
  6. #6
    User Pic
    Arik24 Mitglied
    Registriert seit
    30.12.2012
    Beiträge
    5
    Beitragswertungen
    0 Beitragspunkte
    Musst du auch nicht...
    Aber ich sags dir trotzdem gern.. lächeln

    Auserdem, es gibt keine doofen Fragen, nur doofe Antworten zunge

    die htacces hat eine Regel, welche es verbietet die Bilder extern zu verlinken, stattdessen ein low traffic Bild verlinkt alla "ich klaue Bilder" lachen die index.html ist leer und unterbindet nur den aufruf der ordner struktur (Warum dafür nicht auch htacess? -> schon getestet und für schlecht empfunden, da wenn ich die zb auf designs ordner lege, das design zerschossen wird)

    Mir ist übrigens gerade auch aufgefallen, das beim editieren garnichts gelistet wird auser bitte auswählen

    LG


    Zuletzt modifiziert von Arik24 am 30.12.2012 - 13:15:34
    0 Mitglieder finden den Beitrag gut.
  7. #7
    User Pic
    Mairu Coder
    Registriert seit
    16.06.2006
    Beiträge
    15.334
    Beitragswertungen
    387 Beitragspunkte
    function getAwards($preSelected = '') {
        $awards = '';
        $od = opendir ( 'include/images/awards' );
        while ( $f = readdir ( $od ) ) {
            if (preg_match('%(.+)\.(png)$%i', $f, $matches) === 0
                || strtolower($matches[2]) !== 'png'
            ) {
                continue;
            }
            $selected = ($matches[1] === $preSelected) ? ' selected="selected"' : '';
            $awards .= '<option' . $selected . '>'.$matches[1].'</option>';
        }
        return $awards;
    }


    Dann beim Editieren den gespeicherten Wert der Funktion mitgeben, damit dieser vorausgewählt ist, also
    $r['bild'] = getAwards($r['bild']);

    wenn ich das richtig sehe.

    Als kleiner Hinweis noch, die id solltest du besser so lassen und im Template das -e vor {id} setzen.


    Zuletzt modifiziert von Mairu am 30.12.2012 - 16:38:24
    Und auch immer mal ein Blick auf die FAQ werfen. | Mairus Ilchseite
    0 Mitglieder finden den Beitrag gut.
  8. #8
    User Pic
    Arik24 Mitglied
    Registriert seit
    30.12.2012
    Beiträge
    5
    Beitragswertungen
    0 Beitragspunkte
    huhu Mairu, soweit funzt das, die Liste ist auch im edit, jedoch hab ich da irgendwie ne leerzeile drinnen. leider ist auch nicht ausgewählt, welches man gespeichert hatte bei dem user sondern steht auf bitte wählen

    Was meinst du mit id und -e?

    bei dem hier?

     <a href="admin.php?awards-e{id}"><img src="include/images/icons/edit.gif" border="0" alt="{_lang_change}" title="{_lang_change}" /></a>
      <a href="#" onclick="delcheck({id})"><img src="include/images/icons/del.gif" border="0" alt="{_lang_delete}" title="{_lang_delete}" /></a>


    das is bei mir so hab da nix geändert, nur keine ahnung wieso da noch ne leerzeile ist :s


    Zuletzt modifiziert von Arik24 am 04.01.2013 - 13:44:52
    0 Mitglieder finden den Beitrag gut.
  9. #9
    User Pic
    Mairu Coder
    Registriert seit
    16.06.2006
    Beiträge
    15.334
    Beitragswertungen
    387 Beitragspunkte
    Mit der id meine ich, dass dann bei {id} statt der id als z.B. 5 -e5 eingefügt wird, was z.B. bei dem Link wie awards-e{id} oder auch in der Zeile darunter Fehler erzeugen würde, wenn dieser Teil des Template ausgegeben wird, weiß ich jetzt nicht. Wenn du es nicht selbst geschrieben hast, und alles so funktioniert, dann lass es lieber so.

    Das mit der Leerzeile weiß ich auch nicht, du solltest mal schauen, an welcher Stelle die ist und ob es ggf. eine Datei gibt, die so heißt ggf. auch mit einem Zeichen, was nicht dargestellt werden kann.

    Mhh wegen der Vorauswahl, hatte nicht gesehen, dass der komplette Pfad in der Datenbank gespeichert wird. Hier mal die Datei, hoffentlich ohne weitere Fehler.

    <?php
    
    #   Copyright by: Manuel
    #   Support: www.ilch.de
    
    
    defined('main') or die('no direct access');
    defined('admin') or die('only admin access');
    
    $design = new design('Admins Area', 'Admins Area', 2);
    $design->header();
    
    if (!has_right(-7, 'awards')) {
        echo 'Dieser Bereich ist nicht f&uuml;r dich...';
        $design->footer();
        exit();
    }
    
    ##### F u n k t i o n e n
    
    function get_Teams() {
        $squads = '';
        $erg1 = db_query("SELECT name, id FROM prefix_groups ORDER BY pos");
        while ($row = db_fetch_assoc($erg1)) {
            $squads .= '<option>' . $row['name'] . '</option>';
        }
        return ($squads);
    }
    
    function getAwards($preSelected = '') {
        $awards = '';
        $od = opendir ( 'include/images/awards' );
        while ( $f = readdir ( $od ) ) {
            if (preg_match('%^(.+)\.png$%i', $f, $matches) === 0) {
                continue;
            }
            $selected = (getAwardImagePath($matches[1]) === $preSelected) ? ' selected="selected"' : '';
            $awards .= '<option' . $selected . '>'.$matches[1].'</option>';
        }
        return $awards;
    }
    
    function getAwardImagePath($imageName) {
        return 'include/images/awards/' . $imageName . '.png';
    }
    
    ##### A k t i o n e n
    #Löschen
    if ($menu->getA(1) == 'd' AND is_numeric($menu->getE(1))) {
        db_query('DELETE FROM `prefix_awards` WHERE id = "' . $menu->getE(1) . '" LIMIT 1');
    }
    
    #Eintragen
    if (isset($_POST['ins'])) {
        $datum = get_datum($_POST['datum']);
        $wofur = escape($_POST['wofur'], 'string');
        $text = escape($_POST['text'], 'string');
        $platz = escape($_POST['platz'], 'string');
        $bild = getAwardImagePath(escape($_POST['bild'], 'string'));
        if ($_POST['atype'] == 'user') {
            $team = escape($_POST['name'], 'string');
        } else {
            $team = escape($_POST['team'], 'string');
        }
    
        if ($menu->getA(1) == 'e' AND is_numeric($menu->getE(1))) {
            $id = $menu->getE(1);
            db_query("UPDATE `prefix_awards` SET time = '$datum', platz = '$platz', team = '$team', wofur = '$wofur', bild = '$bild', text = '$text' WHERE id = $id");
            echo mysql_error();
            $menu->set_url(1, '');
        } else {
            db_query("INSERT INTO `prefix_awards` (time, platz, team, wofur, bild, text) VALUES ('" . $datum . "', '" . $platz . "', '" . $team . "', '" . $wofur . "', '" . $bild . "', '" . $text . "')");
        }
    }
    
    #Ändern/Ausgabearray füllen
    if ($menu->getA(1) == 'e' AND is_numeric($menu->getE(1))) {
        $r = db_fetch_assoc(db_query("SELECT * FROM `prefix_awards` WHERE id = " . $menu->getE(1)));
        $r['id'] = '-e' . $r['id'];
        $t = explode('-', $r['time']);
        $r['datum'] = $t[2] . '.' . $t[1] . '.' . $t[0];
        $r['bild'] = getAwards($r['bild']);
    } else {
        $r = array('id' => '', 'datum' => date('d.m.Y'), 'platz' => '', 'wofur' => '', 'bild' => getAwards(), 'text' => '', 'teams' => get_Teams());
    }
    
    #Ausgabe
    $tpl = new tpl('awards', 1);
    $tpl->set_ar_out($r, 0);
    if (empty($r['team'])) {
        $tpl->set_ar_out($r, 1);
    } else {
        $tpl->set_ar_out($r, 2);
    }
    $tpl->set_ar_out($r, 3);
    
    $erg = db_query('SELECT * FROM `prefix_awards` ORDER BY time DESC');
    while ($row = db_fetch_assoc($erg)) {
        $t = explode('-', $row['time']);
        $row['datum'] = $t[2] . '.' . $t[1] . '.' . $t[0];
        $tpl->set_ar_out($row, 4);
    }
    $tpl->out(5);
    
    $design->footer();
    Und auch immer mal ein Blick auf die FAQ werfen. | Mairus Ilchseite
    0 Mitglieder finden den Beitrag gut.
  10. #10
    User Pic
    Arik24 Mitglied
    Registriert seit
    30.12.2012
    Beiträge
    5
    Beitragswertungen
    0 Beitragspunkte
    Funktioniert jetzt super lachen

    An dem template hab ich nichts geändert auser das was Lord Schirmer obeb schrieb. Ansonsten war die original^^

    Ich danke euch vielmals


    Zuletzt modifiziert von Arik24 am 04.01.2013 - 17:28:49
    0 Mitglieder finden den Beitrag gut.
Geschlossen

Zurück zu HTML, PHP, SQL,...

Optionen: Bei einer Antwort zu diesem Thema eine eMail erhalten