Perl的PHP / MySQL表搜索

时间:2013-02-20 20:44:34

标签: php mysql perl

由于不了解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 . '&amp;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

1 个答案:

答案 0 :(得分:3)

您的帖子中似乎没有问题。你说“代码显然不起作用”,但你没有告诉我们你所看到的意外行为是什么样的。所以这里有一些关于你的代码的评论。其中一个可能会解决这个问题。

1 /它应该是shebang线上的'-w',而不是'-W'。事实上,现在你应该删除'-w'并在shebang线的正下方加入use warnings;

2 /您还应在use strict;下方添加use warnings;。这似乎会完全破坏您的程序,因为它会坚持您预先设定所有变量 - 您使用mymy $host = 'localhost'等)。这首先是一种痛苦,但这是一个非常好的习惯。

3 /您只需要一条use CGI行。它应该是use CGI qw/param/;

4 /你正在使用一个名为Mysql的类。但是你不能在任何地方加载该类。这门课来自哪里?您应该使用DBIDBD::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”。