2014-04-24 5 views
0

У меня проблема с этим скриптом. Это позволяет пользователю загружать CSV и записывать в таблицу MySQL вместе с проверкой дубликатов на таблицу для существующих записей. Скрипт работает нормально, за исключением сообщений. См. Ниже.Отчет об ошибках в скрипте PHP

<?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 File Imported, 0 records added »или вообще не отображалось это сообщение при поиске дубликата, потому что это может запутать пользователя

Я знаю, что это очень легко исправить (что-то вроде неуместного кронштейна), но я не могу понять.

заранее спасибо.

ответ

1

Переместить линию, которая имеет:

$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 запроса тоже!

+0

Отлично, спасибо! – JLA

0

Моя первая догадка заключается в том, что $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; 
} 

См., Если это помогает выводить ошибки.

Смежные вопросы