2

こんにちは、これは私の初めての投稿です、私は完全に立ち往生しているので、それは良いことだと思いました。PHPのswitchおよびIf/elseステートメントには可変スコープがないことを理解していました。

私の問題は、約5行の値を含むCSVファイル(サンプルファイル)があり、それをmySQL DBテーブルに入れる必要があることです(列ヘッダーは、switchステートメントの「ケース」で表されます)しかし、とにかく私はCSVファイルを解析し、データが本来あるべき列にあることを確認して、変数に格納します。次に、シリアル化されてからSQLクエリに渡される配列にすべての変数を格納します。

エラーが引き続き発生しますSCREAM:エラー抑制は無視されます(!)注意:未定義の変数:98行目のC:\ wamp \ www \ lcimport\serialize.phpの会社

しかし、私はそれらの変数がそこにあることを知っています。私はそれらをエコーすることができ、それらは呼び出されます。しかし、これらのエラーが解消されない限り、クエリは実行されないため、dbテーブルにデータが入力されません。

私は何が間違っているのですか?

   <?php
//define some constants
$db = 'lc';
mysql_connect('localhost', 'root', ''); 
mysql_select_db($db);
 mysql_error();
$uid = md5(uniqid(time()));

//we only have this here to be a row counter
$row = 1;
if (($handle = fopen("C:\\wamp\\www\\lcimport\\4records.csv", "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
        $num = count($data);
        //var_dump($data);
       // echo $data[0];
        echo '';
        if ($row === 1) {
        $header = $data;
       }     

        $row++;
        for ($c=0; $c < $num; $c++) {
            //echo $data[$c] . "<br />\n";
            if ($row === 2) continue;
             switch ($header[$c] ){
              case "Contact":
                      $contact = explode (" ", $data[$c]);
                      $firstName =  $contact[0];
                      $lastName =  $contact[1];
              break;

              case "Company":
                    $company = $data[$c];


              case "Address1":
              //store
                    $address1 = $data[$c];

              break;

              case "Address2":
                    $address2 = $data[$c];

              break;

              case "Address3":
                    $address3 = $data[$c];

              break;

              case "City":
                    $city = $data[$c];

              break;

              case "State":
                    $state = $data[$c];

              break;

              case "Zip":
                    $zip = $data[$c];

              break;

              case "Phone1":
                    $phone1 = $data[$c];
              break;

              case "Phone2":
                     $phone2 = $data[$c];
              break; 

              case "Phone 3":
                    $phone3 = $data[$c];
              break;

              case "Fax":
                    $fax = $data[$c];
              break;          

              case "Accountno":
                    $accountNo = $data[$c];
              break;

              default:
                $junk = $data[$c];
              break;


             }




        }       
        echo $company;  
            $meta = serialize(Array(
                    "firstname" => $firstName,
                    "lastname" => $lastName,
                    "lawfirmname" => $company,
                    'address' => $address1,
                    'city' => $city,
                    'state' => $state,
                    'zip' => $zip,
                    'fulladdress' => '',
                    'officenumber' => $phone1,
                    'faxnumber' => $fax,
                    'mobilenumber' => $phone2,
                    'email' =>'nothing',
                    'website' => 'somthing.com',
                    'privacy' => 0,
                    'status' =>1
                    )); 




        mysql_query("INSERT INTO `mg_profiles` (meta) VALUES ($meta)");
        mysql_error();

    }
    fclose($handle);
    }


?>
4

2 に答える 2

1

他のすべての変数が存在し、正しく機能している場合、会社の場合、欠落break;が問題になるはずです。

ループ内でリレーショナル データベースと通信するのは得策ではありません。結果を配列に保存し、すべてのデータを取得した後、単純なリクエストで挿入する方が、メモリとプロセスの効率が高くなります。

INSERT INTO `mg_profiles` (meta) VALUES (...), (...), (...)

完璧に動作します。

PHP には、次のようなプロセスを処理するコマンドがあります。

while (($data = fgetcsv($handle, 1000, ",")) !== false) {
    if ($row == 1 || $row == 2) {
        $row++;
        continue;
    }
    list ($contact, $company, $address1 /*, ...*/) = $data;
}
于 2012-11-15T05:59:27.327 に答える
0

条件文の前 (if() の前) に定義するだけです。

$company = '';

$company は条件ステートメント内でのみ出現するため、条件が失敗すると未定義になるため、エラーが発生します

于 2012-11-15T05:49:45.057 に答える