我正在尝试编写一个函数,允许用户在字段中输入名称,将字段插入MySQL表,然后更新下拉菜单以包含这些名称(同时允许进一步添加)。 / p>
首次加载页面时,下拉菜单会显示我在表格中输入的正确名称。当我在表单中输入名称时,它会正确地插入到表中,但是下拉列表中没有显示任何选项,它会删除我的输入表单。如果我刷新页面,一切都会恢复正常,之前输入的名称会显示在列表中。
我知道我在代码中遗漏了一些东西,以刷新页面,但我甚至不确定要搜索什么。我认为通过将我的表单操作设置为。$ _ SERVER ['PHP_SELF']。它会导致页面处理和重新加载。我有预感这是我的问题所在,但我不确定它是什么。
下拉代码是我在网上找到的东西,也许我必须自己重写它,虽然它是这个混乱的一部分实际上正在工作。
另外,mysql登录是在db_tools.php中硬编码的b / c我不能让它工作。
对于以下文字墙感到抱歉,但我只是想提供尽可能多的信息。感谢您的回复,并指出了我正确的方向。
我有2个文件,db_tools.php和dropdown.inc
db_tools.php:
<?php
require_once 'db_login.php';
require_once 'MDB2.php';
require_once("dropdown.inc");
//Define a function to perform the database insert and display the names
function insert_db($name){
//initialize db connection
//$dsn = 'mysql://$db_username:$db_password@$db_hostname/$db_database';
$dsn = "mysql://redacted";
$mdb2 =& MDB2::connect($dsn);
if (PEAR::isError($mdb2)) {
//die($mdb2->getMessage());
die($mdb2->getDebugInfo());
}
//Manipulation query
$sql = " INSERT INTO participants (id, name) VALUES (NULL, \"$name\");";
$affected =& $mdb2->exec($sql);
if (PEAR::isError($affected)){
//die($affected->getMessage());
die($affected->getDebugInfo());
}
//Display query
$query = "SELECT * FROM participants;";
$result =& $mdb2->query($query);
if (PEAR::isError($result)){
die ($result->getMessage());
}
while ($row = $result->fetchRow()){
echo $row[1] . "\n";
}
$mdb2->disconnect();
}
?>
<html>
<head>
<title>Event Bill Splitter</title>
<body>
<?php
$name = $_POST['name'];
if ($name != NULL){
insert_db($name);
}
else {
echo '
<h1>Enter a new participant</h1>
<form name="nameForm" action="'.$_SERVER['PHP_SELF'].'" method="POST">
Name:<input name="name" type="text" />
</form>';
}
?>
<p>Participants:<br />
<?php dropdown(id, name, participants, name, participant_name1); ?></p>
</body>
</head>
</html>
dropdown.inc
require_once ('db_login.php');
$connection = mysql_connect($db_host, $db_username, $db_password);
if (!$connection) {
die ("Could not connect to the database: <br />". mysql_error() );
}
$db_select = mysql_select_db($db_database);
if (!$db_select) {
die ("Could not select the database: <br />". mysql_error() );
}
function dropdown($intNameID, $strNameField, $strTableName, $strOrderField, $strNameOrdinal, $strMethod="asc") {
//
// PHP DYNAMIC DROP-DOWN BOX - HTML SELECT
//
// 2006-05, 2008-09, 2009-04 http://kimbriggs.com/computers/
echo "<select name=\"$strNameOrdinal\">\n";
echo "<option value=\"NULL\">Select Value</option>\n";
$strQuery = "select $intNameID, $strNameField
from $strTableName
order by $strOrderField $strMethod";
$rsrcResult = mysql_query($strQuery);
while($arrayRow = mysql_fetch_assoc($rsrcResult)) {
$strA = $arrayRow["$intNameID"];
$strB = $arrayRow["$strNameField"];
echo "<option value=\"$strA\">$strB</option>\n";
}
echo "</select>";
}
?>
答案 0 :(得分:0)
表单消失的问题很简单,只需在插入部分后删除else
:
<body>
<?php
$name = $_POST['name'];
if ($name != NULL){
insert_db($name);
}
// else { // gone
echo '
<h1>Enter a new participant</h1>
<form name="nameForm" action="'.$_SERVER['PHP_SELF'].'" method="POST">
Name:<input name="name" type="text" />
</form>';
// } // gone
?>
除此之外,我肯定会重新编写下拉代码并添加一些安全性,表名称的白名单等。
顺便说一句,你是以一种奇怪的方式调用你的函数:
<?php dropdown(id, name, participants, name, participant_name1); ?>
我认为这些变量应该是$id
等,但它们来自哪里?如果您想直接发送值,则应该是:
<?php dropdown('id', 'name', 'participants', 'name', 'participant_name1'); ?>