簡體   English   中英

我可以上傳一個CSV文件嗎,它可以完全覆蓋同一個MySQL的MySQL所有存在的數據。

[英]Can i upload a CSV File which can over right all exist data of MySQL by same id .with PHP

這是我的代碼,我有一個upload.php,並且工作正常,但是我必須通過上載CSV文件來填充表的缺失數據,但是每當我上載CSV時它都無法正常工作,它會自動生成新ID並保存,但是我的問題是例如,如果我的表單ID號為12,現在我必須在電話號碼中插入,此字段包含除電話號碼以外的所有信息,那么我該怎么辦

ID名稱電子郵件電話12 Xys text@fb.com

現在通過CSV我只需要上傳電話號碼

            <?php
            require_once('../web.config.php'); require_once(ROOT_PATH.'global.php');
            require_once('function.php');
            ?>
            <!DOCTYPE html>
            <title>Home</title>
            </head><body>
            <div  id="control_box" class="indexWrap">
              <div id="container">
                <div id="form">
                  <?php
            define('DB_SERVER', 'localhost');
            define('DB_USER', 'root');
            define('DB_PASSWORD', '');
            define('DB_NAME', 'upcsv');

            @$conn = mysql_connect (DB_SERVER, DB_USER, DB_PASSWORD);
            mysql_select_db (DB_NAME,$conn);
            mysql_set_charset('UTF8', $conn) or die(mysql_error());
            if(!$conn){
                die( "Sorry! There seems to be a problem connecting to our database.");
            }

            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'])){
            // check feilds are not empty
            if(get_file_extension($_FILES["uploaded"]["name"])!= 'csv')
            {
            $error[] = 'Only CSV files accepted!';
            }
            if (!$error){
            $tot = 0;
            $handle = fopen($_FILES["uploaded"]["tmp_name"], "r");
            fgets($handle); 
            while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
                for ($c=0; $c < 1; $c++) {
                        //only run if the first column if not equal to id
                        if($data[0] !='id'){
                            mysql_query("INSERT INTO tabledb(
                                                `id`,
                                                `name`,
                                                `email`,
                                                `phone`
                            )VALUES(
                                                '" . mysql_real_escape_string($data[0 ])."',
                                                '" . mysql_real_escape_string($data[1 ])."',
                                                '" . mysql_real_escape_string($data[2 ])."',
                                                '" . mysql_real_escape_string($data[3 ])."'
                                                )")or die(mysql_error());
                        }

                $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;
            ?>
                </div>
              </div>
            </div>
            <!-- END TEMPORARY CONTENT -->
            </body>
            </html>

有一些不清楚的地方,但我會根據您提供的信息嘗試回答。

您提到如果表單ID為20,則如果該表單ID為“主鍵”,則應該添加電話號碼,或者甚至是唯一索引,則可以使用REPLACE查詢來解決您的問題。

由於您使用的INSERT查詢將始終在表中插入新行,請嘗試使用REPLACE查詢,該查詢將首先嘗試找到相同的索引或主鍵(如果有),然后將其刪除/更新(取決於表存儲引擎),老行。 如果刪除舊行,則將插入新行。

REPLACE INTO tabledb(
                      `id`,
                      `name`,
                      `email`,
                      `phone`
                       )VALUES(
                        '" . mysql_real_escape_string($data[0 ])."',
                        '" . mysql_real_escape_string($data[1 ])."',
                        '" . mysql_real_escape_string($data[2 ])."',
                        '" . mysql_real_escape_string($data[3 ])."'
                       )

您可以使用以下查詢。

請隨意詢問您是否有任何問題。

暫無
暫無

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

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