mysql_select_db使用POST变量

时间:2012-11-20 03:05:50

标签: php mysql

我是PHP的新手,还有很长的路要走。可能是逻辑失败,或者我只是不知道PHP是如何工作的。 无论如何,我提交的代码来自我的管理控制面板。我正在尝试创建一个连接到db的页面,而不是显示所有数据库名称,并从单选按钮中选择其中一个。当再次按下提交以显示表格。显示表格后,下一步将是编辑,添加更新等等。我还没有。因为我无法使mysql_select_db工作。它给出了错误。 错误是;

  

注意:未定义的变量:连接在第94行的/public_html/php/insert_delete_update_amend/mydata03.php

     

警告:mysql_select_db():提供的参数不是第94行的/public_html/php/insert_delete_update_amend/mydata03.php中的有效MySQL-Link资源   无法连接到db

任何帮助将不胜感激。 P.S。:同样,当提交第一个表格时,第一个表格消失,第二个表格出现,依此类推。

<?php 
// form variables
$DisplayDBinfoForm = true;
$DisplayDBform = false;
if (isset($_POST['db_info_submit'])) { //when user presses db info submit button
//select which form to hide or appear   
$DisplayDBinfoForm = false;
$DisplayDBform = true;

$hostname = $_POST['db_name'];
$db_user_name = $_POST['db_user_name']; 
$db_user_password = $_POST['db_user_password']; 

$connect = mysql_connect($hostname,$db_user_name,$db_user_password);
if(!$connect) die("Could not connect");
    echo "<p><b>connected successfully</b></p>\n";
    }

if($DisplayDBinfoForm) {        
 ?>
<form name="dbinfo" method="POST" action="mydata03.php" onsubmit="return         validateForm();">

Host Name:          <input type="text" name="db_name" /><br />
<br />
DB User Name        <input type="text" name="db_user_name" /><br />
<br />
DB User Password:   <input type="text" name="db_user_password" /><br />
<br />
<input type="submit" name="db_info_submit"value="Login"><br />
</form>
<?php
}
if($DisplayDBform) {
?>
<form name="delete_table" id="delete_table" action="mydata03.php" method="post">
    <table width="30%" border="1">
    <tbody>

<?php
$query = "SHOW DATABASES";
$resultSet = mysql_query($query);
while($database = mysql_fetch_array($resultSet)) { // go through each row that was     returned in $result
$dbname = $database[0];

echo "<tr><th>Database Name</th>
            <th>Select</th>
        </tr>
        <tr>
            <td>$dbname</td>
            <td><input name=\"radDB\" id=\"radDB\" type=\"radio\" value=\"$dbname\"</td>
        </tr>\n";
}

?>

        </tbody>
        </table>
<p>
<input name="btnSelectDB" type="submit" value="Select" />
</form>
</p>
<?php
}
if(isset($_POST['btnSelectDB'])) {

$DisplayDBinfoForm = false; // hide form
$DisplayDBform = false; // hide form

$db_name = $_REQUEST["radDB"]; // the db na,e

echo "The " . $db_name . " is selected\n";  
$select_db = mysql_select_db($db_name,$connect);
if(!$select_db) die("Could not connect to db". mysql_error());
    echo "<b>connected successfully to db</b>";
}
?>

3 个答案:

答案 0 :(得分:2)

首先,不要使用mysql_ *函数。那段时间过去了。相反,请使用mysqli_*PDO

话虽如此,似乎与数据库服务器的初始连接完成正常,因为您的代码不会泄露给您:

$connect = mysql_connect($hostname,$db_user_name,$db_user_password);
if(!$connect) die("Could not connect");

虽然在后期阶段,尝试连接到实际数据库时:$select_db = mysql_select_db($db_name,$connect);确实如此。

这让我相信您设置数据库名称$db_name = $_REQUEST["radDB"];的变量不会正确地提取数据。

答案 1 :(得分:1)

$connect = mysql_connect($hostname,$db_user_name,$db_user_password) or die("Could not connect");

if( $connect) 
    echo "<p><b>connected successfully</b></p>\n";
    }

还要检查

if(  isset($_POST['db_name'] ) &&  isset($_POST['db_user_name']) && isset($_POST['db_user_password']){
     $hostname = $_POST['db_name'];
     $db_user_name = $_POST['db_user_name']; 
     $db_user_password = $_POST['db_user_password']; 

}
  

不鼓励使用此扩展程序(MYSQL_ *)。相反,应使用MySQLi或PDO_MySQL扩展

好读

PDO Tutorial for MySQL Developers

答案 2 :(得分:0)

您遇到的问题是,如果您使用“db_info_submit”发布了帖子,则只打开数据库($ connect =),但如果您发布了“btnSelectDB”,则仍然可以运行第94行。

最简单的解决方案是在顶部的if($ _POST)语句之外打开数据库,以防下面需要它。或者包装打开它所需的任何一个条件(代码如下所示)

<?php 
// form variables
$DisplayDBinfoForm = true;
$DisplayDBform = false;
if (isset($_POST['db_info_submit']) || isset($_POST['btnSelectDB'])) {
    $connect = mysql_connect($hostname,$db_user_name,$db_user_password);
    if(!$connect) die("Could not connect");
  echo "<p><b>connected successfully</b></p>\n";
    }
}

if (isset($_POST['db_info_submit'])) { //when user presses db info submit button
    //select which form to hide or appear   
    $DisplayDBinfoForm = false;
    $DisplayDBform = true;

    $hostname = $_POST['db_name'];
    $db_user_name = $_POST['db_user_name']; 
    $db_user_password = $_POST['db_user_password']; 
}

if($DisplayDBinfoForm) {
?>

....

<?php
}
if(isset($_POST['btnSelectDB'])) {

    $DisplayDBinfoForm = false; // hide form
    $DisplayDBform = false; // hide form

    $db_name = $_REQUEST["radDB"]; // the db na,e

    echo "The " . $db_name . " is selected\n";  
    $select_db = mysql_select_db($db_name,$connect);
    if(!$select_db) die("Could not connect to db". mysql_error());
        echo "<b>connected successfully to db</b>";

}
?>

这不是一个直接的答案,但它是最能帮助你的答案。

如果你的脚本中有一个以“myslq_”开头的函数(1 - mysql_real_esacape_string除外),那么你将使用一个旧例子并使用将被折旧的代码。当你刚刚学习PHP和MySQL时,要养成使用更现代功能的习惯,mysqli_PDO