LINUX.ORG.RU

Внесение данных из формы в базу perl dbi

 , ,


0

1

Есть маленькая база test_db с одной таблицей test_lab, в которой два поля - id и fio. Вот скрипт, с помощью которого в форму вносится ФИО, затем по нажатию кнопки данные вносяться в базу и выводяться в браузер:

#!/usr/bin/perl
# Путь к интерпретатору
#прагмы интерпретартора
use strict;
use warnings;
#подключаемые модули
use CGI;
use DBI;
my $query=new CGI;
# подключение к базе данных
my $dbh=DBI->connect('DBI:mysql:database=test_db;host=localhost','root','q',
{AutoCommit=>1,RaiseError=>1,PrintError=>0});
my $t = $query->param("t");
print "Content-Type: text/html\n";
print "\n";
if ($t eq "save") {
    my $fio = $query->param("fio"); 
    my $sth = $dbh->prepare("INSERT INTO test_lab VALUES(null,?);");
    $sth->execute($fio);
    $sth = $dbh->prepare("SELECT * FROM test_lab;");
    $sth->execute();
    while (my @row = $sth->fetchrow_array) {
        print $row[1]."<br>";
    }
}
print "<html><head></head><body>
      <form action='/index.pl'>
        <input type='hidden' name='t' value='save'>
        <input type='text' name='fio'> </br>
        <input type='submit'>
      </form>
</body></html>";

Мне нужно добавить в таблицу пару полей, что я через консоль mysql успешно сделал, база сейчас выглядит так:

Field    | Type         | Null | Key | Default | Extra          |
+----------+--------------+------+-----+---------+----------------+
| id       | int(11)      | NO   | PRI | NULL    | auto_increment |
| fio      | varchar(100) | YES  |     | NULL    |                |
| birthday | int(4)       | NO   |     | NULL    |                |
| gender   | varchar(10)  | NO   |     | NULL    |                |
+----------+--------------+------+-----+---------+----------------+

Я так понимаю, что в html-разметку нужно дописать input'ы для вставки в поля birthday и gender. А вот как это правильно дописать в самом коде - малость не понимаю...что нужно помудрить с INSERT INTO... Буду признателен за помощь!

Ответ на: комментарий от kyka276

Напиши решение для потомков, отметь тред как решенный

bvn13 ★★★★★
()

Решение выглядит следующим образом:

#!/usr/bin/perl
# Путь к интерпретатору

#прагмы интерпретартора
use strict;
use warnings;

#подключаемые модули
use CGI;
use DBI;
my $query=new CGI;

# подключение к базе данных
my $dbh=DBI->connect('DBI:mysql:database=test_db;host=localhost','root','123', {AutoCommit=>1,RaiseError=>1,PrintError=>1});

my $t = $query->param("t");

print "Content-Type: text/html; charset=utf-8\n";
print "\n";

if ($t eq "save") {
  my $fio = $query->param("fio");
  my $birth = $query->param("birth");
  my $address = $query->param("address");
  my $phone = $query->param("phone");
  
  my $sth = $dbh->prepare("INSERT INTO test_tab VALUES(null,?,?,?,?);");
  $sth->execute($fio, $birth, $address, $phone);
 } 
  my $sth = $dbh->prepare("SELECT * FROM test_tab;");
  $sth->execute();

  print "<table>
	    <tr>
	      <th>ФИО</th>
	      <th>Дата рождения</th>
	      <th>Адрес</th>
	      <th>Телефон</th>
	    </tr>";
  while (my @row = $sth->fetchrow_array) {
    print "<tr>
	    <td>".$row[1]."</td>
	    <td>".$row[2]."</td>
	    <td>".$row[3]."</td>
	    <td>".$row[4]."</td>
	  </tr>";
  }
  print "</table>";

print "<html><head>
</head><body>
<form action='/index.pl'>
<input type='hidden' name='t' value='save'>
ФИО <input type='text' name='fio'><br />
Дата рождения <input type='text' name='birth'><br />
Адрес <input type='text' name='address'><br />
Телефон <input type='text' name='phone'><br />
<input type='submit'>
</form>
</body></html>";
 
print "<style>
table { 
    border: 4px double black; 
    border-collapse: collapse;
}
th { 
    text-align: center; 
    border: 1px solid black; 
}
td { 
    border: 1px solid black;
   	padding: 0 10px 0 10px; 
}
input {
  margin: 5px 0 5px 2px;
}
</style>";

kyka276
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.