2017-07-05 1 views
0

Bonjour j'ai une importation d'un fichier xls avec plusieurs lignes et je veux les insérer dans la base de données uniquement si les colonnes de prix ont une valeur différente de rien d'autre afficher un message d'erreur. Cela fonctionne sur la moitié il insère seulement les lignes qui ont une valeur pour le prix mais au lieu de renvoyer l'erreur html msg il renvoie le sqg sqg, cela signifie qu'il va sur la branche else. Voici mon codePHPExcel vérifier si la cellule a une valeur vide

$exceldata = array(); 

$uploadFilePath = 'uploads/'.basename($_FILES['doc']['name']); 
     move_uploaded_file($_FILES['doc']['tmp_name'], $uploadFilePath); 

     $inputfilename = 'uploads/'.$_FILES['doc']['name'].''; 
// Read your Excel workbook 
try 
{ 
    $inputfiletype = PHPExcel_IOFactory::identify($inputfilename); 
    $objReader = PHPExcel_IOFactory::createReader($inputfiletype); 
    $objPHPExcel = $objReader->load($inputfilename); 
} 
catch(Exception $e) 
{ 
    die('Error loading file "'.pathinfo($inputfilename,PATHINFO_BASENAME).'": '.$e->getMessage()); 
} 

// Get worksheet dimensions 
$sheet = $objPHPExcel->getSheet(0); 
$highestRow = $sheet->getHighestRow(); 
$highestColumn = $sheet->getHighestColumn(); 

$header=$_POST['membership']; 

if($header==1) 
{ 
// Loop through each row of the worksheet in turn 
for ($row = 1; $row <= $highestRow; $row++) 
{ 

    // Read a row of data into an array 
    $rowData = $sheet->rangeToArray('A' . $row . ':' . $highestColumn . $row, NULL, TRUE, FALSE); 
    if ($rowData[0][9]=='') 
    { 
     echo 'No price for the product '.$rowData[0][1].''; 
    } 
    else 
    { 
    $a = array('8', '1', '2', '3', '4', '5','6'); 
    $b = array($rowData[0][0], $rowData[0][2], $rowData[0][3],$rowData[0][5],$rowData[0][6],$rowData[0][8],$rowData[0][8]); 
    $c = array_combine($a, $b); 

    $slug = str_replace(" ", "-",$rowData[0][1]); 
$slug = str_replace('"', "",$slug); 
$slug = str_replace('/', "-",$slug); 
    $stmt=$dbh->prepare("INSERT INTO tbl_products (name,slug,description,price) 
        VALUES (:name,:slug,:desc,:pret)"); 

$stmt->bindParam(":name",$rowData[0][1]); 
$stmt->bindParam(":slug",$slug); 
$stmt->bindParam(":desc",$rowData[0][10]); 
$stmt->bindParam(":pret",$rowData[0][9]); 

$stmt->execute(); 
$id_product=$dbh->lastInsertId(); 

$stmt=$dbh->prepare("INSERT INTO tbl_products_images_gallery (id_product,name,image,sort_order) 
        VALUES (:id,:name,:image,100)"); 

$stmt->bindParam(":id",$id_product); 
$stmt->bindParam(":name",$rowData[0][4]); 
$stmt->bindParam(":image",$slug); 

$stmt->execute(); 

$stmt=$dbh->prepare("SELECT id_category from tbl_catalog_categories where name=:name"); 
$stmt->bindParam(":name",$rowData[0][2]); 
$stmt->execute(); 
if($row=$stmt->fetch()) 
{ 
    $id_cat=$row['id_category']; 
} 

$stmt=$dbh->prepare("INSERT INTO tbl_products_to_categories (id_category,id_product) 
        VALUES (:id_cat,:id_prod)"); 

$stmt->bindParam(":id_cat",$id_cat); 
$stmt->bindParam(":id_prod",$id_product); 

$stmt->execute(); 

foreach($c as $key => $value) 
    { 

     $stmt=$dbh->prepare("INSERT INTO tbl_products_attributes_values (id_product,id_attribute,attribute_value) 
        VALUES (:id_product,:id_attribute,:value)"); 
$stmt->bindParam(":id_product",$id_product); 
$stmt->bindParam(":id_attribute",$key); 
$stmt->bindParam(":value",$value); 
$stmt->execute(); 
    } 


} 
} 
} 

Répondre

0

if (empty($rowData[0][9])) peut-être?

Ou test nul, ainsi que pour les chaînes vides - sont nulls réponse parfaitement valable à partir PHPExcel ...

d'autant plus que

$rowData = $sheet->rangeToArray('A' . $row . ':' . $highestColumn . $row, NULL, TRUE, FALSE); 

avec son second argument nul est dit PHPExcel retourner un null valeur si la cellule n'existe tout simplement pas dans la feuille de calcul

Bien que vous pouvez changer l'appel rangeToArray() à

$rowData = $sheet->rangeToArray('A' . $row . ':' . $highestColumn . $row, '', TRUE, FALSE); 

pour retourner une chaîne vide au lieu d'une valeur nulle si la cellule n'existe pas

+0

il va encore sur le reste et renvoie l'erreur SQL, il insère la première ligne et sur la deuxième ligne, il doit retourner le si écho mais il va sur l'autre 'Erreur fatale: PDOException Uncaught: SQLSTATE [23000]: violation de la contrainte d'intégrité: 1048 Colonne 'id_category' ne peut pas être nulle dans /home/r35345publ/anticariat.umbrellamedia.ro/admin/xls.php:99 Stack trace: # 0 /home/r35345publ/anticariat.umbrellamedia.ro/admin/xls.php(99): PDOStatement-> execute() # 1 {main} lancé dans /home/r35345publ/anticariat.umbrellamedia.ro/admin/ xls.php sur la ligne 99' – chris227

+0

Eh bien votre vérification de la cellule [0] [9] est juste de vérifier le prix, pas la catégorie .... alors quelle cellule dans chaque rangée contient la catégorie? –

+0

ce n'est pas grave, si le prix est vide, il ne faut pas aller sur l'autre où j'ai tous les inserts. – chris227