2015-11-15 5 views
0

Я новичок в Perl, и я пытался эту простую программу вставлять значения в базу данных. У меня есть два файла, HTML-файл, который отправляет значения формы в файл Perl. Но я не могу выполнить какую-либо вставку или извлечение; Я всегда получаю пустую страницу в качестве вывода.Невозможно вставить в MySQL с помощью Perl

HTML файл:

<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" 
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
     <title>8th program</title> 
    </head> 
    <body> 
     <form action="http://localhost:81/cgi-bin/8.pl" method="post"> 
      NAME:<input type="text" name="name"><br> 
      AGE:<input type="text" name="age"><br> 
      <input type="submit" value="submit"> 
     </form> 
    </body> 
</html> 

Perl файл:

#!"C:\xampp\perl\bin\perl.exe" 

print "Content-Type:text/html\n\n"; 

use CGI ':standard'; 
use DBI; 

print "<html><head><title>insert</title></head>"; 

$dbh = DBI->connect("DBI:mysql:test", "root", " "); 

$name = param("name"); 
$age = param("age"); 

$qh = $dbh->prepare("insert into student values('$name','$age')"); 
$qh->execute(); 

$qh = $dbh->prepare("select * from student"); 
$qh->execute(); 

print "<table border size=1> 
     <tr> 
     <th>Name</th> 
     <th>Age</th> 
     </tr>"; 

while (($name, $age) = $qh->fetchrow()) { 
    print "<tr><td>$name</td> 
<td>$age</td></tr>"; 
} 

print "</table>"; 

$qh->finish(); 

$dbh->disconnect(); 

print "</html>"; 

Пожалуйста, помогите мне с этим.

+4

Сообщение об ошибке брошенной Perl очень определенно идентифицирует проблему. – ikegami

+2

(1) Какие сообщения об ошибках вы получаете? Их можно найти в журнале ошибок вашего веб-сервера. (2) Интерполяция значений из веб-формы непосредственно в вашу строку SQL - это ОГРОМНОЕ отверстие безопасности. Вместо этого используйте SQL-заполнители. См. Http://bobby-tables.com/ для получения более подробной информации об этой проблеме и ее устранении. –

+1

** Опасность **: ваш код уязвим для SQL-инъекции. Используйте заполнители в ваших подготовленных заявлениях. – Quentin

ответ

4

Нет метода DBI fetchrow. В данном случае это выглядит, как вы имеете в виду fetchrow_array

В дополнение, пожалуйста, принять к сведению эти моменты

  • В системах окна, притон линии игнорируется за исключением того, что любая команда, переключатели указаны будут выполнены. Путь к PERL компилятор/интерпретатор должен быть определен в другом месте

  • Вы должны всегда

    use strict; 
    use warnings 'all'; 
    

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

  • Вместо интерполяции параметров в строки SQL вы должны использовать заполнители. Как это, например

    my $qh = $dbh->prepare('INSERT INTO student (name, age) VALUES (?, ?)'); 
    $qh->execute($name, $age); 
    
  • Это неправильно называть finish. The documentation имеет этот

    Добавления вызовов на «финиш» после [а] цикла, который извлекает все строки является общей ошибки, не делайте этого, он может замаскировать подлинные проблемы, как неперехваченные принести ошибки.

Смежные вопросы