2016-09-26 4 views
0

Phpを使用して* .CSVファイルをデータベースにアップロードしようとしています。 私は本当にファイルのアップロードでデータ検証作業を行うことはできません。 スクリプトは、特定のセルのデータがdbのテーブルを検索して有効かどうかを確認する必要があります。 エラーがある場合、ファイルをアップロードしないでください!データ検証付きのCSVファイルアップロード

コードは次のとおりです。

<form name="import" method="post" enctype="multipart/form-data"> 
    <input type="file" name="file" /><br /> 
    <input type="submit" name="submit" value="Submit" /> 
</form> 

<?php 

    include ("connection2.php"); 

    if(isset($_POST["submit"])) 
    { 
     $file = $_FILES['file']['tmp_name']; 
     $handle = fopen($file, "r"); 
     $c = 0; 
     $err = 0; 

     if ($_FILES["file"]["type"]=='application/vnd.ms-excel') 
     { 

      while(($filesop = fgetcsv($handle, 3000, ",")) !== false) 
      { 
       $tid = trim($filesop[0]); 
       $beneficiar = ucwords(strtolower(trim($filesop[1]))); 
       $locatie = ucwords(strtolower(trim($filesop[2]))); 
       $localitate = ucwords(strtolower(trim($filesop[3]))); 
       $judet = ucwords(strtolower(trim($filesop[4]))); 
       $adresa = ucwords(strtolower(trim($filesop[5]))); 
       $model = trim($filesop[6]); 

       $query = mysqli_query("SELECT * FROM modele WHERE `model` = '".$model."'"); 
       if (!empty($query)) { 
        $err ++; 
        $msg=$msg."Model error on row $c <br>"; 
       } 

       $query = mysqli_query("SELECT * FROM judete WHERE `nume` = '".$judet."'"); 
       if (!empty($query)) { 
        $err ++; 
        $msg=$msg."Judet error on row $c <br>"; 
       } 

       $query = mysqli_query("SELECT * FROM beneficiari WHERE `nume` = '".$beneficiar."'"); 
       if (!empty($query)) { 
        $err ++; 
        $msg=$msg." Beneficiar error on row $c <br>"; 
       } 

       // if (strlen($tid)!==8){ 
        // $err ++; 
        // $msg=$msg."TID length error at row $c <br>"; 
       // } 

       $C++; 
      } 
      if ($err!==0){ 
       echo $msg; echo "ERROR COUNT= ".$err; 
       break; 
      } 

      $c=0; 

      while(($filesop = fgetcsv($handle, 3000, ",")) !== false) 
      { 
       $tid = trim($filesop[0]); 
       $beneficiar = ucwords(strtolower(trim($filesop[1]))); 
       $locatie = ucwords(strtolower(trim($filesop[2]))); 
       $localitate = ucwords(strtolower(trim($filesop[3]))); 
       $judet = ucwords(strtolower(trim($filesop[4]))); 
       $adresa = ucwords(strtolower(trim($filesop[5]))); 
       $model = trim($filesop[6]); 

       $qry=mysql_query("SELECT id FROM beneficiari WHERE `nume` = '".$beneficiar."'"); 
       while ($row = mysql_fetch_assoc($qry)){ 
        $id_client=$row['id']; 
        echo "Beneficiar=".$row['id']; 
       } 

       $qry_id_model=mysql_query("SELECT id FROM modele WHERE `model` = '".$model."'"); 
       while ($row = mysql_fetch_assoc($qry_id_model)){ 
        $id_model=$row['id']; 
        echo "Model=".$row['id']; 
       } 
       echo "MODEL2:".$id_model; 

       $adresa1 = $adresa.", ".$localitate; 

       if ($c!==0){ 

        $sql = mysql_query("INSERT INTO equipments 
          (id_client, model, tid, beneficiar, adresa, agentie, judet) 
          VALUES 
         ('$id_client','$id_model','$tid','$beneficiar','$adresa1','$locatie','$judet')"); 
       } 
       $c = $c + 1; 
      } 

      if($sql){ 
       echo "You database has imported successfully. You have inserted ". $c ." recordes <br>"; 
      }else{ 
       echo "Sorry! There is some problem.<br>"; 
      } 

      echo "Upload: " . $_FILES["file"]["name"] . "<br />"; 
      echo "Type: " . $_FILES["file"]["type"] . "<br />"; 
      echo "Size: " . ($_FILES["file"]["size"]/1024) . " Kb<br />"; 
      echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />"; 
     } 
     else echo "NOT CSV!"; 
    } 
?> 

ここに間違いがありますか?

私はそれを実行しようとすると、データはアップロードされず、エラーは表示されません。テストするためにファイルにエラーが残されました。また、私はクリーンなファイルをアップロードし、また、ファイルはアップロードされていません。私は2でコードを壊して、2つの別のコードを確認し、1つをアップロードする場合は、アップロードが動作しますが、私は検証とアップロードが同じコードになる必要があります。また、mysqli_queryの代わりにmysql_queryを試しました。

+0

分かりやすいコードインデントが良い考えです。コードを読むのに役立ちます。もっと重要なのは**あなたのコードをデバッグするのに役立ちます** [コーディング標準を見てください](http://www.php-fig.org/psr/psr-2/ )あなた自身の利益のために。あなたはこのコード を数週間/数ヶ月で修正するように頼まれるかもしれません。そして、あなたは私に最後に感謝します。 – RiggsFolly

+0

あなたのコードにすぐに間違って表示されるいくつかの問題に対処するための答えを追加しました - しかし、現時点では、私たちが取り除かなければならないのは ''正しく機能していません '' - 正確にはisn働くことは役に立ちます。 –

+0

@MacroManデータをアップロードしようとすると、データがアップロードされず、エラーも表示されません。テストするファイルにエラーが残っています。また、クリーンなファイルをアップロードしました。私は2でコードを壊して、2つの別のコードを確認し、1つをアップロードする場合は、アップロードが動作しますが、私は検証とアップロードが同じコードになる必要があります。また、mysqli_queryの代わりにmysql_queryを試しました –

答えて

-2

まず、このファイルを一時フォルダにアップロードしてファイル名を保存する必要があります。次に、getCSV php functionを使用してファイルを正しく読み込みます。

最後に、すべてOKかどうかを確認し、データベースに挿入し、エラーメッセージを表示してファイルを削除します(名前を保存したことと、一時フォルダの静的ルートを知っていることを忘れないでください)。

希望すると助かります!

+0

ファイルにエラーがある場合は、すべての行をアップロードしたくありません –

+0

行をアップロードしていますか?正しく読み込みエラーをチェックするためにファイルを一時的に保存する – JoelBonetR

1

mysqli_queryの手続き型スタイルは、接続とクエリの2つの引数をとります。クエリを渡すだけです。

あなたがここにmysqli_query()方法のための公式ドキュメントを読むことができます:

$link = mysqli_connect("127.0.0.1", "my_user", "my_password", "my_db"); 

if(!$link) 
{ 
    echo("Unable to connect"); 
} else { 
    if($ret = mysqli_query($link, "SELECT id FROM modele WHERE `model` = '".mysqli_real_escape_string($link, $model)."'")) 
    { 
     $data = mysqli_fetch_assoc($ret); 
     echo($data["id"]); 
    } 

    mysqli_close($link); 
} 

:これはようなものになるだろうアプローチする方法として

http://php.net/manual/en/mysqli.query.php


提案

重要:上記の例でmysqli_real_escape_stringを使用していることに注意してください。現在のコードでは、SQLインジェクション攻撃に対して脆弱です。

関連する問題