2012-11-20 39 views
2

我對PHP相當陌生,而且還有很長的路要走。也許,這是一個邏輯失敗,或者我只是不知道PHP的工作原理。 無論如何,我提供的代碼來自我的管理控制面板。我試圖建立一個頁面來連接到數據庫,而不是顯示所有的數據庫名稱,並從單選按鈕中選擇其中的一個。當按下提交再次顯示錶。後顯示錶下一步將編輯,添加更新等我還沒有。因爲我無法讓mysql_select_db工作。它給出了錯誤。 錯誤在於;mysql_select_db使用POST變量

說明:未定義變量:連接在/public_html/php/insert_delete_update_amend/mydata03.php上線94

警告:mysql_select_db():提供的參數不是在/的public_html /一個有效的MySQL鏈路資源上線94 PHP/insert_delete_update_amend/mydata03.php無法連接到數據庫

任何幫助將非常感激。 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>"; 
} 
?> 
+0

$ connect = mysql_connect($ hostname,$ db_user_name,$ db_user_password);這條線是失敗的。因此,當試圖選擇數據庫時,您傳遞了無效的連接標識符。確認這實際上是連接到數據庫。它輸出「連接成功」嗎? – Lock

+0

此外,不知道這是否會有所幫助。但是,看起來這一行:「$ select_db = mysql_select_db($ db_name,$ connect);」不在$ PHP連接定義的PHP標記之外,因此,它可能不知道$ connect在哪裏... – Phorce

+2

請停止使用此代碼。 'mysql_'函數正在[棄用](http://www.deprecatedphp.com/mysql)。使用'PDO'或'mysqli_'。 – Kermit

回答

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

首先,不使用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"];的變量不會正確拉取數據。

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>"; 

} 
?> 

這不是一個直接的答案,但它是一個的goign,幫助您最答案。

如果您的腳本中有一個以「myslq_」開頭的函數(除了1 - mysql_real_esacape_string),那麼您正在使用一箇舊示例,並且正在使用將折舊的代碼。正如你剛剛學習PHP和MySQL,進入使用更現代功能的習慣,要麼mysqli_PDO