################# You can copy this code to test #################;;
<?;;
include("include/dbclass.inc"); //可以用 MYSQL.INC 类代替测试;;
$q = new DB_Sql;;;
$db = $q->Database; //define the database;;
mysql_connect('localhost:3306',$q->User,$q->Password);;;
?>;;
<form method="post" action="<?php echo $PHP_SELF;?>";;
enctype="multipart/form-data">;;
<input type="file" name="csv_file";;
value="<?php echo $csv_file;?>"> ;;
terminated by <input type="text" name="terminated";;
value="," size=2><p>;;
Which table you want to insert ?;;
<?php show_table($db,$table); ?><p>;;
<input type="submit" name="submit" value="go">;;
</form>;;
<?php;;
function show_field($db,$table,$num,$selected_field) {;;
$result = mysql_db_query($db, "SHOW KEYS FROM $table") or mysql_die();;;
$primary = "";;;
while ($row = mysql_fetch_array($result));;
if ($row["Key_name"] == "PRIMARY");;
$primary .= "$row[Column_name], ";;;
$result = mysql_db_query($db, "SHOW FIELDS FROM $table");;;
if (!$result) {;;
mysql_die();;;
};;
else {;;
echo "<select name=field$num>n";;;
while ($row= mysql_fetch_array($result)) {;;
$selected = ($selected_field == $row["Field"]) ? "selected" : "";;;
echo "<option value=" . $row["Field"] . " $selected>" .;;
$row["Field"] . "</option>n";;;
};;
echo "</select>nn";;;
};;
};;
function show_table($db,$selected_table) {;;
$tables = mysql_list_tables($db);;;
$num_tables = @mysql_numrows($tables);;;
if ($num_tables == 0) {;;
echo "no table yet";;;
};;
else {;;
$i = 0;;;
echo "<select name=table>n";;;
while ($i < $num_tables) {;;
$table = mysql_tablename($tables, $i);;;
$selected = ($selected_table == $table) ? "selected" : "";;;
echo "<option value=$table $selected>$table</option>n";;;
$i++;;;
};;
echo "</select>nn";;;
};;
};;
if ($submit) {;;
if(!empty($csv_file) && $csv_file != "none") {;;
//$csv_file = stripslashes($csv_file);;;
$fp = fopen($csv_file, "r");;;
// show first line of the csv file to select dababase table and its fields;;
echo "<form method=post action=$PHP_SELF>";;;
$csv_data = fgetcsv($fp, 2000, "$terminated");;;
$num = count($csv_data);;;
for ( $c=0; $c<$num; $c++ ) {;;
$field_name[$c] = $csv_data[$c];;;
echo $field_name[$c] . " n";;;
$table_field_name = "field$c";;;
show_field($db,$table,$c,$$table_field_name);;;
echo "<br>";;;
};;
// copy the tmp file for next use;;
$dest = "/tmp/csv_file.csv";;;
copy($csv_file,$dest);;;
echo "<input type=hidden name=csv_file value=$dest>n" .;;
"<input type=hidden name=table value=$table>n" .;;
"<input type=hidden name=terminated value=$terminated>n" .;;
"<input type=submit name=submit value=ok></form><p>n";;;
// when click 'ok' button ,start insert data;;
if ($submit == "ok") {;;
$NO = 1;;;
while ($csv_data = fgetcsv($fp, 2000, "$terminated")) {;;
//$num = count($csv_data);;;
for ( $c=0; $c<$num; $c++ ) {;;
$table_field_name = "field$c";;;
$first_3 = substr($$table_field_name, 0, 3);;;
$first_2 = substr($$table_field_name, 0, 2);;;
$val_tmp = ($first_3 == "fid" || $first_3 == "int";;
|| $first_2 == "id") ?;;
$csv_data[$c] : "'" . $csv_data[$c] . "'";;;
$val .= $val_tmp . ",";;;
$var .= $$table_field_name . ",";;;
};;
$val = substr($val, 0, -1);;;
$var = substr($var, 0, -1);;;
$query = "INSERT INTO $table ($var) VALUES ($val)";;;
$val = "";;;
$var = "";;;
$q->query($query);;;
echo "NO. $NO $query<p>";;;
$NO++;;;
};;
fclose($fp);;;
};;
};;
};;
?>;;
标签: