0

ユーザーがCSVファイル内の特定の列の正確な名前をプログラムに伝えて、データベースに保存するデータにアクセスして取得できるようにするCSVをアップロードしました。必要な情報を入力しないとフォームに戻って間違いを修正するエラー メッセージがいくつかあります。問題は、それがいつも私を元に戻すことであり、その理由はよくわかりません.

アップローダのコード --------------------------------------------------- ----------------------

try {  
  # MySQL with PDO_MYSQL  
  $DBH = new PDO("mysql:host=$hostname;dbname=$database", $username, $password);  
  $DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );

}  
catch(PDOException $e) { 
    echo "I'm sorry, I'm afraid I can't do that.";  
    file_put_contents('PDOErrors.txt', $e->getMessage(), FILE_APPEND);   
}

function returnBack(){

    header("Location:csvuploader/csvuploaderform.php?seterror=1");
    exit;

}

if (isset($_POST['submit'])){

    /*******************************GET NAME OF COLUMNS IN CSV FILE *********************************************************/
    if (empty($_POST['files'])){
        returnBack();
    }
    if (empty($_POST['firstname'])){
        returnBack();
    }
    if (empty($_POST['lastname'])){
        returnBack();
    }if (empty($_POST['email'])){
        returnBack();
    }
    if (empty($_POST['phone'])){
        returnBack();
    }
    $file = $_FILES['files']['tmp_name'];   

    $handle = fopen($file , "r");

    $fileop = fgetcsv($handle,1000,",");

    $firstname_index = array_search($_POST['firstname'],$fileop);
    if (empty($firstname_index)){
        returnBack();
    }
    $lastname_index = array_search($_POST['lastname'],$fileop);
    if (empty($lastname_index)){
        returnBack();
    }
    $email_index = array_search($_POST['email'],$fileop);
    if (empty($email_index)){
        returnBack();
    }
    $phone_index = array_search($_POST['phone'],$fileop);
    if (empty($phone_index)){
        returnBack();
    }

    /***********************ASSIGN COLUMN VALUES TO ACCORDING VARIABLES AND INSERT THEN INTO CSV TABLE IN DB *************************************/


    while (($fileop = fgetcsv($handle,1000,",")) !== false)
    {
        $firstname = $fileop[$firstname_index];
        $lastname = $fileop[$lastname_index];
        $email = $fileop[$email_index];
        $phone = $fileop[$phone_index];

        $insertdata = $DBH->prepare("INSERT INTO csv (firtname, lastname, email, phone) VALUES ('$firstname','$lastname','$email','$phone')");
        $insertdata->execute();
    }
    if ($insetdata){
        echo "Successfully Uploaded. Thank you.";   
    }
}

お時間をいただきありがとうございます!

更新しました - - - - - - - - - - - - - -

フォームコード

<table width="300" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#CCCCCC">
<tr>
<form method="post" action="csvuploader.php" enctype="multipart/form-data">
<td>
<table width="100%" border="0" cellpadding="3" cellspacing="1" bgcolor="#FFFFFF">
<tr>
<td colspan="3"><strong>CSV Uploader </strong></td>
</tr>
<tr>
<td>Enter Name of First Name Column </td>
<td>:</td>
<td><input name="fisrtname" type="text" ><?php 
    $setError=$_GET['seterror']; 
    if($setError == 1){
    echo "<span class='errorMsg'>Need Exact Name</span>";
    }
        ?> </td>
</tr>
<tr>
<td>Enter Name of Last Name Column </td>
<td>:</td>
<td><input name="lastname" type="text" ><?php 
    $setError=$_GET['seterror']; 
    if($setError == 1){
    echo "<span class='errorMsg'>Need Exact Name</span>";
    }
        ?></td>
</tr>
<tr>
<td>Enter Name of Email Column </td>
<td>:</td>
<td><input name="email" type="text" ><?php 
    $setError=$_GET['seterror']; 
    if($setError == 1){
    echo "<span class='errorMsg'>Need Exact Name</span>";
    }
        ?></td>
</tr>
<tr>
<td>Enter Name of Phone Number Column </td>
<td>:</td>
<td><input name="phone" type="text" ><?php 
    $setError=$_GET['seterror']; 
    if($setError == 1){
    echo "<span class='errorMsg'>Need Exact Name</span>";
    }
        ?></td>
</tr>
<tr>
<td width="294"><input type="file" name="files" /><?php 
    $setError=$_GET['seterror']; 
    if($setError == 1){
    echo "<span class='errorMsg'>Select a File</span>";
    }
        ?></td>
</tr>
<br />
<tr>
<td><input type="submit" name="submit" value="Submit" /></td>
</tr>
</table>
</td>
</form>
</tr>
</table>
4

1 に答える 1

1

データ ファイルがどのように見えるかはわかりませんが、最後の値には行末が含まれる可能性が非常に高いため、trimon ed 配列値を使用することをお勧めします。fgetcsv

$fileop=fgetcsv($handle);
$fileop=array_map("trim",$fileop);
/*recognize index*/
while (($fileop=fgetcsv($handle))!==false)
{
    $fileop=array_map("trim",$fileop);
    $firstname=$fileop[$firstname_index];
    /*insert into DB*/
}

編集

おっと、私は何かを逃したようです...あなたが使用している

if(empty($firstname_index))

array_search($_POST["firstname"],$fileop)ただし、たとえば、が 0 (配列の最初のインデックス) を返す場合、 にempty($firstname_index)なりTRUE、キックバックされます。

使用する必要があります

if($firstname_index===false)

代わりに (4 つのインデックスすべてで)。PHP ドキュメント.

編集#2

また、タイトルの一致で大文字と小文字を区別しないようにすることをお勧めします。

$fileop=fgetcsv($handle);
$fileop=array_map("strtoupper",array_map("trim",$fileop));
$firstname_index=array_search(strtoupper($_POST["firstname"]),$fileop);
if($firstname_index===false) returnBack();
/*and all four indexes*/
于 2012-08-17T03:31:41.510 に答える