[php / Js] Anzahl der formulare On the Fly ändern

quicksilver

Lt. Junior Grade
Registriert
Jan. 2004
Beiträge
363
Hallo ich bin auf der suche nach einer möglichkeit z.b. per javascript. Dynamisch die Anzahl von Formularen zu ändern. Ich möchte halt das da z.b. ein textfeld ist wo ich die anzahl eingebe und das die seite dann kurz aktualisiert wird und die neue anzahl der formulare geändert wird.

Das ist das was ich im moment habe:

PHP:
<?php

if(checkRights($myid, gallerie_pic_up)) {
$headline = "Bilder hochladen";
$content = "";

$forms = $_GET["forms"];
if ($forms == "") { $forms = "10"; }
	
if ($_POST['action'] == "send") 
{

	$fehlernr = "0";
          // start for loop
		 //$dir = "../".$picpath."tmp/";
 		$dir = $picpath."tmp/";
		for($x=0;$x<$forms;$x++)
		{
				if ($_FILES['uploadFile'. $x]['name']) 
				{
				if(ereg(".jpg$",$_FILES['uploadFile'. $x]['name']) || ereg(".jpeg$",$_FILES['uploadFile'. $x]['name']))
				 {
					$_FILES['uploadFile'. $x]['name'] = strtolower($_FILES['uploadFile'. $x]['name']);
					$file_name = $_FILES['uploadFile'. $x]['name'];
					// strip file_name of slashes
					$file_name = stripslashes($file_name);
					$file_name = str_replace("'","",$file_name);
					$copy = copy($_FILES['uploadFile'. $x]['tmp_name'],$dir.$file_name);
					 // check if successfully copied
					 if($copy)
						 {
							 $content .= "$file_name | Datei Erfolgreich Hochgeladen!<br />";
						 }
						 else
						 {
							$content .= "$file_name | Datei konnte nicht hochgeladen werden!";
						 }
				 }
				 else
				  {
					$content .=$_FILES['uploadFile'. $x]['name']." ist kein Jpg/Jpeg File<br />";
				  }

				}
				else
				{
					$fehlernr++;
				}
			 }

		}
		if ($fehlernr == "10") { $content .="Bitte wählen sie eine Datei zum hochladen aus";

		$content .= "<meta http-equiv=\"refresh\" content=\"4; URL=?open=gallerie&view=upload\">";
		// end of loop
}

// upload formulare erstellen
$content .="<form name=\"form\" enctype=\"multipart/form-data\" method=\"post\" action=\"?open=gallerie&view=upload\"><input type=\"hidden\" name=\"action\" value=\"send\">";
  for($x=0;$x<$forms;$x++)
	{
		$content .="<input class=\"input\" name=\"uploadFile".$x."\" type=\"file\" id=\"uploadFile".$x."\"><br />";
    }
   $content .="<input type=\"submit\" name=\"Submit\" value=\"Submit\"></form>";

$content .= $status;

}
?>

In der Variable $_GET["forms"] wird die Anzahl der Formulare festgelegt. Da suche ich nun ein weg es variable anzupassen. Kann mir da wer helfen?
 
Hi, hoffe das hilft...

HTML:
<script type="text/javascript">
/* <![CDATA[ */
	
	function GenerateForm()
	{
	
		var fields_count = document.getElementById("fields_count").value;
		var fields = '';
		if(fields_count == ""){ fields_count = 10; }
		document.getElementById("fields").innerHTML = '';
		for (var i = 1 ; i <= fields_count; i++)
		{
		
			fields = fields + '<input class="input" name="uploadFile' + i + '" type="file" id="uploadFile' + i + '" /><br />';
		
		}
		document.getElementById("fields").innerHTML = fields;
	
	}
	
/* ]]> */
</script>

<body onLoad="GenerateForm()">

<form action="javascript: GenerateForm();">
<input id="fields_count" type="text" size="3" value="" /> <input type="submit" name="submit_generate" value="Generate" />
</form>

<form name="form" enctype="multipart/form-data" method="post" action="?open=gallerie&view=upload">
<input type="hidden" name="action" value="send" />
<div id="fields"></div>
<br />
<input type="submit" name="Submit" value="Submit" />
</form>

</body>
 
Hallo,

