Formularverarbeitung im Hintergrund +File Upload / jquery /jquery.valitation

Strafi

Erfahrenes Mitglied
Moin,

ich habe eine CSV-Verarbeitung gebaut die auch funktioniert.

Sie Läuft folgendermaßen ab. Nach ein ValidCheck lade ich eine CSV hoch, dort wird noch mal die Formatierung gecheckt, ist sie okay wird sie verarbeitet jede Zeile wird ausgewertet und an eine Datenbank geschickt.

Das geht alles. Ich habe noch eine ModalBox die eingeblendet wird. Die Bleib aber nun solange stehen Bis alle Daten eingetragen sind, ich möchte aber das nach dem FileUpload, der Rest der Verarbeitung im Hintergrund läuf. Mache ich den Browser einfach zu läuft der Das auch weiter.

Hier das Formular:

HTML:
<form id="requestForm" name="requestForm" onSubmit="return timeButton();" method="post" action="index.php?module=massrequest" enctype="multipart/form-data">

<fieldset>
	<legend>Upload</legend>
	
	<div class="Row">
		<label>Datei<span class="required">*</span></label>
		<input type="file" id="file" name="file" />
	</div>
	
	<div class="Row">
		<label>Verwendungszweck</label>
		<input type="text" id= "b1" name="b1" size="50"/>
	</div>
	<div class="Row">
		<label></label>
		

<input type="submit" name="requestSu" value="Abschicken" id="requestSu"/>
<div id="result">
	
</div>
</div>	
</fieldset>

</form>

hier meine Validation: jquery.validation

HTML:
$(document).ready(function() {
	
$("form#requestForm").validate(
	{
	debug: true,
	errorElement: "p",
	errorPlacement: function(error, element) {
	error.appendTo( element.parent() );
   },   
	rules:
		{
	    	
		requestFile:
				{
					
		required:	true,
		accept: 	"csv"
					
				}
			},
	messages:
		{
			
		requestFile:
				{
					
		required:	"Bitte geben Sie eine CSV-File an.",
		accept:		"Bitte richtigen Dateitypen verwenden (*.csv)"
		
				}
				
				
			},
		
	submitHandler:
	
	function(form)
			{
				$('#modal').jqm({modal:true});
				$('#modal').jqmShow();
				
				$.ajax({
					type: "POST",
					url: "index.php?rew=ed",
					data: {
						requestSubmit:		true,
						requestFile:			$("input#file").val(),
						purpose:			$("input#purpose").val()
					},
					success: function(msg){
						if(msg)
						{
							document.modalDialog.disabled="disabled";
							
							document.requestForm.reset()
							document.location.href = 'index.php?rew=ed';
							
						}
						else
						{
							alert("TODO: Error Handling");
						}
					}
				});
			}
	
	
	});
	
});

und meine PHP:

PHP:
<?php

if(isset($_POST['requestSu'])) {
			if($_FILES['file']['tmp_name']!="") {
				if(ereg(".csv",strtolower($_FILES['file']['name']))) {
					$csvData=getCsvData($_FILES['requestFile']['tmp_name']);   /// File wird hochgeladen
					
					if(contentIsValid($csvData)) {


// hier wird geprüft ob alles okay ist
						$db->exec("
							INSERT INTO
								tabelle
							(.......)
							VALUES
							(......							)
						");
						
						$massId=$db->lastInsertId();
						$smarty->assign("error","File wurde hochgeladen!");
				// ab hier werden alle einträge aus der Datei verarbeitet, und das Formular wartet bis das fertig ist, das will ich aber nicht mehr, das soll im hintergrund stattfinden.
						for($i=0;$i<count($csvData);$i++) {
							$csvLine=$csvData[$i];
							if($csvLine['ADS']!="") {
								$stmt = $db->prepare(".........");
								$stmt->execute();
							} else {
								$stmt = $db->prepare("........");
							}
							$stmt->execute();
							$inDb=$stmt->fetch(PDO::FETCH_ASSOC);
							
							
							if($csvLine['ADS']=="") {
								$csvLine['ADS']=$inDb['ads'];
							}
		
							
							if($csvLine['datum'] == "") {
								$csvLine['datum'] = "..";
							}
							
							$request=new Request(.......);
							
							$db->exec("......");
						}
						
					} else {
						
						$smarty->assign("error","Bitte w&auml;hlen Sie eine g&uuml;ltige Anfragedatei aus.");
					}
				}
			}


?>


Wie schaffe ich es das nach dem Fileupload, der verarbeitungsprozess im hintergrund läuft?
 
Zuletzt bearbeitet:
So wie ich das jetzt durchgelesen hab, würd ich sagen, dass du eher einen Daemon / Cron-Job für die weitere Verarbeitung der Datei erstellen solltest.

Es bleibt halt immer noch Prozedural.. D.h. Er wartet bis alle Funktionen / Methoden abgearbeitet sind, bis er weiter machen kann.

(Ebenfalls könntest du auch eine kleine API schreiben, die du dann anwirfst, sobald die Datei hochgeladen wurde).
 
Ja das sind überlegungen werd.

wie sieht das aus. also es läuft ja ne session, wenn ich die im browser kille kann ich mich wieder neu einloggen und der prozess arbeitet weiter.

kann nicht kurz bevor der anfängt das zu verarbeiten, das irgendwie so machen:

PHP:
$user_testid = $_SESSION['userid'];
						
session_destroy();
unset($_SESSION);
//session_regenerate_id();
$_SESSION['userid']=$user_testid;
$_SESSION['sessionid'] = session_id();

also das soll jetzt nur ein gedankenansatz sein. aber ich will dann das er auch wieder eingeloggt ist.
 
Ein Daemon funktioniert anders..

Der Daemon läuft immer im Hintergrund (bringts eigentlich auch nur, wenn du ne Art root-Maschine hast)... Das hat dann nichts mehr mit der eigentlichen Seite & dem Login zu tun..
 
Zurück