2016-02-22 1 views
0

J'ai la configuration existante comme ci-dessous.Passer l'utilisateur Entrée d'une page HTML dans un script Perl et afficher les résultats dans la page Web

installation existante:

Voici l'utilisateur script Perl interactif qui prend la EmpNo comme argument et imprime le nom et salaire de l'employé de la table des employés. Actuellement, je cours ce script dans le terminal et la sortie est également affichée sur le terminal.

Perl code

#!/usr/bin/perl 

use DBI; 
use strict; 

my $driver = "mysql"; 
my $database = "dbname"; 
my $dsn = "DBI:$driver:database=$database"; 
my $userid = "uid"; 

print "Enter employee Number \n"; 

my $input1 =<>; 


my $dbh = DBI->connect($dsn, $userid) or die $DBI::errstr; 

my $sth = $dbh->prepare("SELECT Empname ,Salary FROM Employee WHERE EmpNo ='$input1' "); 

$sth->execute() or die $DBI::errstr; 
print "Number of rows found :" + $sth->rows; 
while (my @row = $sth->fetchrow_array()) { 
    my ($name, $salary) = @row; 
    print "Name = $name, Salary = $salary \n"; 
} 
$sth->finish() 

Sortie: perl test.pl

Entrez employé Numéro Name = Salaire John = 10000

Exigence:

lieu sur l'exécution du script sur le terminal avec l'entrée de l'utilisateur. J'aime avoir une page Web HTML où l'utilisateur peut sélectionner l'EmpNo dans la liste déroulante et ce EmpNo devrait être passé au script Perl en cliquant sur le bouton soumettre . Le script doit ensuite extraire les détails de la base de données et les afficher sur la page Web.

Brève idée:

Quelque chose comme ceci avec des formes.

<FORM action="/test.pl" method="POST"> 

< select name = "Employee details" > 
    <option selected = "selected">EmpNo</option> 
    <option value = "207711">207711</option> 
    <option value = "207712">207712</option> 
    <option value = "207713">207713</option> 
</select> 

<input type="submit" value="Submit"> 

</FORM> 

Je suis ouvert à utiliser CGI et j'ai installé Apache. En attente de votre réponse précieuse. Merci beaucoup !!!

+2

Si par "CGI" vous voulez dire CGI.pm, ce n'est pas vraiment une bonne option de nos jours (son utilisation est en fait [déconseillée dans la documentation officielle] (https://metacpan.org/pod/CGI#CGI.pm- A été retiré de l'âme) Voir [CGI :: Alternatives] (https://metacpan.org/pod/CGI::Alternatives) à la place. – ThisSuitIsBlackNot

+0

Votre question est trop générale. Vous devez configurer une page HTML, et votre serveur HTTP doit être configuré pour attendre une URL de '/ test.pl'. Ensuite, vous devez modifier votre script Perl pour accepter les données d'entrée via l'interface CGI et fournir une sortie HTML au lieu du texte simple. Tout cela ne peut pas être traité dans une seule réponse – Borodin

+0

@Borodin: la page HTML est prête et l'URL de /test.pl aussi. Pourriez-vous suggérer les changements requis pour accepter les données d'entrée via l'interface CGI. Merci . – John

Répondre

1

Juste envolant cela, sans l'essayer, mais il suffit d'ajouter/modifier ces lignes dans votre code:

use CGI qw(:standard); 
print header; 
print qq(<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\n); 
print qq(<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-US">\n); 
print "<head>\n"; 
print " <title>Page Title Goes Here!</title>\n"; 
print "</head>\n"; 

my $input1 = param('Employee details') || ""; 

Je ne l'avais pas entendu parler de CGI.pm pas recommandé, mais l'idée de base de ci-dessus devrait fonctionne toujours.

+0

Salut @jimtut, Merci. Ça marche. Maintenant, je suis capable de lire les données de la page HTML dans Perl/Cgi et de travailler dessus. Actuellement, je copie le résultat de la requête Sql dans un fichier texte. Comment imprimer le fichier texte (sous forme de texte ou html?) Dans le même cgi? – John

+0

Il existe des moyens faciles de lire dans un fichier texte (Google pour "Perl file slurp"), mais je ne suis pas sûr que ce soit vraiment ce que vous voulez. Voulez-vous dire que le code Perl stocke les résultats de la requête SQL dans un fichier texte et que vous voulez l'afficher sur la page Web? Pourquoi ne pas simplement utiliser du code comme dans votre exemple qui consiste à «imprimer» les résultats? Les commandes 'print' s'imprimeront directement sur la page Web. Si, pour une raison ou une autre, vous devez lire les résultats de la requête SQL à partir d'un fichier texte, vous pouvez facilement le "slurper". Mais essayez de consolider tout le code (requête SQL et impression sur page Web) en un seul script Perl. – jimtut

+0

A quitté la pièce dans le dernier commentaire.Je suis sûr que d'autres vont détester cette idée, mais pour faciliter la maintenance, j'ai mis le formulaire d'entrée HTML dans le CGI Perl aussi. Cela nécessite un peu plus de code, pour détecter s'il s'agit de l'exécution initiale du script ou si c'est la soumission du formulaire, mais vous avez tout le code lié à l'entrée, la recherche et la sortie dans un fichier. Encore une fois, beaucoup de gens diront que c'est une façon horrible de structurer le code, mais cela rend la maintenance de scripts raisonnablement petits très facile quand tout est comme ça. – jimtut