leider verstehe ich nicht genau, wo dein Problem liegt. ;)
Prinzipiell dürfte dein Code doch so funktionieren. Du bräuchtest jetzt lediglich noch über ein weiteres Formular die Anzahl der per GET übergeben.
Oder willst du dies komplett mit JavaScript realisieren, so dass die Seite nicht immer komplett neu geladen werden muss?

Daneben solltest du allerdings auch noch überprüfen, ob für die Anzahl eine gültige Zahl übergeben wurde - sonst kann das ganze schnell in einer Endlosschleife enden. ;)

MfG mh1001

//Edit: Wenn ich den Post über mir richtig deute war wohl doch zweiteres gemeint. ;)
 
ja so hatte ich das eigentlich vor. Würde es gerne so machen das die seite nicht komplett neu geladen werden muss!

Das script oben funzt 1a :) so wollte ich das.. muss nur schauen ob ich das so eingebunden bekomme ;) ich teste das mal eben moment ;)
 
also GuardianAngel Also das script alleine läuft ja genauso wie ichs möchte aber bekomme es irgendwie nicht eingebunden.. kann das sein das die namen nicht richtig generiert werden oder so? weil er postet die files irgendwie nicht :(
 
Wie schaut denn dein momentaner Code aus?
Lass dir das POST-Array am besten einmal per print_r() ausgeben.

MfG mh1001
 
Ich weiss nicht was ich falsch gemacht hatte. Aber nun scheint es zu gehen. Nun bräuchte ich nurnoch den wert den ich oben eingegeben habe in einer post variablen. Wie kann ich das realisieren ? weil brauch das ja für den durchlauf mit den schleifen!
 
ah so ja hier der neue Code...

HTML:
<script type="text/javascript">
/* <![CDATA[ */
	
	function GenerateForm()
	{
	
		var fields_count = document.getElementById("fields_count").value;
		var fields = '';
		if(fields_count == ""){ fields_count = 10; }
		document.getElementById("fields").innerHTML = '';
		document.getElementsByName("fields_count")[0].value = fields_count;
		for (var i = 1 ; i <= fields_count; i++)
		{
		
			fields = fields + '<input class="input" name="uploadFile' + i + '" type="file" id="uploadFile' + i + '" /><br />';
		
		}
		document.getElementById("fields").innerHTML = fields;
	
	}
	
/* ]]> */
</script>

<body onLoad="GenerateForm()">

<form action="javascript: GenerateForm();">
<input id="fields_count" type="text" size="3" value="" /> <input type="submit" name="submit_generate" value="Generate" />
</form>

<form name="form" enctype="multipart/form-data" method="post" action="?open=gallerie&view=upload">
<input type="hidden" name="action" value="send" />
<input type="hidden" name="fields_count" value="" />
<div id="fields"></div>
<br />
<input type="submit" name="Submit" value="Submit" />
</form>

</body>

Es gibt jetzt im unteren Formular ein Feld "fields_count", da kannste mit $_POST['fields_count'] drauf zugreifen, das sollte dir dann die Anzahl an Feldern wiedergeben! Im JS oben ist auch ne Änderung!
 
Zuletzt bearbeitet:
Füge dazu einfach noch folgendes nach der Schleife im obigem JavaScript-Code ein:
HTML:
fields = fields + '<input name="anzahl" type="hidden" value="' + i + '">';
Den Feldnamen musst du natürlich je nach Bedarf noch entsprechend anpassen. ;)

Alternativ kannst du aber auch die Felder statt diese einfach durchzunumerieren einfach folgendermaßen bennenen:

uploadFile[0]
uploadFile[1]
uploadFile[2]
...

Das könnte dann eine spätere Verarbeitung per PHP erleichtern. ;)

MfG mh1001

//Edit: Mensch bin ich heute mal wieder langsam. ;)
 
scheint nun alles zu klappen :) besten Dank euch beiden !
 
Zuletzt bearbeitet:
Weis net genau habs mit PHP net getestet, aber benenne einfach mal um das Feld, musst du allerdings dann überall machen, auch im JS!

Übrigens, wenn du statt $variable = " " => $variable = ' ' nehmen würdest, müsstest du die " " bei den HTML <> nicht in \"\" ändern!

Beispiel:

echo '<body color="#000000">';

statt

echo "<body color=\"#000000\">";
 
Zurück
Oben