Как мне ввести 1300 CSV-записей в веб-форму? - PullRequest
1 голос
/ 01 ноября 2010

У меня довольно обширная задача ввода данных для выполнения в приложении PHP. Приложение позволяет вам вводить по одному набору данных за раз (имя, фамилия, адрес электронной почты), нажимать кнопку «Перейти», а затем использовать AJAX для отправки данных и очищать форму, возвращая курсор в первый ввод. У меня есть набор данных 1300, который необходимо ввести, используя этот метод. В настоящее время он находится в файле Excel, но, разумеется, он также может быть в базе данных, в CSV и т. Д.

Это ни в коем случае не для эксплуатации сайта или приложения, а для ввода пользовательских данных со старого сайта в новый. Я ищу способ автоматизировать эту запись - заполнить электронную почту, заполнить имя, заполнить фамилию, отправить форму, задержать секунду для ответа (это выполняется локально, поэтому он должен быть быстрым), выберите новую строку, чтобы вставить, повторить.

Редактировать - я абсолютно понимаю, что JS не подходит технология для этой работы, но я уверен, что она может работать. ЕДИНСТВЕННАЯ причина, по которой я пытаюсь использовать JS, заключается в том, что это единственный язык, способный сделать это, с которым мне удобно, и не требующий тонны работы в приложении. Я могу использовать другие технологии только в том случае, если это действительно прописано ... обычно я бы пошел по пути обучения, но на этот раз я просто не могу. Извините, что так разборчивы!

Ответы [ 4 ]

1 голос
/ 01 ноября 2010

Хорошо, я работал над этим самостоятельно ... Я ценю все ваши отзывы, но мне действительно нужно было сделать это с JS, как я объяснил.Я всегда очень предприимчив, но не тогда, когда я абсолютно не могу тратить на это больше времени, чем необходимо (что редко).Решение не сложное:

Сначала я получил данные в таблицу MySQL, используя LOAD DATA в phpMyAdmin.Trivial.Затем я написал немного 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;
    }
}

Опять же - может быть лучше выполнено, но это не имеет значения, потому что это однократный процесс,Это сработало отлично, и время приращения, вероятно, могло бы быть еще короче, что потребовало бы меньше времени для завершения процесса.

Еще раз спасибо за ввод, вероятно, большая помощь для кого-то, кто либо имеет представление об этих других технологияхили какое-то время поиграть с ними.Не остается незамеченным!

1 голос
/ 01 ноября 2010

Я думаю, что сделать сценарий, заполнить форму и отправить ее сложно. Самый простой способ - отправить данные так, как это делает браузер, когда вы нажимаете кнопку «отправить» (возможно, с помощью запроса POST).

Вы сказали, что хотели бы делать это только на JavaScript. Вы можете использовать функции jQuery ajax (http://api.jquery.com/jQuery.ajax/) для подготовки и отправки запросов.

Чтобы подготовить запрос, вы должны использовать те же имена параметров, что и в форме (атрибут name элементов).

Проблема в том, как использовать ваш файл CSV из JavaScript. Поскольку JavaScript не может получить доступ к вашей файловой системе, вы должны использовать экзотические решения, такие как вставка текста CSV в текстовое поле. С помощью этого метода ваш javascript может получить доступ к данным CSV, проанализировать их и подготовить запросы. Затем вы можете использовать функции ajax для отправки запросов.

С другой стороны, вы можете легко сделать небольшой скрипт на Python, чтобы сделать это с помощью модуля urllib. Я думаю, что это будет быстрее и проще, чем с использованием JavaScript.

В обоих случаях сервер будет действовать так же, как если бы запрос был отправлен с помощью кнопки «отправить».

Итак, шаги для вашего скрипта (на любом языке):

  1. Получить данные CSV
  2. Разобрать данные и подготовить запрос для каждой строки
  3. Отправка HTTP-запросов
0 голосов
/ 01 ноября 2010

Чтобы повторить запрос браузера.Используйте http-сниффер, такой как fiddler или paros proxy.После того, как вы увидите, какие данные отправляет браузер, должно быть довольно легко воспроизвести это поведение.

Альтернативное решение - написать браузеру watir.Watir предназначен для модульного тестирования веб-приложений, но справиться с этой проблемой также довольно просто.

0 голосов
/ 01 ноября 2010

Извините, если я действительно не помог вам, но если вам нужно пройти через уровень представления, чтобы работать с вашей моделью, тогда у вас большие проблемы с дизайном вашего приложения.

ЖалобыКроме того, я бы предпочел пойти с простым скриптом на PHP или Python, чем с любым JS.Используя функцию curl, вы можете отправлять POST-запросы на сервер с данными, проанализированными из CSV.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...