PHP无法在POST上正确更新

时间:2012-01-09 22:15:35

标签: php mysql

我正在尝试编写一个函数,允许用户在字段中输入名称,将字段插入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>";
}

?>

1 个答案:

答案 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'); ?>