2016-03-30 22 views
0

Ich habe diese AJAXPOST Anfrage von AngularJS kommen, ein JSON Modell mit einigen Feldern und eine Datei:Parsing Formulardaten mit PHP

------WebKitFormBoundarywlEiXuTa9EkwFUWz 
Content-Disposition: form-data; name="model" 

{"fname":"and","lname":"and","email":"[email protected]","phone":"+3912345","position":"Marketing","startdate":"10/10/2017"} 

------WebKitFormBoundarywlEiXuTa9EkwFUWz 

Content-Disposition: form-data; name="file"; filename="InterviewPreparation.pdf" 
Content-Type: application/pdf 

------WebKitFormBoundarywlEiXuTa9EkwFUWz-- 

Ich bin ein PHP-Dummy-Entwickler. Wie kann ich die Anfrage mit PHP analysieren? Dieser Code funktioniert nicht:

<?php 
// mail.php 

$errors = array(); // array to hold validation errors 
$data = array();  // array to pass back data 

// validate the variables ======== 
if (empty($_POST['model.fname'])) 
    $errors['First name'] = 'Required.'; 
if (empty($_POST['model.lname'])) 
    $errors['Last Name'] = 'Required.'; 
if (empty($_POST['model.email'])) 
    $errors['Email'] = 'Required.'; 
if (empty($_POST['model.phone'])) 
    $errors['Phone'] = 'Required.'; 
if (empty($_POST['model.position'])) 
    $errors['Position'] = 'Required.'; 
if (empty($_POST['model.startdate'])) 
    $errors['Start Date'] = 'Required.'; 

// return a response ============== 
$file = $_POST['file']; 
if (! empty($file)) 
    echo 'Uploaded file: ' + $file.name; 

// response if there are errors 
if (! empty($errors)) { 
    // if there are items in our errors array, return those errors 
    $data['success'] = false; 
    $data['errors'] = $errors; 
} else { 
    // if there are no errors, return a message 
    $data['success'] = true; 
    $data['message'] = 'Mail sent, good luck!'; 
} 
// return all our data to an AJAX call 
echo json_encode($data); 
?> 
+0

Content-type: multipart/Formulardaten mit 2 Attributen: ‚Modell‘ ist ein JSON und ‚Datei‘ ist eine Datei – epavan

Antwort

0

Der Name Ihres ersten Form-Datenfeld „Modell“, es enthält ein JSON-Objekt, das wie eine Zeichenfolge in PHP behandelt wird, wenn Sie es zuerst json_decode.

So würde ich vorschlagen, so etwas wie die folgenden Aktionen ausführen:

$model = filter_input(INPUT_POST, 'model'); // better to not use $_POST directly 
$decoded = json_decode($model); 
if(!$decoded) 
    // not valid json 
if(empty($decoded->fname)) 
    $errors['First name'] = 'Required.'; 
// etc... 

Die Datei in $ _FILES Array sein sollte.

$file = $_FILES['file']; 
+0

Dank Brense ich mit diesem Code bin zu kämpfen. Wenn ich in meinem Code ein $ model gebe, bekomme ich null. Das bedeutet, dass ich den Parameter 'model' nicht von der Anfrage bekommen kann. Wie sollte ich diese POST-Rohdaten in PHP lesen? Als Stream oder was? Es ist ein Beitrag mit Content-Typ 'multipart/formdata'. – epavan

+0

$ stream = fopen ('php: // Eingabe', 'rb'); $ string = stream_get_contents ($ stream); var_dump ($ string); // Dieser Dump gibt mir string (0) "" – epavan

+0

was ist das Ergebnis, wenn Sie 'var_dump ($ _ POST);'? Formulardaten sollten nicht im Eingabestream enthalten sein. PHP fügt die Formulardatenfelder automatisch dem Array $ _POST hinzu. – brense