2016-11-12 71 views
1

所以有很多人幫助在html中創建一個下拉列表並用它們的數據庫填充它。我試圖做到這一點,我發現一些PHP代碼來做到這一點,但它不工作。我理解php,sql和html,但不是它們如何組合在一起。什麼似乎是問題是,第一個回聲後,其餘的代碼只是作爲代碼輸出到頁面,它什麼都不做。這是代碼:創建一個下拉列表,但PHP不會工作

<html> 
    <body> 
     <?php 
     mysql_connect('localhost', 'root', 'password'); 
     mysql_select_db('FoodMatching'); 

     $sql = "SELECT IngID, IngName FROM Ingredient Characteristics"; 
     $result = mysql_query($sql); 

     echo "<select name='Ingredient Name'>"; 
     while ($row = mysql_fetch_array($result)) { 
      echo "<option value='" . $row['IngName'] ."'>" . $row['IngName'] ."</option>"; 
} 
echo "</select>"; 
?> 
    </body> 
</html> 

而我看到的網頁是:

"; while ($row = mysql_fetch_array($result)) { echo " 
" . $row['IngName'] ." 
"; } echo ""; ?> 

有沒有錯誤/警告彈出,所以我不知道是什麼問題。謝謝,如果你能幫助:)

+1

請勿使用不推薦使用的'mysql_ *'-functions。從PHP 5.5開始它們被棄用,並在PHP 7中完全刪除。它們也不安全。改用MySQLi或PDO。 –

+0

我敢肯定,你的sql特別是你的表有什麼問題:成分特徵...嘗試在你的mysql上運行並看到... – barudo

+0

表名,表單項名稱和東西沒有空格。 –

回答

0

如上所述,你應該看看使用PDO's談到DB

如果你得到的名單之前,html是輸出,那麼你可以有更清潔和更容易理解代碼

看看下面是有道理的,你可能需要做一些修改它的未經檢驗的。

對您的mySql有一些評論,請確保在運行查詢時返回結果。

<?php 

define("DB_DSN", "mysql:host=localhost;dbname=foo"); 
define("DB_USERNAME", "root"); 
define("DB_PASSWORD", "password"); 

// define the empty array to be filled from db 
$aIngredeintCats = array(); 


// any other php tasks that dont needthe ingcats 


// store sql 
$sSQL = "SELECT IngID, IngName FROM IngredientCharacterisitics"; 

// create an instance of the connection 
$conn = new PDO(DB_DSN, DB_USERNAME, DB_PASSWORD); 

// prepare 
$st = $conn->prepare($sSQL); 

// if required securely bind any user input in the query 
// $st->bindValue(":IngID", $sIngName, PDO::PARAM_STR); 

// execute the connection 
$st->execute(); 

/* this will show if a result has been returned from the db. 
echo "<pre>"; 
var_dump($st->fetch()); 
echo "</pre>"; 
*/ 

// while myslq has rows loop over them and store 
while($row = $st->fetch()){ 

    // use the IngID from db as the array key 
    // also strip any tags from the output. other sanatisation should be done 
    $aIngredeintCats[$row['IngID']] = strip_tags($row['IngName']); 
} 


// any other php tasks if they need the list of cats 

?> 


<html> 
    <body> 
     <form method='post' action='/'> 
     <?php 
      // if there are results stored create the select and loop over 
      if(!empty($aIngredeintCats)){ 
       echo "<select name='IngredientName'>"; 
       echo "<option value='' default>default</option>" 
       foreach ($aIngredeintCats as $iIngID => $sIngName) { 
        echo "<option value='".$sIngName."' >".$sIngName."</option>"; 
       } 
       echo "</select>"; 
      }else{ 
       echo "<p>No results avaliable!</p>"; 
      } 
     ?> 

     </form> 
    </body> 
</html> 
+0

它看起來應該可以工作,但同樣的事情仍在繼續。在//準備行下面的「$ st = $ conn->」之後。其餘的代碼只是以文本形式打印到頁面上。如果這有所作爲,我在c9.io中寫這個。我檢查了元素,並在$ conn->之後的其餘代碼出現在標記之間。 – pmpman

+0

嘗試在文本編輯器中創建文件並將ftp/fssh創建到服務器。可能是ide嗎? – atoms

+0

等一下。我覺得我一直很愚蠢。它應該是一個.php文件,而不是.html – pmpman