2010-10-31 10 views
1

J'ai une tâche assez importante de saisie de données à effectuer dans une application PHP. L'application vous permet d'entrer un ensemble de données à la fois (prénom, nom, email), cliquez sur 'Go', puis utilise AJAX pour soumettre les données et les espaces le formulaire, en mettant votre curseur dans la première entrée. J'ai un ensemble de données de 1300 qui doit être entré en utilisant cette méthode. Il est actuellement dans un fichier Excel, mais bien sûr cela pourrait tout aussi bien être dans une base de données, un CSV, etc.Comment entrer 1300 enregistrements CSV dans un formulaire Web?

Ceci n'est en aucun cas pour exploiter un site ou une application, c'est pour entrer des données d'utilisateur d'un ancien site dans un nouveau. Je suis à la recherche d'un moyen d'automatiser cette entrée - remplir le courrier électronique, remplir le prénom, remplir le nom, soumettre le formulaire, retarder d'une seconde la réponse (ceci s'exécute localement donc ça devrait être accrocheur), sélectionner une nouvelle ligne insérez, répétez. Edit - Je réalise que JS n'est pas la bonne technologie pour ce travail, mais je suis confiant que cela peut fonctionner. La seule raison pour laquelle j'essaie d'utiliser JS ici est parce que c'est le seul langage capable de faire cela que je suis à l'aise, et qui ne nécessite pas beaucoup de travail au sein de l'application. Je ne peux utiliser d'autres technologies que si elles sont vraiment épelées. Normalement, j'opte pour la voie d'apprentissage, mais je ne peux tout simplement pas cette fois-ci. Désolé d'être si pointilleux!

+4

Pourquoi avez-vous besoin de jQuery pour cela? MySQL a un 'LOAD DATA INFILE' ou cela peut être fait assez facilement avec PHP. –

+0

Pourquoi ne pas analyser le fichier csv avec php et l'insérer dans la base de données de cette façon? ou si c'est dans une base de données juste l'exporter en tant que fichier SQL, puis l'importer dans le nouveau site? –

+0

La raison pour laquelle je dois passer par le formulaire est purement pour gagner du temps. L'application manipule beaucoup ces données avant qu'elles n'atteignent la base de données, et à ce moment-là, il y a beaucoup de relations entre les tables qui prendront du temps à se répliquer en utilisant un nouveau script PHP. J'aurais dû le mentionner, mais dans ce cas, automatiser l'entrée dans le formulaire est absolument le moyen idéal pour le faire, si possible. Edit - la raison pour laquelle j'ai tagué jQuery est juste parce qu'il y a probablement un plugin qui aide à ce genre de choses, mais je ne sais pas si c'est le cas. – Gavin

Répondre

1

Ok, j'ai travaillé à travers celui-ci par moi-même ... J'apprécie toute votre contribution, mais j'avais vraiment besoin de faire cela avec JS, comme je l'ai expliqué. Je suis toujours très aventureux, mais pas quand je ne peux absolument pas passer plus de temps que nécessaire (ce qui est rare). La solution n'est pas compliquée:

J'ai d'abord récupéré les données dans une table MySQL en utilisant LOAD DATA dans phpMyAdmin. Banal. Ensuite, j'ai écrit juste un peu de PHP pour que le JS envoie des requêtes 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); 
     } 
    } 
} 

Ce PHP n'a pas besoin d'être propre, n'a pas besoin d'aseptiser, n'a pas besoin d'être optimisé, etc. - ce qui se passe une fois, et au niveau local.

Ensuite, le 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; 
    } 
} 

Encore une fois - pourrait être mieux exécutée, mais il n'a pas d'importance parce que ce processus est une fois. Cela a fonctionné parfaitement, et le temps d'augmentation pourrait probablement être encore plus court, nécessitant moins de temps pour terminer le processus.

Merci encore pour l'entrée, probablement beaucoup d'aide pour quelqu'un qui a une compréhension de ces autres technologies ou un peu de temps pour jouer avec eux. Ne va pas méconnu!

1

Je pense que faire un script remplir le formulaire et l'envoyer est compliqué. Le plus simple serait de soumettre des données comme le fait le navigateur lorsque vous appuyez sur le bouton "submit" (probablement via une requête POST).

Vous avez dit que vous aimeriez le faire uniquement en JavaScript. Vous pouvez utiliser les fonctions ajax jQuery (http://api.jquery.com/jQuery.ajax/) pour préparer et envoyer des requêtes.

Pour préparer la requête, vous devez utiliser les mêmes noms de paramètres que le formulaire (attribut name des éléments).

Le problème est de savoir comment utiliser votre fichier CSV à partir de JavaScript. Comme JavaScript ne peut pas accéder à votre système de fichiers, vous devez utiliser des solutions exotiques comme coller le texte CSV dans une zone de texte. Avec cette méthode, votre javascript peut accéder aux données CSV, les analyser et préparer des requêtes. Ensuite, vous pouvez utiliser les fonctions ajax pour envoyer les requêtes. D'autre part, vous pouvez facilement faire un petit script Python à l'aide du module urllib. Je pense que ce serait plus rapide et plus facile que d'utiliser JavaScript. Dans les deux cas, le serveur agira comme si la requête avait été envoyée en utilisant le bouton "soumettre".

Ainsi, les étapes de votre script (toute langue):

  1. Obtenir les données CSV
  2. analyser les données et préparer une demande pour chaque ligne
  3. Envoyer la demande HTTP
+0

Désolé, lisez ce juste après avoir posté ma réponse - c'était la bonne approche à coup sûr, en utilisant un appel ajax pour obtenir des enregistrements les uns après les autres - certainement utile d'obtenir le CSV dans une base de données pour faciliter ce processus. L'interaction de forme que j'avais été pensée et était également assez trivial. – Gavin

+0

Pas de problème. Acceptez simplement l'une des réponses pour marquer la question comme «résolue». –

0

Désolé si je ne suis pas vraiment d'aide, mais si vous devez passer par la couche de présentation pour travailler avec votre modèle, alors vous avez un gros problème avec la conception de votre application.

Plaintes mises à part, je préfère aller avec un script simple en PHP ou en Python, que n'importe quel JS. En utilisant la fonction curl, vous pouvez envoyer des requêtes POST au serveur avec les données analysées à partir du fichier CSV.

+0

il est censé être leur propre site. utiliser curl sur ce serait un non-sens –

0

Pour répliquer la requête effectuée par le navigateur. Utilisez un sniffeur http comme un violoniste ou un proxy paros.Une fois que vous voyez quelles données le navigateur envoie, il devrait être assez facile de répliquer ce comportement.

Une solution alternative consiste à scripter le navigateur avec watir. Watir est conçu pour tester des applications Web unitaires, mais peut également gérer ce problème assez facilement.

+0

il est censé être leur propre site. utiliser curl sur ce serait un non-sens. Pourquoi une telle réponse? Avez-vous pris la peine de lire les commentaires au moins? –

+0

Quel est avec la mentalité qu'une réponse doit être presque prêt à copier coller et compiler. J'ai fourni une direction pour l'op pour aller chercher plus d'infos. J'ai mentionné le violoniste parce que j'ai l'impression qu'il ne sait pas tout à fait ce qui se passe sur le fil, et en réalisant cela, il peut être trivial de le faire avec une boucle ou un autre outil. –

Questions connexes