由于不了解perl / MySQL,我希望有人可以伸出援助之手。 代码显然不起作用,但这是我到目前为止所做的,我还在学习。
我想打开并搜索从php页面获取的$ticket_id
的数据库,并获取电子邮件地址和/或电话电子邮件中的一个或两个(如果有的话){{1} }。至少会有一个。
因为我好像每隔一段时间就被问到这个问题。 (这不是一个学校项目。自75年以来我一直在学校。)
我让脚本处理信息的数据库查找但我必须使用ticket_id和电子邮件地址对每个设置进行编码。很高兴我只有5个人使用它,但是其他人想要使用它。所以我认为这是一个很好的时机来流程化流程以使用MySQL数据库,如果我忙着它,除了填写表单页面以添加他们的信息之外我不需要做太多工作。 / p>
在需要搜索的数据库中有3个表,我需要搜索ticket_id,然后获取用户名,即他们的电子邮件地址和/或电话邮件,但是根据通知的类型可能是空的想。
无论如何都可以改变。它只有一条记录可以使用这个新设置。
$ticket_id
我被告知这可以通过JavaScript window.onload完成,因此不需要将HTML页面更改为PHP,但根本不知道JavaScript。
echo脚本可能有误。 <{1}}此时脚本已收到username: email(at)address(dot)com
ticket_id: 1-YS25UHRN3N9D
phone: 1234567890(at)cellphone(dot)com
,但不需要$pg
。
PHP页面顶部
echo
我被告知将数据库登录信息放入cgi是不好的,但我不知道如何将其用于php文件并从perl或其他方式访问该文件。
<?php
$ip = $_SERVER['REMOTE_ADDR']; // Client IP address
$pg = $_SERVER['HTTP_REFERER']; // What page did they view
$ticket_id = '1-YS25UHRN3N9D'; // Ticket id
$message = '1'; // 1=email, 2=text, 3=email & text
$url = "/cgi-bin/log_it.cgi"; // back-end url
echo '<script type="text/javascript" src="' . $url . '?id=' . $id . '&ip=' . $ip
. '?ticket_id=' . $ticket_id . ' . '?message=' . $message . '"></script>';
?>
谢谢
更新:第二个(清理过的)代码版本:
#!/usr/bin/perl -W
use CGI;
use CGI param;
use POSIX qw/strftime/;
# database
$host = "localhost";
$database = "users";
$tablename = "tickets";
$user = "username";
$pw = "password";
# Obtain $id & $ip from web page.
$id = param("ticket_id");
$ip = param("ip");
# message
# 1 = email
# 2 = phone
# 3 = both
$message = param("message");
# Connect to database
$connect = Mysql->connect($host, $database, $user, $pw);
# DB
$connect->selectdb($database);
# MySQL QUERY
$myquery = "SELECT ticket_id FROM user";
# QUERY
$myquery = "SELECT ticket_id FROM $tablename";
# Need to be worked on.
# If record not found.
#
# "To Do" send a page or popup if the id is not valid.
# $file = "/var/log/invalid_id_iptrace.txt";
# open(FILE, ">$file");
# print FILE strftime("%A %B %d, %Y - %I:%M %p %Z\n", localtime(time) );
# print FILE " -- IP Address: $ip\n\t Accessed unknown $id:\n------\n";
# close(FILE);
# system("mail -s 'Page visited Unknown' admin\@mydomain.com \< /var/log
# /invalid_id_iptrace.txt");
# exit();
#check if we have a matching $id == $ticket_id
if ($id =~ /$ticket_id/) {
#if we have a match open the file to write.
$file = "/var/log/$ticket_id_iptrace.txt";
open(FILE, ">$file");
# lets put the time in the file.
print FILE strftime("%A %B %d, %Y - %I:%M %p %Z\n", localtime(time) );
# put the IP address and web page visited.
print FILE " -- IP Address: $ENV{REMOTE_ADDR}\n\t Accessed your page:
$ENV{HTTP_REFERER}\n------\n";
print FILE " -- Here is the IP information we found:\n------\n";
#close the file. Finished with the first part
close(FILE);
# Run the IP2Location script.
system("./iptrace.sh $ENV{REMOTE_ADDR} json city>>/var/log/$ticket_id_iptrace.txt");
# Lets send an email and or text with all the information.
# Send email
if($message =~ /1/) {
system("mail -s 'Web Page visited' $username \< /var/log/$ticket_id_iptrace.txt");
}
# Send text
if($message =~ /2/) {
system("mail -s 'Web Page visited' $phone \< /var/log/$ticket_id_iptrace.txt");
}
# Send email and text message
if($message =~/3/) {
system("mail -s 'Web Page visited' $username \< /var/log/$ticket_id_iptrace.txt");
system("mail -s 'Web Page visited' $phone \< /var/log/$ticket_id_iptrace.txt");
}
exit();
}
exit();
#end of script
答案 0 :(得分:3)
您的帖子中似乎没有问题。你说“代码显然不起作用”,但你没有告诉我们你所看到的意外行为是什么样的。所以这里有一些关于你的代码的评论。其中一个可能会解决这个问题。
1 /它应该是shebang线上的'-w',而不是'-W'。事实上,现在你应该删除'-w'并在shebang线的正下方加入use warnings;
。
2 /您还应在use strict;
下方添加use warnings;
。这似乎会完全破坏您的程序,因为它会坚持您预先设定所有变量 - 您使用my
(my $host = 'localhost'
等)。这首先是一种痛苦,但这是一个非常好的习惯。
3 /您只需要一条use CGI
行。它应该是use CGI qw/param/;
。
4 /你正在使用一个名为Mysql的类。但是你不能在任何地方加载该类。这门课来自哪里?您应该使用DBI和DBD::mysql的组合。
5 /您将SQL查询放入$mysquery
但后来立即用另一个查询覆盖它。这不会导致错误 - 这可能只是你的一些困惑的迹象。
6 /您的if ($id =~ /$ticket_id/)
几乎肯定更好地写为if ($id == $ticket_id)
。如果您只是比较两个数字,则无需使用正则表达式。
7 /您应该真正检查来自open
的电话的返回值。
open(FILE, ">$file") or die $!;
事实上,我会改写使用3-arg open和autovivified文件句柄。
open(my $fh, '>', $file) or die $!;
然后,您需要在整个代码中将FILE
更改为$fh
。
8 /同样,您对$message
的三次比较只能是简单的==
匹配,而不是使用正则表达式匹配。
如果你要做很多这样的话,那么我真的建议你读一本好书,比如“学习Perl”或“开始Perl”。