簡體   English   中英

PHP腳本中的錯誤報告

[英]Error reporting in PHP script

我對此腳本有小問題。 它允許用戶上傳CSV並寫入MySQL表,還可以檢查該表是否與現有記錄重復。 該腳本工作正常,除了消息報告。 請看下面。

<?php
 require_once("models/config.php"); //db connection is in this file



function get_file_extension($file_name) {
return end(explode('.',$file_name));
}

function errors($error){
if (!empty($error))
{
        $i = 0;
        while ($i < count($error)){
        $showError.= '<div class="msg-error">'.$error[$i].'</div>';
        $i ++;}
        return $showError;
}// close if empty errors
 } // close function

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

if(get_file_extension($_FILES["uploaded"]["name"])!= 'csv')
{
$error[] = 'Only CSV files accepted!';
}

if (!$error){

$tot = 0;
$handle = fopen($_FILES["uploaded"]["tmp_name"], "r");
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {

for ($c=0; $c < 1; $c++) { 

    //only run if the first column if not equal to firstname
    if($data[0] !='firstname'){         
         $check=mysqli_query($mysqli,"select * from persons where     firstname='$data[0]' and surname='$data[1]'");
  $checkrows=mysqli_num_rows($check);
  if($checkrows>0){echo "$data[0] $data[1] exists in the database. Please remove this     entry before uploading your records.";}  
else{  

        $order = "INSERT INTO persons (firstname, surname, gender, email, address, city, province, postalcode, phone, secondphone, organization, inriding, ethnicity, senior, political_id) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
$stmt = mysqli_prepare($mysqli, $order);
mysqli_stmt_bind_param($stmt, "sssssssssssssss",  $data[0],  $data[1],  $data[2],  $data[3],  $data[4],  $data[5],  $data[6],  $data[7],  $data[8],  $data[9],  $data[10],  $data[11],  $data[12],  $data[13],  $data[14]);
 $result = mysqli_stmt_execute($stmt);          
     }

$tot++;}

}
}
fclose($handle);
$content.= "<div class='success' id='message'> CSV File Imported, $tot records added     </div>";
}// end no error
}//close if isset upfile\\
$er = errors($error);
$content.= <<<EOF
<h3>Import CSV Data</h3>
$er
<form enctype="multipart/form-data" action="" method="post">
File:<input name="uploaded" type="file" maxlength="20" /><input type="submit"     name="upfile" value="Upload File">
</form>
EOF;
echo $content;
?>

當腳本找到重復項時,它將回顯“數據庫中存在姓氏”。 請在上載記錄之前刪除此條目。 CSV文件已導入,已添加1條記錄”

什么都沒有寫到表,這就是我想要的。 但是我更希望該消息說“已導入CSV文件,已添加0條記錄”,或者在查找重復項時根本不顯示該消息,因為這可能會使用戶感到困惑

我知道這是一個超級容易的解決方法(有點像是放錯了支架的東西),但我不知道。

提前致謝。

移動具有以下內容的行:

$tot++;

在前面的大括號內。 像這樣:

//only run if the first column if not equal to firstname
if ($data[0] != 'firstname') {

    $check     = mysqli_query($mysqli, "select * from persons where firstname='$data[0]' and surname='$data[1]'");
    $checkrows = mysqli_num_rows($check);

    if ($checkrows > 0) {
        echo sprintf('%s %s exists in the database. Please remove this entry before uploading your records.', $data[0], $data[1]);
    }
    else {
        $order = "INSERT INTO persons (firstname, surname, gender, email, address, city, province, postalcode, phone, secondphone, organization, inriding, ethnicity, senior, political_id) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
        $stmt  = mysqli_prepare($mysqli, $order);
        mysqli_stmt_bind_param($stmt, "sssssssssssssss", $data[0], $data[1], $data[2], $data[3], $data[4], $data[5], $data[6], $data[7], $data[8], $data[9], $data[10], $data[11], $data[12], $data[13], $data[14]);
        $result = mysqli_stmt_execute($stmt);

        $tot++;
    }
}

老實說,您的代碼很難閱讀。 您可能需要重新標簽,以便更好地遵循它的流程。 重新標記代碼后,問題很容易發現。

在這里使用一條語句做得很好,沒有它們,我已經失去了PHP問題的數量-您也應該為$check查詢添加一個問題!

我的第一個猜測是, $showError沒有定義你與追加對wt前$showError.= 它應解析為PHP通知“ PHP通知:未定義的變量:$ showError”,但仍應將其輸出。

此外,如果沒有錯誤,該函數將輸出null

我將foreach用於該循環。

function errors($errors) {
    $showError = '';
    if (!empty($errors)) {
        foreach ($errors as $error) {
            $showError .= '<div class="msg-error">'.$error.'</div>';
        }
    }
    return $showError;
}

看看這是否有助於輸出錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM