如何在Web表单中输入1300 CSV记录?

时间:2010-10-31 21:15:25

标签: php javascript jquery curl

我在PHP应用程序中执行了相当广泛的数据输入任务。该应用程序允许您一次输入一个数据集(名字,姓氏,电子邮件),单击“开始”,然后使用AJAX提交数据并空白表单,将光标放回第一个输入。我有一个1,300的数据集需要使用此方法输入。它目前在Excel文件中,但当然可以很容易地存在于数据库,CSV等中。

这绝不是利用网站或应用程序,而是将旧网站的用户数据输入新网站。我正在寻找一种方法来自动化这个条目 - 填充电子邮件,填充名字,填写姓氏,提交表单,延迟一秒钟的响应(这是在本地运行所以它应该是snappy),选择一个新行到插入,重复。

编辑 - 我完全意识到JS不适合这项工作,但我相信它可以工作。我试图在这里使用JS的唯一原因是因为这是能够完成这项工作的一种语言,我很满意,并且在应用程序中不需要大量的工作。我只能使用其他技术,如果它真的拼写出来......通常我会选择学习路线,但这次我根本就不能。 很抱歉这么挑剔!

4 个答案:

答案 0 :(得分:1)

我认为制作一个脚本填写表单并提交它很复杂。最简单的方法是按下“提交”按钮(可能是通过POST请求)浏览器提交数据。

你说过你只想用JavaScript做这件事。您可以使用jQuery ajax功能(http://api.jquery.com/jQuery.ajax/)来准备和发送查询。

要准备查询,必须使用与表单相同的参数名称(元素的name属性)。

问题是如何使用JavaScript中的CSV文件。由于JavaScript无法访问您的文件系统,您必须使用奇特的解决方案,例如在textarea中粘贴CSV文本。使用此方法,您的javascript可以访问CSV数据,解析它并准备请求。然后,您可以使用ajax函数发送查询。

另一方面,您可以使用urllib模块轻松地执行一个小型Python脚本。我认为它比使用JavaScript更快更容易。

在这两种情况下,服务器的行为都与使用“提交”按钮发送请求的行为相同。

所以脚本的步骤(任何语言):

  1. 获取CSV数据
  2. 解析数据并为每行准备请求
  3. 发送HTTP请求

答案 1 :(得分:1)

好的,我自己完成了这个...我很欣赏你的所有输入,但我真的需要用JS完成这个,正如我解释的那样。我总是非常喜欢冒险,但是当我绝对不​​能花费超过必要的时间时(我很少见)。解决方案并不复杂:

首先,我使用phpMyAdmin中的LOAD DATA将数据导入MySQL表。不重要的。接下来,我为JS发送了一些PHP来发送AJAX请求。

getUser( $_POST['uid'] );

function getUser( $uid ){
    $usr = "********";
    $pwd = "********";
    $db = "import_users";
    $host = "localhost";

    $cid = mysql_connect($host,$usr,$pwd);
    if (!$cid) { echo("ERROR: " . mysql_error() . "\n"); }

    $SQL = "SELECT * FROM users WHERE id = $uid";
    $retid = mysql_db_query($db, $SQL, $cid);
    if(!$retid){
        echo( "error: " . mysql_error());
    } else{
        while ($row = mysql_fetch_array($retid)) { 
            $user = array(
                'email' => $row["email"],
                'firstname' => $row["firstname"],
                'lastname' => $row["lastname"],
                'username' => $row["username"],
             );
            echo json_encode($user);
        }
    }
}

这个PHP不需要干净,不需要清理,不需要优化等等 - 这发生在一个时间和本地。

接下来,JavaScript:

function incrementUser(){
    $.ajax({
        type: "POST",
        url: "/path-to-php-file/ajax.php",
        data: "uid="+i,
        success: function(msg){
            console.log( "Completed: " + JSON.parse(msg) );
            var user = JSON.parse(msg);
            jQuery('#email').val(user.email);
            //jQuery('#user_login').val(user.username);
            jQuery('#first_name').val(user.firstname);
            jQuery('#last_name').val(user.lastname);
            jQuery('#user_info_form').submit();
        }
     });
    if( i > 1463 ){
        clearTimeout( time );
    } else{
        i = i + 1;
    }
}

再次 - 可以更好地执行,但无关紧要,因为这是一次性过程。这非常有效,增量时间可能更短,需要更少的时间来完成整个过程。

再次感谢您的投入,对于那些掌握这些其他技术或者有时间玩它们的人来说,可能会有很多帮助。不会不受重视!

答案 2 :(得分:0)

很抱歉,如果我没有帮助,但如果您必须通过表示层来处理您的模型,那么您的应用程序设计就会遇到很大问题。

除了投诉之外,我宁愿选择PHP或Python中的简单脚本,而不是任何JS。使用curl功能,您可以使用从CSV解析的数据向服务器发送POST请求。

答案 3 :(得分:0)

复制浏览器发出的请求。使用像fiddler或paros代理这样的http嗅探器。一旦你看到浏览器发送了什么数据,就应该很容易复制这种行为。

另一种解决方案是使用watir编写浏览器脚本。 Watir用于单元测试Web应用程序,但也可以很容易地处理这个问题。