Modifier les doublons

Fermé
Meryem - Modifié le 22 mai 2018 à 13:45
 Meryem - 22 mai 2018 à 16:03
Bonjour!
je me bloque et j'au besoin de l'aide s'il vous plait!

Bon, j'importe un fichier excel dans ma base de données avec PHPEXCEL et j'affiche le resultat dans un tableau
voila mon code


   if(isset($_FILES['doc'])){
      $errors= array();
      $file_name =mssql_escape_string($_FILES['doc']['name']);
      $file_size =mssql_escape_string($_FILES['doc']['size']);
      $file_tmp  =mssql_escape_string($_FILES['doc']['tmp_name']);
      $file_type =mssql_escape_string($_FILES['doc']['type']);
      $file_ext  =mssql_escape_string(strtolower(end(explode('.',$_FILES['doc']['name']))));
      
      $expensions= mssql_escape_string(array("xlsx"));
      
      if(in_array($file_ext,$expensions)=== false){
         $errors[]="extension not allowed, please choose a xlsx file.";
      }
      
      if($file_size > 2097152){
         $errors[]='File size must be excately 2 MB';
      }
               move_uploaded_file($file_tmp,"doc/".$file_name);


      $file_tmp =$_FILES['doc']['tmp_name'];
set_include_path(get_include_path() . PATH_SEPARATOR . 'Classes/'); 
include 'PHPExcel/IOFactory.php';
// This is the file path to be uploaded.
$inputFileName = 'doc/'.$file_name; 

try {
    $objPHPExcel = PHPExcel_IOFactory::load($inputFileName);
} catch(Exception $e) {
    die('Error loading file "'.pathinfo($inputFileName,PATHINFO_BASENAME).'": '.$e->getMessage());
}

$allDataInSheet = $objPHPExcel->getActiveSheet()->toArray('',true,true,true);
$arrayCount = count($allDataInSheet);  // Here get total count of row in that Excel sheet


for($i=2;$i<=$arrayCount;$i++){
    
$titre_ouv   =mssql_escape_string(trim($allDataInSheet[$i]["A"]));
$auteur_ouv  =mssql_escape_string(trim($allDataInSheet[$i]["B"]));
$nbre_ouv    =mssql_escape_string(trim($allDataInSheet[$i]["C"]));
$source_ouv  =mssql_escape_string(trim($allDataInSheet[$i]["D"]));
$anneepub_ouv=mssql_escape_string(trim($allDataInSheet[$i]["F"]));
$id_cat      =mssql_escape_string(trim($allDataInSheet[$i]["G"]));
 

if ( !empty($titre_ouv) ||  !empty($auteur_ouv) || !empty($nbre_ouv) || !empty($source_ouv) || !empty($anneepub_ouv) || !empty($id_cat)) {

$insertTable= mysql_query("insert into ouvrages (titre_ouv,auteur_ouv,nbre_ouv,source_ouv,anneepub_ouv,id_cat) values('".$titre_ouv."', '".$auteur_ouv."' ,'".$nbre_ouv."','".$source_ouv."', '".$anneepub_ouv."','".$id_cat."');" );

}}}
?>


EDIT : Ajout de la coloration syntaxique dans les balises de code (jordane)


je veux quand j'importe un autre classeur excel, les lignes dont le titre_ouv se ressemble ne s'ajoute pas, par contre le nbre_ouv se modifie avec la nouvelle valeur
MERCI!
A voir également:

1 réponse

jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
22 mai 2018 à 13:49
Bonjour,

Déjà... tu n'as visiblement pas tenu compte des mes remarques précédentes concernant ton code.
Il serait bien de commencer par corriger ce qu'on t'indique !

Ensuite, quand tu dis
le titre_ouv se ressemble

Tu n'auras pas les titres qui se "ressemblent". Soit il sont identiques... soit ils ne le sont pas !
(les algo de "ressemblance" étant compliqués à mettre en place )

Quoi qu'il en soit, comme pour tes lignes vides (voir ta question précédente.....) il te suffit de faire un IF pour vérifier si une valeur précédente correspond à la nouvelle valeur ou non.

A la limite, tu peux stocker les $titre_ouv dans un Array au fur et à mesure que tu parcours ton fichier excel et envuite vérifier si la valeur existe ou non dans l'array.
https://www.php.net/manual/fr/function.in-array.php
0
Bonjour,
Je suis nul en php et j'ai pas suffisamment de temps pour faire un code parfait, j'ai juste besoin de terminer mon mini projet.

Je veux dire identiques pas ressemblance je m'excuse.

tu peux me dire comment je peux faire avec un simple IF
merci
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
22 mai 2018 à 14:31
Par contre... identiques à des lignes déjà insérées dans la BDD (depuis un autre fichier par exemple ) ou des lignes "identiques" dans le même document ?
Si dans le même document, tu utilises l'array comme je te l'ai indiqué.
Si tu veux regarder dans la bdd... ben tu fais une requête pour voir si le titre y existe déjà ou non.
0
j'ai fait cette requête

$veriftitre = mysql_query("SELECT titre_ouv FROM ouvrages WHERE titre_ouv='$titre_ouv'") or die(mysql_error());
if(mysql_num_rows($veriftitre) != 0)
{
echo 'cette entrée existe déjà !';
}


et ça marche.
mais comme j'ai déjà cité, Si le titre est identiques on écrase l'ancienne valeur de nbre_ouv et on la remplace par la nouvelle valeur.
Donc je pense que à la place de "echo 'cette entrée existe déjà !';" Il me faut une requête.
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649 > Meryem
22 mai 2018 à 14:42
Donc je pense que à la place de "echo 'cette entrée existe déjà !';" Il me faut une requête.

Oui. Une requête UPDATE ....
0
ça marche pas :\


$veriftitre = mysql_query("SELECT titre_ouv FROM ouvrages WHERE titre_ouv='$titre_ouv'") or die(mysql_error());
if(mysql_num_rows($veriftitre) != 0)
{

$sql = "UPDATE ouvrages SET titre_ouv=$nbre_ouv" ;


}

0