2010-12-14 10 views
0

HTML:Server Side Form Validation PHP mit Multi-Datei-Upload

Owner: input type="text" name="owner[]" /> 
Category: 
<select name="cat[]"> 
     <option value="clothes">Clothes</option> 
     <option value="shoes">Shoes</option> 
     <option value="accessories">Accessories</option> 
</select> 
Upload: <input type="file" name="image[]" /> 

whith-Funktion, die die gleichen Felder klonen, wenn Sie auf "+ Taste"

ich die POST-Feld zählen mit:

$num = count($_FILES['image']['name']); 

Ich möchte wissen, wie oft der Endbenutzer die Felder klonen.

was ich will ist Stellen Sie sicher, dass der Benutzer alle Felder ausfüllen muss, die er mit "+ button" geöffnet habe ich kann nicht alle versteckten Felder überprüfen, die ich gerade öffnen möchte.

also was kann ich tun?

ich kann nicht tun, wie folgt:

$owner = $_POST['owner'][$i]; 
$cat = $_POST['cat'][$i]; 
$file = $_FILES['image'][$i]; 

if ($owner && $cat && $file) 
    echo "bla bla bla"; 
else 
    echo "fill all the fields!"; 

kann mir jemand helfen?

danke

Antwort

3

Es gibt einige Punkte, die Sie vorher sicher vornehmen müssen. Immer wenn Sie das name Attribut eines Eingabefelds als "owner[]" oder "cat[]" oder "image[]" verwenden, erhalten Sie ein Array. Da die Eigenschaft für den Zugriff auf Eingabedateien standardmäßig bereits ein 2D-Array ist, können Sie nun auf diese Eigenschaften als 3D-Array zugreifen.

Wenn Sie name Attribut ein „[]“ für die Eingabedatei Feldes hinzugefügt haben, werden Sie jetzt den Namen der ersten Datei als „$_FILES['image'][0]['name']“ bekommen, weil Array-Indizes mit 0. Wie pro Ihre Frage beginnen, können Sie überprüfen, Verwenden Sie die folgende Methode: -

<?php 
$numOwners = count($_POST['owner']); 
$numCats = count($_POST['cat']); 
$numFiles = count($_FILES['image']); 

// Check to see if the number of Fields for each (Owners, Categories & Files) are the same 
if ($numFiles === $numCats && $numFiles === $numOwners) { 
    $boolInconsistencyOwners = FALSE; 
    $boolInconsistencyCats = FALSE; 
    $boolInconsistencyFiles = FALSE; 

    for ($i = 0; $i < $numFiles; $i++) { 
     if (empty($_POST['owner'][$i])) { 
      $boolInconsistencyOwners = TRUE; 
      break; 
     } 

     if (empty($_POST['cat'][$i])) { 
      $boolInconsistencyCats = TRUE; 
      break; 
     } 

     if (!is_uploaded_file($_FILES['image'][$i]['tmp_name'])) { 
      $boolInconsistencyFiles = TRUE; 
      break; 
     } 
    } 

    if ($boolInconsistencyOwners || $boolInconsistencyCats || $boolInconsistencyFiles) { 
     echo "I knew that there will be some problems with users' mentality!"; 
     // Redirect with proper Error Messages 
    } 
    else { 
     echo "Wow, Users have improved & have become quite obedient!"; 
     // Proceed with normal requirements 
    } 
} 
else { 
    echo "Something fishy is going on!"; 
} 
?> 

Ich hoffe, es hilft.

+1

Ich schätze wirklich die Zeit, die Sie zum Schreiben dieses Codes verbracht haben, danke Ihnen vielen Dank für Ihr Interesse, aber leider hat nicht geholfen, In der Tat habe ich meinen eigenen Code vor Ihrer Antwort geschrieben und seine Arbeit, Sorry for Wasting Deine Zeit .... – Swell

+0

@Swell - das ist okay. Sie müssen nur den richtigen Arbeitscode verwenden. Auch ich schätze deine Demut. Eine weitere Sache, die Sie tun können, ist, dass Sie entweder den Code als Antwort schreiben können und ihn als den richtigen markieren oder meine Antwort als die richtige markieren. Dies liegt daran, dass andere SO-Benutzer wissen, dass sie keine weiteren Antworten auf diese Frage geben müssen, da sie bereits gelöst sind. Ich hoffe du hast meinen Standpunkt verstanden. Vielen Dank! –

+0

Vielen Dank, SO Benutzer vielleicht lesen sie unsere Konversation und sie werden wissen, dass mein Problem gelöst wurde, danke nochmal. – Swell