1. 论坛系统升级为Xenforo,欢迎大家测试!
    排除公告

PHP这里谁比较精,赶紧救命!~

本帖由 pageleaf2007-03-20 发布。版面名称:后端开发

  1. pageleaf

    pageleaf New Member

    注册:
    2006-03-29
    帖子:
    523
    赞:
    4
    文本里的数据是这样的:

    名次 会员简称 成交量 增减
    1 中谷期货 1257 830
    2 中粮期货 1081 664
    3 大通期货 540 -2
    4 辽粮期货 352 350
    5 国际期货 274 158
    6 民安期货 239 0
    7 上海浙石 236 157
    8 汇鑫期货 171 154
    9 华南期货 170 85
    10 东银期货 165 -147

    该怎么把排名数据一个个写进数据库里?而且这样的文件一次就有很多个,如何实现多文件循环读取?
    文件名是这样子的:
    20070319_a0705_成交量_买持仓_卖持仓排名.txt
    20070319_a0707_成交量_买持仓_卖持仓排名.txt
    .....
    20070319_y0711_成交量_买持仓_卖持仓排名.txt
    20070319_y0712_成交量_买持仓_卖持仓排名.txt
    .....
     
  2. fen

    fen New Member

    注册:
    2005-12-18
    帖子:
    3,050
    赞:
    25
  3. pageleaf

    pageleaf New Member

    注册:
    2006-03-29
    帖子:
    523
    赞:
    4
  4. 沙滩凉鞋

    沙滩凉鞋 New Member

    注册:
    2005-09-06
    帖子:
    1,211
    赞:
    5
    说思路:

    由于你文件名有规律……
    所以可以用循环打开…… 建议用 for 循环

    打开以后
    用 file() 函数取数组
    然后再遍历数组(元素为一行数据,比如“1 中谷期货 1257 830\n”)
    以空格为分隔符来分割字符串
    然后写入数据库
    进入下一循环
     
  5. fen

    fen New Member

    注册:
    2005-12-18
    帖子:
    3,050
    赞:
    25
    :lovely:
     
  6. Hoofei

    Hoofei New Member

    注册:
    2005-12-10
    帖子:
    3,162
    赞:
    35
    :( 大叔说的我看不懂!
     
  7. 小李

    小李 New Member

    注册:
    2005-11-03
    帖子:
    2,468
    赞:
    20
    PHP:
    这里就不要了。
    实验了一下

    但是有点问题。字符编码的问题,从文件中读出来,SQL查询的时候就抱错了,提示是乱码,请教解决办法。:lol:

    没有错误处理的代码,:)
     
  8. 小李

    小李 New Member

    注册:
    2005-11-03
    帖子:
    2,468
    赞:
    20
    日。 莫名奇妙的解决了,测试环境win2003+Apache/2.2.2 (Win32) PHP/5.1.4 +MYSQL5.0.22 ,代码:
    输入你的那些文本文件的目录,程序自动遍历该目录所有的TXT文件,并以TXT文件名的前14个字符作为表名创建一个数据表,把改文件的数据按格式 存入表中。:)

    最后修改完了,看看还有什么问题。

    PHP:
    <form name="form" method="POST" action=<?php echo $PHP_SELF;?>>
    请输入目录:<input type="text" name="dir" />    
    <input type="submit" name="submit" value="提交" />
    </form>
    <?php
    //检测魔术引用的代码
        
    $is_magic = @ini_get("magic_quotes_gpc");

        if(!
    get_magic_quotes_gpc()){
            if(
    is_array($_REQUEST)){ 
                foreach(
    $_REQUEST AS $key => $value){ 
                $
    $key addslashes($value); 
                }    
            }
        }
        else{
            if(
    is_array($_REQUEST)){ 
                foreach(
    $_REQUEST AS $key => $value){ 
                $
    $key $value
                }    
            }
        }

        
    $inputdir=$_POST['dir'];
        if(!
    eregi('^[A-Za-z]:\\\\.+',$inputdir)){
            echo 
    '错误的目录';
            exit;
        }    
        
    $conn mysql_connect("localhost""root""666666"); //设置你的数据库用户及密码。
        
    if (!$conn) {
            echo 
    "Unable to connect to DB: " mysql_error();
            exit;
        }
        if (!
    mysql_select_db("testdb")) { //设置你的数据库
            
    echo "Unable to select mydbname: " mysql_error();
            exit;
        }
        
    mysql_query("set names 'gb2312'");
        
    $dir=dir($inputdir);
        
    $dir->rewind();
        while(
    $file=$dir->read()){
            if(
    preg_match("/\.txt/",$file)){
                
    $tablename=substr($file,0,14);
                
    $sql ="DROP TABLE IF EXISTS $tablename";        
                
    $result mysql_query($sql);

                
    $sql ="CREATE TABLE $tablename (
            rank VARCHAR(20)  CHARACTER SET gbk COLLATE gbk_chinese_ci NULL,
            name VARCHAR(20)  CHARACTER SET gbk COLLATE gbk_chinese_ci NULL,
            deal VARCHAR(20)  CHARACTER SET gbk COLLATE gbk_chinese_ci NULL, 
            zhenjian VARCHAR(20)  CHARACTER SET gbk COLLATE gbk_chinese_ci NULL 
            )"
    ;    
                
    $result mysql_query($sql);
            if (!
    $result) {
                echo 
    "Could not successfully run query ($sql) from DB: " mysql_error();
                exit;
            }        
            
    $file=$inputdir.'\\'.$file;
            
    $fp=fopen($file,'rb');
            while(
    $order=fgetcsv($fp,100," ")){
            
    $sql "INSERT INTO $tablename (`rank`, `name`, `deal`, `zhenjian`) VALUES ('$order[0]','$order[1]','$order[2]','$order[3]')";
            
    $result mysql_query($sql);

            if (!
    $result) {
            echo 
    "Could not successfully run query ($sql) from DB: " mysql_error();
            exit;
        }        
        }
        }
    }
    echo 
    '程序已经成功完成';
    $dir->close;
    ?>
     
  9. 小李

    小李 New Member

    注册:
    2005-11-03
    帖子:
    2,468
    赞:
    20
    但是有个缺点就是,如果你有一万个文件不是要建一万个表?:(
     
  10. pageleaf

    pageleaf New Member

    注册:
    2006-03-29
    帖子:
    523
    赞:
    4
    :razz: 当然是存放在同一表中,不过真是太感谢小李同志了
     
  11. 小李

    小李 New Member

    注册:
    2005-11-03
    帖子:
    2,468
    赞:
    20
    这样可以放一个表里面了。

    PHP:
    <form name="form" method="POST" action=<?php echo $PHP_SELF;?>>
    请输入目录:<input type="text" name="dir" />    
    <input type="submit" name="submit" value="提交">
    </form>
    <?php
        
    //数据库设定
        
    $dbhost='localhost';
        
    $dbuser='root';
        
    $dbpwd='666666';
        
    $dbname='testdb';
        
    $dbtable='anytable';//任意你想要的表名
        
        
        
    $is_magic = @ini_get("magic_quotes_gpc");

        if(!
    get_magic_quotes_gpc()){
            if(
    is_array($_REQUEST)){ 
                foreach(
    $_REQUEST AS $key => $value){ 
                $
    $key addslashes($value); 
                }    
            }
        }
        else{
            if(
    is_array($_REQUEST)){ 
                foreach(
    $_REQUEST AS $key => $value){ 
                $
    $key $value
                }    
            }
        }

        
    $inputdir=$_POST['dir'];    
        if(!
    eregi('^[A-Za-z]:\\\\.+',$inputdir)){
            echo 
    '错误的目录';
            exit;
        }
        
    $conn mysql_connect($dbhost,$dbuser,$dbpwd);
        if (!
    $conn) {
            echo 
    "Unable to connect to DB: " mysql_error();
            exit;
        }
        if (!
    mysql_select_db($dbname)) {
            echo 
    "Unable to select mydbname: " mysql_error();
            exit;
        }
        
    mysql_query("set names 'gb2312'");
    //    $sql ="DROP TABLE IF EXISTS $dbtable"; // 
    //    $result = mysql_query($sql);    
        
    $sql ="CREATE TABLE $dbtable (
            id INT( 10 ) NOT NULL AUTO_INCREMENT , 
            rank VARCHAR(20)  CHARACTER SET gbk COLLATE gbk_chinese_ci NULL,
            name VARCHAR(20)  CHARACTER SET gbk COLLATE gbk_chinese_ci NULL,
            deal VARCHAR(20)  CHARACTER SET gbk COLLATE gbk_chinese_ci NULL, 
            zhenjian VARCHAR(20)  CHARACTER SET gbk COLLATE gbk_chinese_ci NULL,
            PRIMARY KEY  (`id`)
            )"
    ;    
        
    $result mysql_query($sql);
        if (!
    $result) {
            
    $dir=dir($inputdir);
            
    $dir->rewind();
            while(
    $file=$dir->read()){ 
                if(
    preg_match("/\.txt/",$file)){
                    
    $file=$inputdir.'\\'.$file;
                    
    $fp=fopen($file,'rb');
                        while(
    $order=fgetcsv($fp,100," ")){
                            
    $sql "INSERT INTO $dbtable (`rank`, `name`, `deal`, `zhenjian`) VALUES ('$order[0]','$order[1]','$order[2]','$order[3]')";
                            
    $result mysql_query($sql);

                            if (!
    $result) {
                                echo 
    "Could not successfully run query ($sql) from DB: " mysql_error();
                                exit;
                            }        
                        }
                }
        
        }
        }
        else{    
            
    $dir=dir($inputdir);
            
    $dir->rewind();
            while(
    $file=$dir->read()){ 
                if(
    preg_match("/\.txt/",$file)){
        
                    
    $file=$inputdir.'\\'.$file;
                    
    $fp=fopen($file,'rb');
                        while(
    $order=fgetcsv($fp,100," ")){
                            
    $sql "INSERT INTO $dbtable (`rank`, `name`, `deal`, `zhenjian`) VALUES ('$order[0]','$order[1]','$order[2]','$order[3]')";
                            
    $result mysql_query($sql);
        
                            if (!
    $result) {
                                echo 
    "Could not successfully run query ($sql) from DB: " mysql_error();
                                exit;
                            }        
                        }
                }
            }
    }
    echo 
    '程序已经成功完成';
    $dir->close;
    ?>
    :) ,但是我觉得放一个表里面 ,以后怎么知道什么是什么呢?:(
     
    #11 小李, 2007-03-21
    最后编辑: 2007-03-21
  12. 平行线

    平行线 New Member

    注册:
    2005-10-29
    帖子:
    9,943
    赞:
    63
    小李原来是个高手
     
  13. 小李

    小李 New Member

    注册:
    2005-11-03
    帖子:
    2,468
    赞:
    20
    不敢不敢,我还是新手,这几天刚好看PHP+MYSQL WEB 开发。:lol:
     
  14. pageleaf

    pageleaf New Member

    注册:
    2006-03-29
    帖子:
    523
    赞:
    4
    :cry: 感动的一把鼻涕一把眼泪
     
  15. 平行线

    平行线 New Member

    注册:
    2005-10-29
    帖子:
    9,943
    赞:
    63
    楼上的,需要我们提供纸巾吗?
     
  16. pageleaf

    pageleaf New Member

    注册:
    2006-03-29
    帖子:
    523
    赞:
    4
    你们提供啥牌子的纸巾
     
  17. 平行线

    平行线 New Member

    注册:
    2005-10-29
    帖子:
    9,943
    赞:
    63
    我们只提供散装
     
  18. Kevin

    Kevin New Member

    注册:
    2005-10-23
    帖子:
    12,728
    赞:
    55
    牌子你就别指望了,不要用过的就不错了!:)