Maison  >  Questions et réponses  >  le corps du texte

Comment résoudre le problème de l'impossibilité de mettre à jour la "Colonne de date" : Comment télécharger correctement un fichier CSV lors de la mise à jour d'une table de base de données MySQL

<p>Le principal problème dans mon code est que je ne peux pas mettre à jour la "date" du fichier csv dans la table de la base de données mysql à l'aide de php. La ligne de code $date = mysqli_real_escape_string($connect, $data[1]); est le principal problème ici. Je recherche une requête alternative pour cette ligne de code particulière. </p> <p>Voici le fichier csv : https://drive.google.com/file/d/1EdMKo-XH7VOXS5HqUh8-m0uWfomcYL5T/view?usp=sharing</p> <p>Voici le code complet : </p> <pre class="brush:php;toolbar:false;"><?php //index.php $connect = mysqli_connect("localhost","root","1234","ml_database"); $message =''; if(isset($_POST["upload"])){ si($_FILES['product_file']['name']){ $filename = exploser(".”,$ _FILES ['fichier_produit'] ['nom']); if(end($ filename)==“csv”){ $handle = fopen($ _FILES ['product_file'] ['tmp_name'],“r”); while($ data = fgetcsv($ handle)){ $data_id = mysqli_real_escape_string($ connect,$ data [0]); $date = mysqli_real_escape_string($ connect,$ data [1]); //我的问题 $births = mysqli_real_escape_string($ connect,$ data [2]); $query = « METTRE À JOUR ma_table DÉFINIR la date = '$ date', naissances ='$ naissances', OÙ data_id ='$ data_id'"; mysqli_query($connect,$requête); } fclose($ handle); en-tête(«emplacement:index.php?mise à jour = 1"); } autre { $message ='<label class="text-danger">Veuillez sélectionner uniquement les fichiers CSV</label>'; } } autre { $message ='<label class="text-danger">Veuillez sélectionner le fichier</label>'; } } if(isset($_GET["mise à jour"])){ $message ='<label class="text-success">Mise à jour du produit terminée</label>'; } $query = "SELECT * FROM ma_table"; $result = mysqli_query($connect, $query); ?> <!DOCTYPE html> <html> <tête> <title>Mettez à jour la base de données Mysql en téléchargeant un fichier CSV à l'aide de PHP</title> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css"/> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> ≪/tête> <corps> <br /> <div class="conteneur"> <h2 align="center">Mettez à jour la base de données Mysql en téléchargeant un fichier CSV à l'aide de PHP</a></h2> <br /> <form method="post" enctype='multipart/form-data'> <p><label>Veuillez sélectionner un fichier (format CSV uniquement)</label> <type d'entrée = nom "fichier" = "fichier_produit"/></p> <br /> <type d'entrée = « soumettre » nom = « télécharger » classe = « btn btn-info » valeur = « télécharger »/> </formulaire> <br /> <?php echo $message?> <h3 align="center">Naissances</h3> <br /> <div class="table-responsive"> <table class="table table bordée table-rayée"> <tr> <th>Date</th> <th>Naissance</th> ≪/tr> <?php while($row = mysqli_fetch_array($result)) { écho ' <tr> <td>'.$row ["date"].'</td> <td>'.$row ["naissances"].'</td> ≪/tr> '; } ?> </tableau> </div> </div> </corps> </html></pre></p>
P粉529581199P粉529581199419 Il y a quelques jours505

répondre à tous(1)je répondrai

  • P粉817354783

    P粉8173547832023-08-29 00:13:45

    Tout d’abord, vous devez lire et supprimer la ligne d’en-tête dans le CSV. Ensuite, à l’aide de requêtes appropriées, préparées et paramétrées, vous pouvez mettre à jour correctement la base de données. Étant donné que les dates du fichier .csv sont au format correct, aucune action n'est requise, mais cela peut ne pas être le cas avec d'autres fichiers CSV, où les dates doivent souvent être reformatées avant de pouvoir être stockées correctement dans le tableau.

    <?php
    //index.php
    $connect = mysqli_connect("localhost", "root", "1234", "ml_database");
    $message = '';
    
    if(isset($_POST["upload"])) {
        if($_FILES['product_file']['name']) {
            $filename = explode(".", $_FILES['product_file']['name']);
    
            if(end($filename) == "csv") {
                $handle = fopen($_FILES['product_file']['tmp_name'], "r");
                // 读取并忽略标题行
                $data = fgetcsv($handle, 1000, ",");
    
                // 准备查询一次
                $query = "UPDATE my_table 
                                SET date = ?, 
                                    births = ?
                              WHERE data_id = ?";
                $stmt = $connect->prepare($query);
    
                // 循环遍历csv剩余的行
                while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
                    $stmt->bind_param('sss', $data[0],$data[1],$data[2]);
                    $stmt->execute();
                }
                fclose($handle);
                header("location: index.php?updation=1");
                exit;   // 重定向后一定要使用exit
            } else {
                $message = '';
            }
        } else {
            $message = '';
        }
    }

    Remarque : je suppose que les 3 colonnes sont de type texte.

    $stmt->bind_param('sss', $data[0],$data[1],$data[2]);
                       ^^^

    Ifdate_id是整数类型,您可以将其更改为'ssi',尽管3个sfonctionne généralement bien aussi.

    Référence :

    fgetcsv
    mysqli_prepare
    mysqli_bind_param

    répondre
    0
  • Annulerrépondre