dropdownliste übergabe problem

Johanni

Mitglied
Guten Abend,
Ich habe folgendes Problem:
Ich habe eine Datei erstellt, mit der ich Daten aus einer Form an meine DB senden kann. Das klappt soweit auch gut. Nun möchte ich in dieser Form noch eine Dropdownliste haben mir die Dateien aus einem Ordner auf dem server ausliest und den entsprechenden wert mit an die bd sendet.
D.h. auf dem Server sind folgende Dateien test.php, beispiel.zip und diese werte sollen in der dropdownliste stehen. Je nach dem welchen Wert ich auswähle, soll dieser mit an die Datenbank geschickt werden z.B. "test.php" soll an Tabelle testdb Deld file gesendet werden.
Die Dropdownliste habe ich geschrieben und sie funktioniert auch, konkret kann ich
a) nicht das dropdown script in das eigentliche Übergabescript einbinden und
b) weiß ich nciht wie ich den wert mit übergebe

hat jemand eine idee?

Vielen Dank & Gruss

hier die scripte:
addentry.php
PHP:
<?php
include("include.php");
if (!$_POST) {
	$display_block = "
	<form method=\"post\" action=\"".$_SERVER["PHP_SELF"]. "\">
	<p><strong>Name</strong><br/>
	<input type=\"text\" name=\"name\" size=\"30\" maxlength=\"75\"><br/>
	<strong>Beschreibung</strong><br/>
	<textarea name=\"description\" cols=\"50\" rows=\"4\" wrap=\"virtual\"></textarea><br>
	<strong>Date</strong><br/>
	<input type=\"text\" name=\"date\" size=\"20\" maxlength=\"10\"><br/>
	</p>
	<input type=\"submit\" name=\"submit\" value=\"ok\">
	</form>";
	} else if ($_POST) {
	// insert data to tables
	if (($_POST["name"] == "") || ($_POST["description"] == "")) {
		header("Location: addentry.php");
		exit;
	}
	// connect to database
	doDB();
	//add to table
	$add_master_sql = "INSERT INTO alben (date_added, name, description, date) VALUES (now(), '".$_POST["name"]."', '".$_POST["description"]."', '".$_POST["date"]."')";
	$add_master_res = mysqli_query($mysqli, $add_master_sql)
						or die(mysqli_error($mysqli));
						
	mysqli_close($mysqli);
	$display_block = "<p> Der Datensatz wurde hinzugefügt! </p>";
	}
?>
<html>
<head>
</head>
<body>
<?php echo $display_block; ?>
</body>
</html>

und raeddir.php
PHP:
<?php
$dirname = "./";
$dh = opendir($dirname);

while (!(($file = readdir($dh)) === false)) {
	
	echo "<select name=\"sel_file\"><option>$file</option>";
}
closedir($dh);
?>
 
Hi,

erstmal Willkommen im Forum :)

dann gleich mal zu deinem Problem:
Den Wert von einem Dropdown-Feld übergibst du anhand des "value"-Attributs in HTML. In deinem Fall willst du den Dateinamen in die Dropdown schreiben und diesen ebenfalls als Wert mitgeben.
Das kannst du mit folgender Änderung in deiner "readdir.php" machen:

PHP:
$dirname = "./";
$dh = opendir($dirname);

echo '<select name="sel_file">';
while (!(($file = readdir($dh)) === false)) { 
  echo '<option value="' . $file . '">' . $file . '</option>';
}
echo '</select>';

closedir($dh);

Soweit mal das Problem mit dem Übergabewert. Wie diese Datei allerdings mit deiner "addentry.php" zusammenhängt, kann ich mit dem Codeschnipseln nicht sagen ;) (wegen Punkt a: "nicht das dropdown script in das eigentliche Übergabescript einbinden")

// Edit:
Tip: Anstatt dass du dich mit den ewigen Backslashes (\) ärgerst, kannst du Strings oder echo-Ausgaben in PHP auch mit einfachen Anführungszeichen schreiben. Dann kannst du dort ganz einfach die normalen Anführungszeichen verwenden.

