• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

dropdown menü

lampe

New member
hallo zusammen

Ich mache als nebenprojekt zuhause ein eigenes Forum (sportforum). Ich habe im cgi-bin folgende Ordnerstruktur:

\cgi-bin\forum\daten\forum\

dort sind die Ordner:
Boxen
Eishockey
Fussball
etc.

und in diesen die Unterordner wie Premier League etc.

Ich möchte nun ein Dropdown menü mit den Ordnern haben:

habe ich auch

PHP:
foreach $dirThema (@dirThemen) {
	if ($dirThema eq $_) {
		print qq~
			"<option size='3' value='$dirRubrik' onChange='submit()'>$dirRubrik</option>"
		~;
	}
}

jetzt möchte ich dass wenn ich eines dieser Themen angewählt habe, dass sich der jeweilige Unterordner in einem neuen Dropdown angezeigt wird.

Wie kann ich das machen?
Danke für eure Hilfe

Gruss
 
na, da wo du das formular hinschickst kommt doch eine POST bzw. GET Variable (name des selects) an. diese Variable benutzt du für die gleiche Schleife.
 
und, da ich weiß, dass du in Perl programmierst, auch hier wäre der Einsatz des CGI Moduls (das du vermutlich sowieso eingebunden hast) sinnvoll. Dummerweise nennt es das Modul popup_menu, aber damit kannst du leicht aus Datenstrukturen eine HTML Auswahliste erzeugen, ohne immer wieder die gleichen Schleifen zu erzeugen. Dann ist das Javascript Event hier an der falschen Stelle. Du änderst ja nicht den wert(value) des option Elementes, sondern der Auswahlliste (des select Elements).

Und ich befürchte du schreibst deine Skripte immer noch nicht strict (wegen dem fehlenden my im schleifenkonstruktor) . Lass es dir gesagt sein, dass ist das schlimmste was du machen kannst, wenn dein Projekt eine gewisse Größe erreicht hat. Du sparst Zeit für die Fehlersuche, wenn du dein Skript strict machst und dir die Warnungen ausgeben läßt.

Ansonsten ist dein Vorhaben recht komplex. Ohne Neuladen der Seite müßtest du alles mit JS machen.
 
ja stimmt, da hast du recht, strict habe ich da nicht..
ja ich habe auch gemerkt das dies mit onchange gar nie hätte klappen können, naja, wie würdest du das den realisieren dass du wie eine Navigation durch die Verzeichnisse hast?
 
ich habs nun so gemacht:

PHP:
#!/usr/bin/perl

####################################################################################
# Name			: 
# Author		: 
# Version		: 
# Created		: 
# Last modified	: 
####################################################################################

use CGI qw(:standard);
use CGI::Carp qw(fatalsToBrowser);
use strict;

require "functions.pl";

$cgi_nam   = '' ;
$start_dir = 'C:/Program Files/Apache Group/Apache2/cgi-bin/forum' ;
$start_url = '/forum/perl/' ;

#############################################

@para = split(/&/ , $ENV{'QUERY_STRING'}) ;
$para[0]="" if !$para[0] ;
$para[1]=0  if !$para[1] ;
read_form();

if ($para[0] eq "next") {	
	read_dir($FM{'next'});	
	show_listing();
	} 
elsif ($para[0] eq "back") {	
	read_dir($FM{'back'});	
	show_listing();} 
else {	
	read_dir();	
	show_listing();}
	
#############################################
sub read_dir {
	my $open_dir = shift;
	my @dirlist;
	my $item;
	opendir (DIR, "$start_dir/$open_dir.") || die "Kann das Verzeichnis -$start_dir/$open_dir- nicht öffnen!" ;	

@dirlist=grep(/./,readdir(DIR));
closedir(DIR);

foreach $item (sort(@dirlist)) {	
	if ($item =~m/\.[a-zA-Z]/) {	 	
		# Nach Dateien suchen...		
		push (@files, $item);	 } 
	else {	 	
		# Nach Unter-Verzeichnisse suchen...		
		push (@dirs, $item);	 }}
		# Anzahl aller Verzeichnisse...
		$num = @dirs;
		# Anzahl aller Dateien...
		$row = @files;}

###############################

sub show_listing {
	$FM{'next'} =~ /^(.*)[\/\\][^\/\\]+$/;
	my $back = $1;
	my $end;
	# ?????????????????????? #
	if ($para[0] eq 'back') {
		$title = $back;
		} 
	else {
		$title = $FM{'title'};
		}
	print html_head() ;
	print "<h1>Index of / " . $title . "</h1>\n<pre>\n" ;
	print "<hr />\n";
	print "<img src=\"" . "/folder.gif\" alt=\"[" . $dirs[$i] . "]\"> <a href=\"" . $cgi_nam . "?back&back=" . $back . "&next=" . $back . "\">Parent Directory</a>\n" ;
	if ($num ne '0') {	
		for ($i=0;$i<$num;$i++) {		
			if ($dirs[$i] =~/\./) {			
				# $end auf on setzen wenn nur noch drei Punkte vorhanden sind...			
				if ($num<3) { $end = 'on';}		} 
				else {			
					# Verzeichnisse ausgeben...			
					print "<input type=\"checkbox\" name=\"$dirs[i]\" /> <img src=\"" . "/folder.gif\" alt=\"[" . $dirs[$i] . "]\"> <a href=\"" . $cgi_nam . "?next&next=" . $FM{'next'} . "/" . $dirs[$i] . "&title=" . $dirs[$i] . "\">" . $dirs[$i] . "/</a>\n" ;		
					}	
				}
			}
			# Punkt setzen wenn kein Verzeichniss mehr vorhanden...
	print ".<br />\n" 
		if ($end eq 'on');
			if ($row ne '0') {	
				for ($j=0;$j<$row;$j++) {		
					# Dateien ausgeben...		
					print "<input type=\"checkbox\" name=\"$dirs[i]\" /> <img src=\"" .  "/text.gif\" alt=\"[" . $files[$j] . "]\"> <a href=\"" . $start_url . "" . $FM{'next'} . "/" . $files[$j] . "\">" . $files[$j] . "</a>\n" ;
					}
					}
					print "</pre>\n";
					print "<hr />\n";
					print "</body>\n</html>\n" ;}
#############################################

sub html_head {
	my $tpl = "Content-Type: text/html\n\n<!doctype html public \"-//w3c//dtd html 4.01 transitional//en\">\n\n" ;
	$tpl .= "<html>\n<head>\n\t<title>Index of / " . $FM{'title'} . "</title>\n</head>\n\n<body bgcolor=\"white\" link=\"blue\" alink=\"blue\" vlink=\"blue\">\n" ;
	return $tpl;
	}

#############################################
sub read_form {
	my ($buffer, $pair, $name, $value);
	my @pairs;
	
if ($ENV{'REQUEST_METHOD'} eq "GET") { 
	$buffer = $ENV{'QUERY_STRING'}; 
	}
elsif ($ENV{'REQUEST_METHOD'} eq "POST") { 
	read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); 
	}
@pairs = split(/&/, $buffer);

foreach $pair (@pairs) {    
	($name, $value) = split(/=/, $pair);    
	$value =~ tr/+/ /;    
	$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;    
	$name =~ tr/+/ /;    $name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;    
	
# Mehrere Datenfelder gleichen Namens als Kommagetrennte Liste (z.B. für Checkboxen)    
if (defined $FM{$name}) { 
	$FM{$name} = $FM{$name}.",".$value; }    
else { $FM{$name} = $value; }}}
 
Zurück
Oben