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:
hier meine Validation: jquery.validation
und meine PHP:
Wie schaffe ich es das nach dem Fileupload, der verarbeitungsprozess im hintergrund läuft?
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ählen Sie eine gültige Anfragedatei aus.");
}
}
}
?>
Wie schaffe ich es das nach dem Fileupload, der verarbeitungsprozess im hintergrund läuft?
Zuletzt bearbeitet: