【问题标题】:How do I enter 1300 CSV records into a web form?如何在 Web 表单中输入 1300 条 CSV 记录?
【发布时间】:2011-05-03 04:26:25
【问题描述】:

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

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

编辑 - 我绝对意识到 JS 不是这项工作的正确技术,但我相信它可以工作。我在这里尝试使用 JS 的唯一原因是因为这是一种能够完成这项工作的语言,我很熟悉,并且不需要在应用程序中进行大量工作。如果真的说明了,我只能使用其他技术..通常我会选择学习路线,但这次我根本不能。 抱歉这么挑剔!

【问题讨论】:

  • 为什么需要 jQuery 来做这件事? MySQL 确实有一个 LOAD DATA INFILE 或者这也可以用 PHP 很容易地完成。
  • 为什么不用php解析csv文件,然后这样插入到数据库中呢?或者如果它在数据库中只是将其导出为 sql 文件,然后将其导入新站点?
  • 我需要填写表格的原因纯粹是为了节省时间。应用程序在数据到达数据库之前会对其进行大量操作,此时它会在表之间建立大量关系,使用新的 PHP 脚本进行复制将非常耗时。应该提到这一点,但在这种情况下,如果可能的话,通过表单自动输入绝对是完成它的理想方式。编辑 - 我标记 jQuery 的原因只是因为它可能有一个插件可以帮助解决这类事情,但我不知道它是否。
  • 如果文件是用 PHP 导入的,我不明白为什么不能进行任何数据操作。我什至会说这将是一个更快的解决方案,而不是创建一种提交机器人?
  • 基本上,您需要 CSV 文件中的每一位数据进行 url 编码。然后,对于编码文件中的每一行,您需要 curl 表单的 URL,使用 -d 选项通过 curl 请求发送编码数据。 (你会让curl 做和网页表单一样的事情。)

标签: php javascript jquery curl


【解决方案1】:

好的,我自己完成了这个工作。我感谢您的所有意见,但正如我解释的那样,我真的需要用 JS 完成这个工作。我总是很喜欢冒险,但当我绝对不​​能花更多的时间在上面时(这种情况很少见)。解决方案并不复杂:

首先,我使用 phpMyAdmin 中的 LOAD DATA 将数据放入 MySQL 表中。琐碎的。接下来,我只写了一点 PHP 让 JS 发送 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】:

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

    另一种解决方案是使用 watir 编写浏览器脚本。 Watir 用于对 Web 应用程序进行单元测试,但也可以相当轻松地处理此问题。

    【讨论】:

    • 应该是他们自己的网站。在上面使用 curl 将是无稽之谈。为什么会有这样的主流答案?你至少有没有费心阅读 cmets?
    • 什么是答案必须几乎准备好复制粘贴和编译的心态。我已经为操作人员提供了进一步信息的方向。我提到 fiddler 是因为我觉得他可能并不完全了解线路上发生了什么,并且在意识到这一点后,使用 curl 或其他工具可能是微不足道的。
    【解决方案3】:

    我认为让脚本填充表单并提交它很复杂。最简单的方法是在您按下“提交”按钮(可能通过 POST 请求)时像浏览器一样提交数据。

    您说您只想在 JavaScript 中执行此操作。您可以使用 jQuery ajax 功能 (http://api.jquery.com/jQuery.ajax/) 来准备和发送查询。

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

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

    另一方面,您可以使用 urllib 模块轻松编写一个小的 Python 脚本来执行此操作。我认为它会比使用 JavaScript 更快更容易。

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

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

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

    【讨论】:

    • 抱歉,在发布我的答案后立即阅读此内容 - 这肯定是正确的方法,使用 ajax 调用一个接一个地获取记录 - 绝对值得将 CSV 放入数据库以实现这一点过程更容易。我一直在思考的表单交互也很琐碎。
    【解决方案4】:

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

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

    【讨论】:

    • 应该是他们自己的网站。在上面使用 curl 将是无稽之谈
    猜你喜欢
    • 1970-01-01
    • 2013-09-25
    • 2021-11-05
    • 2020-09-18
    • 2015-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多