העלאת קובץ csv לתוך מסד בPHP
-
יו פיפסתי את הכותרת, סליחה!
צריך לבנות פוקנציה שמקבלת שתי ארגומנטים: 1) שם הקובץ, 2) מחרוזת החיבור למסד.
בתוך הפונקציה עלינו לעשות את הצעדים הבאים:
א. ניתוח הCSV - למערך אסוציאטיבי או כל דרך אחרת, באופן שיש לנו את כל שמות העמודות ואת אוסף השורות.
ב. בדיקה האם טבלה בשם קיימת במסד (ואם כן הוספה/מחיקה ?) ואם לא יצירת טבלה ע"י פקודת sql של CREATE TABLE, שלמחרוזת היצירה נשרשר את כל שמות העמודות של הCSV כשדות בטבלה מסוג טקסט.
ג. מעבר בלולאה על פני השורות עם פקודת INSERT לכל אחד.איפה אתה מתקשה?
בינתיים כתעסוקה אנסה לחפש מה שחיפשת - פתרון כבר מוכן. -
@nigun אמר בהעלאת קובץ csv לתוך מסד בPHP:
למעשה מה שחסר לי זה פונקציה לבדיקת שם הקובץ
$filename=$_FILES['nameofyourfileinput']['name'];
https://stackoverflow.com/a/28807492/1271037
והעלאה בפוסט ישירות בלי לשמור בשרת עצמו
תחפש php csv parse without saving
https://stackoverflow.com/a/18125132/1271037 -
אני לא יודע למה
אבל לפעמים אני מחפש משהו ולא מוצא
אחר כך אני חוזר ופתאום הכל זורם
תכל'ס בסוף מצאתי כמה סקריפטים ושיניתי למה שאני צריך
אבל עכשיו שם הטבלה נהיה name.csv
ואני לא מצליח לעשות split כדי להוריד את ה.CSV
אני כמובן ימשיך לחפש לבד
אבל אולי יכתוב מדריך איך מחפשים בגוגל
בכל מקרה אני יעלה פה את הקוד אם משהו ירצה את זה בעתיד
וגם לשמוע הערות
נ.ב. אני עשיתי מחיקה לטבלה לפני הכנסת הנתונים כי אני מעוניין לדרוס את מה שהיה לפני זה<?php $con=mysqli_connect("localhost","root","","db"); if ( isset( $_FILES['userfile'] ) ) { $csv_file = $_FILES['userfile']['tmp_name']; $csv_name = $_FILES['userfile']['name']; $CREATE = "CREATE TABLE IF NOT EXISTS `$csv_name` ( `id` int(11) unsigned NOT NULL auto_increment, `aa` char(50) NOT NULL default '', `bb` char(50) NOT NULL default '', PRIMARY KEY (`id`) ) ENGINE=InnoDB "; mysqli_query($con,$CREATE); if ( ! is_file( $csv_file ) ) exit('File not found.'); $DELETE=mysqli_query($con,"DELETE FROM `$csv_name`"); $sql = ''; if (($handle = fopen( $csv_file, "r")) !== FALSE) { while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { $sql = mysqli_query($con,"INSERT INTO `$csv_name` SET `id` = '$data[0]', `aa` = '$data[1]', `bb` = '$data[2]'; "); } fclose($handle); } exit( "Complete! " ); } ?> <!DOCTYPE html> <html> <head> <title>CSV to MySQL Via PHP</title> </head> <body> <form enctype="multipart/form-data" method="POST"> <input name="userfile" type="file"> <input type="submit" value="Upload"> </form> </body> </html>
וכמעט שכחתי
איך אני מתעלם מהשורה הראשונה (של הכותרות)?
(אני יודע שאפשר עם LOAD DATA INFILE אבל זה לא עובד לי)
עריכה: בדקתי ומצאתי שבמקרה הספיצפי הזה אני סך הכל נותן לכותרת ID 0 ואז הוא לא נרשם
אבל אשמח לדעת מה הפתרון במקרים אחרים