Beispiel:
PHP:
// Anstatt:
$display_block = "
    <form method=\"post\" action=\"".$_SERVER["PHP_SELF"]. "\">
    <p><strong>Name</strong><br/>
    <input type=\"text\" name=\"name\" size=\"30\" maxlength=\"75\"><br/>
    <strong>Beschreibung</strong><br/>
    <textarea name=\"description\" cols=\"50\" rows=\"4\" wrap=\"virtual\"></textarea><br>
    <strong>Date</strong><br/>
    <input type=\"text\" name=\"date\" size=\"20\" maxlength=\"10\"><br/>
    </p>
    <input type=\"submit\" name=\"submit\" value=\"ok\">
    </form>"; 

// Vorschlag:
$display_block = '
    <form method="post" action="' . $_SERVER["PHP_SELF"] . '">
    <p><strong>Name</strong><br/>
    <input type="text" name="name" size="30" maxlength="75"><br/>
    <strong>Beschreibung</strong><br/>
    <textarea name="description" cols="50" rows="4" wrap="virtual"></textarea><br>
    <strong>Date</strong><br/>
    <input type="text" name="date" size="20" maxlength="10"><br/>
    </p>
    <input type="submit" name="submit" value="ok">
    </form>';

Sieht doch gleich viel übersichtlicher aus, oder? ;)

PS: @Moderator: Bitte ins PHP-Forum verschieben, ich denke da passt das besser rein ;)

Gruß
Bratkartoffel
 
Zuletzt bearbeitet:
@Bratkartoffel

Sauber, Vielen Dank für den Tipp, denke damit sollte ich weiterkommen. Zu dem Verbinden der beiden scripts. Das sind die kompletten scripst und keine code-schnipsel. Wie dem auch sei vielleicht hat sonst ncoh jemand eine Idee wie man das elegant lösen kann aus zwei mach eins!

nochmals Danke Bratkartoffel
 
Keine Ursache ;)

Also, du willst die "readdir.php" in deine "addentry.php" einbauen; Wenn ich das richtig deute, dann wahrscheinlich in den $display_block in das Formular, oder?

Nun, in dem Falle gäbe es mehrere Möglichkeiten ;) Zum Beispiel einfaches Copy-Paste-Verfahren oder per include und leicht modifizierter "readdir.php".
 
@ Bratkartoffel
nochmals Danke dass du am Ball bleibst- also du hast recht, ich würde den code gerne in die addentry.php einfügen, jeodch ist das nicht so leicht. habe das schöne copy paste versucht, allerdings klappte das nicht.
Kannst du mir vvielleicht zeigen wie du den code einbinden würdest?!
wäre stark!
meine idee wäre: über dem submit butten den code einzufügen, allerdings t das wie gesagt nicht.


PHP:
<?php 
include("include.php"); 
if (!$_POST) { 
    $display_block = " 
    <form method=\"post\" action=\"".$_SERVER["PHP_SELF"]. "\"> 
    <p><strong>Name</strong><br/> 
    <input type=\"text\" name=\"name\" size=\"30\" maxlength=\"75\"><br/> 
    <strong>Beschreibung</strong><br/> 
    <textarea name=\"description\" cols=\"50\" rows=\"4\" wrap=\"virtual\"></textarea><br> 
    <strong>Date</strong><br/> 
    <input type=\"text\" name=\"date\" size=\"20\" maxlength=\"10\"><br/> 
    </p> 
// readdir code
    <input type=\"submit\" name=\"submit\" value=\"ok\"> 
    </form>"; 
    } else if ($_POST) { 
    // insert data to tables 
    if (($_POST["name"] == "") || ($_POST["description"] == "")) { 
        header("Location: addentry.php"); 
        exit; 
    } 
    // connect to database 
    doDB(); 
    //add to table 
    $add_master_sql = "INSERT INTO alben (date_added, name, description, date) VALUES (now(), '".$_POST["name"]."', '".$_POST["description"]."', '".$_POST["date"]."')"; 
    $add_master_res = mysqli_query($mysqli, $add_master_sql) 
                        or die(mysqli_error($mysqli)); 
                         
    mysqli_close($mysqli); 
    $display_block = "<p> Der Datensatz wurde hinzugefügt! </p>"; 
    } 
?> 
<html> 
<head> 
</head> 
<body> 
<?php echo $display_block; ?> 
</body> 
</html>
 
Joa, bevor ich ins Bett gehe, mache ich hier noch fertig ;)

