2013-04-09 63 views
0

我有一個分貝,我試圖值提取到一個列表從數據庫中提取值來填充下拉

這裏是我試圖運行的代碼(我不得不從其他地方適應),這應該返回一個數組,從中我要選擇AllianceName屬性

<?php 
//database connection file setting.inc will need to be modified for production 
include ("settings.inc"); 

$con = mysqli_connect("$dbhost", "$dbuser", "$dbpass"); 
if (!$con) { 
    exit('Connect Error (' . mysqli_connect_errno() . ') ' 
      . mysqli_connect_error()); 
} 
//set the default client character set 
mysqli_set_charset($con, 'utf-8'); 
mysqli_select_db($dbname, $con); 

$options = array(); 
$options[] = "<option value=''>--?--</option>"; 
$query = " 
SELECT * 
FROM `City` 
GROUP BY `AllianceName` 
"; 

$db = mysqli_query($query); 
foreach ($db as $d) { 
    $options[] = "<option value='{".$d['AllianceName']."}'></option>"; 
} 
?> 
<select class="" id="articles" size="1" name="articles"> 
<?php echo implode("\n", $options); ?> 
</select>*/ 

眼下這隻返回? - - ,我的選項數組中定義。它不解析查詢中的任何值。我知道查詢本身是正確的,因爲我已經完全按照SQL服務器中的這種語法運行它,並且它可以工作。

我很確定這是一個語法錯誤... var_dump($ db)給了我一個布爾(假)輸出。

下面是我使用的最新代碼:

<?php 
//database connection file setting.inc will need to be modified for production 
include ("settings.inc"); 

$db = new mysqli($dbhost, $dbuser, $dbpass, $dbname); 

if($db->connect_errno > 0){ 
    die('Unable to connect to database [' . $db->connect_error . ']'); 
} 
?> 
<select class="Select" id="articles" size="1" name="articles"> 
<?php 
$sql = <<<SQL 
    SELECT DISTINCT `AllianceName` 
    FROM `City` 
SQL; 
if(!$result = $db->query($sql)){ 
    die('There was an error running the query [' . $db->error . ']'); 
} 
while($row = $result->fetch_assoc()){ 
    echo "<option value="'.{$row['AllianceName']}.'"></option>"; 
} 
?> 
</select> 

查詢本身運行正常,當我剛剛呼應的結果。試圖把它放到下拉菜單中,每次都失敗。沒有值填充。

+0

謝謝,但你以爲我沒有讀到這個問題。我做過,但是我所遇到的大部分文獻都是主題/案例特定的,所以我所做的就是嘗試在我自己的代碼示例中使用這些概念。另外,對我來說絕對是新的編碼語言。 – MSM 2013-04-09 23:20:47

+0

重點不在*閱讀。*但在*運行示例代碼*。讓自己熟悉基本的操作。$ result-> fetch_assoc必須通過教程來獲得,而不是通過詢問Stack Overflow的問題。這不是教程網站。這只是問答網站。意味着你必須在提問之前用基本的教程例子來完成。 – 2013-04-10 05:13:11

回答

-1

這是最終工作的代碼。 @Syndrose和@Zombiehunter都爲此提供了線索。

@Syndrose - 您可能需要考慮此處使用的語法,因爲這是您的代碼庫中發生的故障......特別是echo標記行的語法。

<?php 
//database connection file setting.inc will need to be modified for production 
include ("settings.inc"); 

$db = new mysqli($dbhost, $dbuser, $dbpass, $dbname); 

if($db->connect_errno > 0){ 
    die('Unable to connect to database [' . $db->connect_error . ']'); 
} 
$sql = <<<SQL 
    SELECT DISTINCT `AllianceName` 
    FROM `City` 
SQL; 
if(!$result = $db->query($sql)){ 
    die('There was an error running the query [' . $db->error . ']'); 
    } 
?> 
<select style="width:300px" class="" id="AllianceName" size="1" name="Alliance Name"> 
<?php 
while($row = $result->fetch_assoc()){ 
    echo '<option value='.$row['AllianceName'].'>'.$row['AllianceName'].'</option>'; 
} 
?> 
</select> 
1

這裏有幾個問題。 首先,您不需要查詢中的GROUP BY 'AllianceName',但是您沒有對數據執行任何功能,這可能會導致您無法返回任何結果。其次,通常你用while循環遍歷查詢結果。你不必,但其通常的做法,所以你的代碼看起來應該是這樣..

<?php 
//database connection file setting.inc will need to be modified for production 
include ("settings.inc"); 

$con = mysqli_connect("$dbhost", "$dbuser", "$dbpass", "$dbname"); 
if (!$con) { 
    exit('Connect Error (' . mysqli_connect_errno() . ') ' 
     . mysqli_connect_error()); 
} 
//there is no need to make an array first, just have it spit out the options if you aren't making a class or function 
?> 
<select class="" id="articles" size="1" name="articles"> 
<?php 
$query = "SELECT * FROM `City` "; 
$db = mysqli_query($query); 
while ($d=mysqli_fetch_assoc($db)) { 
    echo "<option value='{".$d['AllianceName']."}'></option>"; 
} 
?> 
</select> 

嘗試了這一點,看看它是否適合你。

+0

我嘗試了你提供給我的確切代碼,但它不起作用。我在控制檯中得到的迴應是'我選擇不同的值,因此我通過查詢改變了組,我改變了'我選擇不同的值「從」城市「選擇DISTINCT'AllianceName'」...我知道這個查詢在SQL中工作得很好。我得到的輸出只是一個空白的下拉框。 – MSM 2013-04-09 22:56:43

0

mysqli_query()文檔:

返回FALSE失敗。對於成功的SELECT,SHOW,DESCRIBE或 EXPLAIN查詢,mysqli_query()將返回一個mysqli_result對象。對於 其他成功的查詢mysqli_query()將返回TRUE。

所以你在查詢成功後有一個mysqli_result對象。現在,您必須逐行將結果提取到(關聯)數組或對象中。

if($query === false) die('Query failed to execute'); 

while($row = $result->fetch_assoc()) { 
    echo $row['AllianceName'] . PHP_EOL; 
} 

所有這些在網絡上的數百個教程中都有描述,所以請閱讀其中之一。我推薦這些寫在當前的十年,例如http://codular.com/php-mysqli

+0

謝謝。通過使用教程,您指出我允許我回顯一個成功的查詢。現在我將嘗試將其封裝在表單/下拉列表中。 – MSM 2013-04-10 01:12:44

+0

所以我得到了一個結果,但我真正的需要是將結果封裝在下拉列表中,從用戶處獲取選定值作爲輸入並觸發第二個查詢。現在,我可以回顯教程的輸出基礎,謝謝...但不能得到相同的輸出解析到下拉列表中。在我的問題中發佈了較低的新代碼。 – MSM 2013-04-10 01:29:03

+0

啊nm。我得到了一個結果,並感謝你和@Syndrose的答案。我將發佈我最後做的一個單獨的答案,現在我開始理解這種編碼方法的語義。 – MSM 2013-04-10 02:13:44