tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
3
ZUGRIFFE
1337
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Strafi Strafi ist offline Mitglied Silber
    Registriert seit
    Apr 2010
    Beiträge
    79
    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-Code:
    <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-Code:
    $(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-Code:
    <?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?
    Geändert von Strafi (15.10.10 um 23:36 Uhr)
     

  2. #2
    Registriert seit
    Jul 2003
    Ort
    Ramsen (CH)
    Beiträge
    473
    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).
     
    Grüsse

    Xloouch


    Sich selber zu bekriegen ist der schwerste Krieg.
    Sich selber zu besiegen ist der schönste Sieg!

  3. #3
    Strafi Strafi ist offline Mitglied Silber
    Registriert seit
    Apr 2010
    Beiträge
    79
    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-Code:


    $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.
     

  4. #4
    Registriert seit
    Jul 2003
    Ort
    Ramsen (CH)
    Beiträge
    473
    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..
     
    Grüsse

    Xloouch


    Sich selber zu bekriegen ist der schwerste Krieg.
    Sich selber zu besiegen ist der schönste Sieg!

Ähnliche Themen

  1. Antworten: 9
    Letzter Beitrag: 22.07.10, 15:51
  2. Antworten: 3
    Letzter Beitrag: 12.07.10, 13:27
  3. jQuery noConflict Mode & jQuery Plugins?
    Von josDesign im Forum Javascript & Ajax
    Antworten: 6
    Letzter Beitrag: 27.05.10, 22:10
  4. jQuery: jQuery auf AJAX Response anwenden
    Von pointsdächster im Forum Javascript & Ajax
    Antworten: 3
    Letzter Beitrag: 12.04.10, 01:15
  5. Formularverarbeitung mit jQuery Verständnisproblem
    Von rotekiste im Forum Javascript & Ajax
    Antworten: 5
    Letzter Beitrag: 13.03.10, 19:03