Dazu nehme ich einfach den Code den du gerade gepostet hast ;)

PHP:
<?php 
include("include.php"); 
if (!$_POST) { 
    $display_block = " 
    <form method=\"post\" action=\"".$_SERVER["PHP_SELF"]. "\"> 
    <p><strong>Name</strong><br/> 
    <input type=\"text\" name=\"name\" size=\"30\" maxlength=\"75\"><br/> 
    <strong>Beschreibung</strong><br/> 
    <textarea name=\"description\" cols=\"50\" rows=\"4\" wrap=\"virtual\"></textarea><br> 
    <strong>Date</strong><br/> 
    <input type=\"text\" name=\"date\" size=\"20\" maxlength=\"10\"><br/> 
    </p> 
";
    
    // Ab hier jetzt den Code von der extra php-Datei, nur statt dem echo (Ausgabe) 
    // schreiben wirs in die Variable $display_block.
    $display_block .= '<select name="sel_file">';
    while (!(($file = readdir($dh)) === false)) { 
      $display_block .= '<option value="' . $file . '">' . $file . '</option>';
    }
    $display_block .= '</select>';
    
    // Ab hier wieder den normalen Code :)
    $display_block .= "
    <input type=\"submit\" name=\"submit\" value=\"ok\"> 
    </form>"; 
    } else if ($_POST) { 
    // insert data to tables 
    if (($_POST["name"] == "") || ($_POST["description"] == "")) { 
        header("Location: addentry.php"); 
        exit; 
    } 
    // connect to database 
    doDB(); 
    //add to table 
    $add_master_sql = "INSERT INTO alben (date_added, name, description, date) VALUES (now(), '".$_POST["name"]."', '".$_POST["description"]."', '".$_POST["date"]."')"; 
    $add_master_res = mysqli_query($mysqli, $add_master_sql) 
                        or die(mysqli_error($mysqli)); 
                         
    mysqli_close($mysqli); 
    $display_block = "<p> Der Datensatz wurde hinzugefügt! </p>"; 
    } 
?> 
<html> 
<head> 
</head> 
<body> 
<?php echo $display_block; ?> 
</body> 
</html>

Der Operator ".=" dient zum Anhängen von Variablen an einen String. Das ist die Kurzform für
$a = $a . $b;

Bei deinem Beispiel schreibe also erst das Formular, so wei ich will in die Variable $display_block. Dann wird Stück für Stück in der While-Schleife das Dropdown angehängt. Am Ende der While Schleife mache ich den Dropdown noch fertig, und hänge den Rest noch hinten ran.

Somit hast du am Ende dein $display_block mit dem Formular, welches dein Dropdown enthält.

Bei Fragen bin ich dann morgen Abend wieder erreichbar ;)

Gruß & Gute Nacht :)
Bratkartoffel
 
@Bratkartoffel

Großartig! es klappt hervorragend!
Hatte leider jetzt erst Zeit es auszuprobieren!

Vielen Dank für deine Tolle Hilfe!

Gruss
 
@ Bratkartoffel

Hätte da doch noch ein Problem.
Das mit der Datei klappt wunderbar und nun möchte ich noch, dass die dateigröße der ausgewählten datei an die datenbank geschickt wird.
das script zum filesizen habe ich wieder hinbekommen, doch hapert es mit der einbindung.
eine idee?
habe es hinter das readdir script gesteckt und eigentlich auch die werte zum übergeben an die db angeweißen.

HILFE!!!?

DANKE & GRUSS

