未定义的变量 - Do Switch语句在PHP中具有范围

时间:2012-11-15 05:42:40

标签: php arrays variables scope switch-statement

大家好,这是我第一次发帖,认为自从我完全陷入困境后会很好。据我所知,PHP中的switch和If / else语句没有可变范围。

我的问题是我有一个包含大约5行值的CSV文件(示例1),我需要将它放入mySQL DB表中(列标题在我的“case”中表示为我的switch语句)无论如何,我正在解析CSV文件,并检查以确保数据在列中,并将其存储在变量中。然后我将所有变量存储在一个被序列化的数组中,然后传递给我的SQL查询。

我继续得到错误  SCREAM:忽略错误抑制 (!)注意:未定义的变量:第98行的C:\ wamp \ www \ lcimport \ serialize.php中的公司

但是我知道那些变量是因为我可以回应它们并且它们将被调用。但除非这些错误消失,否则我的查询将无法运行,因此不会填充我的数据库表。

我做错了什么?

   <?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);
    }


?>

2 个答案:

答案 0 :(得分:1)

如果其他所有变量都存在且工作正常,则缺少的break;应该是公司案例的问题。

与循环内的关系数据库进行通信并不是一个好主意,将结果存储到数组中的内存和进程效率更高,并且在获得所有数据之后,只需插入一个简单的请求,因为< / p>

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

完美无缺。

PHP有一个command来处理这样的过程:

while (($data = fgetcsv($handle, 1000, ",")) !== false) {
    if ($row == 1 || $row == 2) {
        $row++;
        continue;
    }
    list ($contact, $company, $address1 /*, ...*/) = $data;
}

答案 1 :(得分:0)

只需在条件语句之前(if())

之前定义它
$company = '';

由于$ company仅在条件语句中出现,当条件失败时,它将被定义为未定义,因此错误