gpt4 book ai didi

PHP Postgresql 通过浏览器向数据库添加数据

转载 作者:行者123 更新时间:2023-11-29 13:30:22 26 4
gpt4 key购买 nike

我正在研究如何通过基于 php 的动态网页将数据添加到 Postgresql 数据库。在“PHP 和 Postgresql:高级 Web 编程”(2002 年)一书中,我发现了一些用于设置内容管理系统的有趣代码(见下文)。当我在 Firefox 或 Chrome 中加载数据时一切正常,但是当我按下提交按钮时,字段中的数据没有添加到数据库中。什么都没发生。我想知道,这段代码是否已过时(这本书是 2002 年的),还是有其他错误或遗漏的地方?与数据库的连接似乎很好(没有错误)。

 <?php

$data .= "<html>
<body>
<h1>Content Management Tool</h1>
Edit the table <br>";

# connecting to the database
$dbh = pg_connect("dbname=postgres user=postgres host=localhost password=");
if (!$dbh)
{
die ("cannot connect to database<br>\n");
}
# checking for insert
if ($number_of_fields)
{
$sql = "INSERT INTO $tab VALUES (";
for ($i = 1; $i < $number_of_fields - 1; $i++)
{
$sql .= "'${$i}', ";
}
$max = $number_of_fields - 1;
$sql .= "'${$max}')";
$ret = pg_query($dbh, $sql) or
die ("cannot execute UPDATE operation<br>\n");
}
# retrieving a list of all tables in the database
$sql = "SELECT oid, * FROM message";
$res = @pg_query($dbh, $sql) or
die ("cannot retrieve list of tables");

# displaying list
$data .= "<br><b>Details:</b><br>\n";
$rows = pg_num_rows($res);
$fields = pg_num_fields($res);

# displaying header of table
$table .= "<table border=3><tr>\n";
for ($i = 1; $i < $fields; $i++)
{
$table .= "<th>".
pg_field_name($res, $i)."</th>";
}
$data .= $table."<th>action</th>\n";
$data .= "</tr>\n";

# displaying data
$data .= '<form action="detail.php" method="post">';

for ($i = 0; $i < $rows; $i++)
{
$data .= "<tr>";
$line = pg_fetch_row($res, $i);

for ($j = 1; $j < $fields; $j++)
{
$data .= "<td>";
$data .= $line[$j];
$data .= "</td>";
}
$data .= '<td><a href="action.php?act=delete&oid='.
$line[0].'&tab='.$tab.'">Delete</a> </td> ';
$data .= "</tr>\n";
}
$data .= "</table>\n";
$data .= "<br><b>Add data to the table</b><br>\n";

# displaying HTML for inserting data
$data .= $table;
$data .= "<tr>";
for ($i = 1; $i < $fields; $i++)
{
$data .= "<td>".
'<input type="text" name="'.$i.'"></td>';
}
$data .= "</tr>\n";
$data .= "</table>\n";
$data .= '<input type="hidden" name="number_of_fields" '.
"value=\"$fields\"><br><br>";
$data .= '<input type="hidden" name="tab" value="'.$tab.'">';
$data .= '<input type="submit" name="submit" >';
$data .= "</form>\n";

echo $data, $tail;
?>

SQL:

CREATE TABLE message
(
id integer,
tstamp timestamp with time zone DEFAULT now(),
who text,
message text
)
WITH (
OIDS=TRUE
);
ALTER TABLE message
OWNER TO postgres;
GRANT ALL ON TABLE message TO postgres;
GRANT ALL ON TABLE message TO public;

最佳答案

“当我按下提交按钮时,字段中的数据没有添加到数据库中”

您正在使用 if ($number_of_fields)检查数据是否已提交。如果有数据输入,您还可以做的是放置一个 var_dump($_POST);开场后在顶部<php?标签。在您按下提交后,这将向您显示“传入”数据。

您还可以放置额外的 echo 'Inserting Values';在插入代码块内。这将显示 $number_of_fields 已设置,接下来将发生 INSERT。

现在让我们仔细看看插入代码块。那里有一个 for 循环,遍历 $i 并将 ${i} 附加到 SQL。那看起来不对。我相信$_POST[$i]会更适合这里。你可以试试 var_dump($_POST[$i]);在循环内部查看是否获得了一些数据值。如果是,则将其附加到 SQL。

            $sql = "INSERT INTO $tab VALUES (";
for ($i = 1; $i < $number_of_fields - 1; $i++)
{
$sql .= "'${$i}', "; // <--- $_POST[$i] ???
}
$max = $number_of_fields - 1;
$sql .= "'${$max}')";

var_dump($sql); // <--- see, if SQL statement contains your data

您也可以放置 var_dump($sql);pg_query() 之前函数,查看 SQL 语句是否包含您的数据,这些数据将被发送到数据库。

关于PHP Postgresql 通过浏览器向数据库添加数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25268935/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com