PHP:
<?php  
include("include.php");  
if (!$_POST) {  
    $display_block = "  
    <form method=\"post\" action=\"".$_SERVER["PHP_SELF"]. "\">  
    <p><strong>Name</strong><br/>  
    <input type=\"text\" name=\"name\" size=\"30\" maxlength=\"75\"><br/>  
    <strong>Beschreibung</strong><br/>  
    <textarea name=\"description\" cols=\"50\" rows=\"4\" wrap=\"virtual\"></textarea><br>  
    <strong>Date</strong><br/>  
    <input type=\"text\" name=\"date\" size=\"20\" maxlength=\"10\"><br/>  
    </p>  
";   
    // opt box to select file for download
   	$dirname = "./";
	$dh = opendir($dirname);
    $display_block .= '<select name="sel_file">'; 
    while (!(($file = readdir($dh)) === false)) {  
      $display_block .= '<option value="' . $file . '">' . $file . '</option>'; 
    } 
    $display_block .= '</select>'; 
	// select file end
	// size of file
	$file_size = "test.zip";
    $seize = filesize("$file_size");
    $size_kb = $size/1024;
    $display_block .= " 
    <input type=\"submit\" name=\"submit\" value=\"ok\">  
    </form>";  
    } else if ($_POST) {  
    // insert data to tables  
    if (($_POST["name"] == "") || ($_POST["description"] == "")) {  
        header("Location: addentry.php");  
        exit;  
    } 
	 
    // connect to database  
    doDB();  
    //add to table  
    $add_master_sql = "INSERT INTO alben (date_added, name, description, date, download, size) VALUES (now(), '".$_POST["name"]."', '".$_POST["description"]."', '".$_POST["date"]."', '".$_POST["sel_file"]."', '".$_POST["size_kb"]."')";  
    $add_master_res = mysqli_query($mysqli, $add_master_sql)  
                        or die(mysqli_error($mysqli));  
                          
    mysqli_close($mysqli);  
    $display_block = "<p> Der Datensatz wurde hinzugefügt! </p>";  
    }  
?>  
<html>  
<head>  
</head>  
<body>  
<?php echo $display_block; ?>  
</body>  
</html>
 
Hallo,

würde die Dateigröße nicht extra in das Formular rein schreiben und dann weiter an die Datenbank schicken. Da kann man den Wert zu einfach verändern / manipulieren.

Rufe die Dateigröße lieber erst kurz vor dem abschicken der Query ab.
Also in etwa so:

PHP:
<?php  
include("include.php");  
if (!$_POST) {  
    $display_block = "  
    <form method=\"post\" action=\"".$_SERVER["PHP_SELF"]. "\">  
    <p><strong>Name</strong><br/>  
    <input type=\"text\" name=\"name\" size=\"30\" maxlength=\"75\"><br/>  
    <strong>Beschreibung</strong><br/>  
    <textarea name=\"description\" cols=\"50\" rows=\"4\" wrap=\"virtual\"></textarea><br>  
    <strong>Date</strong><br/>  
    <input type=\"text\" name=\"date\" size=\"20\" maxlength=\"10\"><br/>  
    </p>  
";   
    // opt box to select file for download
   	$dirname = "./";
	$dh = opendir($dirname);
    $display_block .= '<select name="sel_file">'; 
    while (!(($file = readdir($dh)) === false)) {  
      $display_block .= '<option value="' . $file . '">' . $file . '</option>'; 
    } 
    $display_block .= '</select>'; 
	// select file end
    $display_block .= " 
    <input type=\"submit\" name=\"submit\" value=\"ok\">  
    </form>";  
    } else if ($_POST) {  
    // insert data to tables  
    if (($_POST["name"] == "") || ($_POST["description"] == "")) {  
        header("Location: addentry.php");  
        exit;  
    } 
	 
    // size of file
    $size = filesize($_POST['sel_file']);
    $size_kb = $size/1024;
    // connect to database  
    doDB();  
    //add to table  
    $add_master_sql = "INSERT INTO alben (date_added, name, description, date, download, size) VALUES (now(), '".$_POST["name"]."', '".$_POST["description"]."', '".$_POST["date"]."', '".$_POST["sel_file"]."', '".$size_kb."')";  
    $add_master_res = mysqli_query($mysqli, $add_master_sql)  
                        or die(mysqli_error($mysqli));  
                          
    mysqli_close($mysqli);  
    $display_block = "<p> Der Datensatz wurde hinzugefügt! </p>";  
    }  
?>  
<html>  
<head>  
</head>  
<body>  
<?php echo $display_block; ?>  
</body>  
</html>

Gruß
Bratkartoffel
 
Bratkarftoffel!

Ganz ganz groß! Vielen Dank für deine Hilfe!
Hast du vielleicht auch ncoh ne Idee wie die raeddir function mir nur .zip ausgiebt?

Kann dich leider nicht nochmal bewerten aber deine Hilfe war super!
Danke und Gruss
 
Zurück