2017-08-10 38 views
-1

我覺得這可能是一個容易的,但只是看不到它!如果條件匹配,輸出一個結果

我已經建立了一個測試結果保存到數據庫表中。目前它爲每次測試都保存一行。測試可以採取,直到它通過。

目前它正在輸出每個結果(因爲它循環遍歷表中的每個結果)。

如果$row['pass-fail'];的輸出爲「Pass」,我怎樣才能輸出$row['testname'];一次?

<?php $current_user = wp_get_current_user(); 
$user = $current_user->user_login; 

require("database.php"); 
// Opens a connection to a MySQL server 
$con = mysql_connect("localhost", $username, $password); 
if (!$con) { 
    die('Could not connect: ' . mysql_error()); 
} 

mysql_select_db("tester", $con); 
$sql = mysql_query("SELECT * FROM test WHERE name='$user' ORDER BY Date DESC"); 
if (!$sql) { 
    die('Error: ' . mysql_error()); 
} ?> 

    <?php while($row = mysql_fetch_array($sql)) { ?> 


     <p><?php $testname = $row['testname']; echo get_the_title($testname); ?> - <?php echo $row['pass-fail']; ?></p> 


    <?php } ?> 

<?php mysql_close($con); ?> 
+0

**請**,請勿使用'mysql_ *'功能獲取新代碼。他們不再被維護,社區已經開始[棄用過程](http://news.php.net/php.internals/53799),並且'mysql_ *'函數已經在PHP 7中被正式刪除。相反,你應該瞭解[已準備好的語句](https://en.wikipedia.org/wiki/Prepared_statement)並使用「PDO」或「mysqli_ *」。如果你不能決定,[這篇文章將有助於選擇你最好的選擇](http://php.net/manual/en/mysqlinfo.api.choosing.php)。 – GrumpyCrouton

+0

*「如何只輸出$ row ['testname'];如果$ row ['pass-fail'];的輸出是」Pass「,那麼一次?」 - 添加到WHERE子句中,或者檢查if一行等於它在一個循環中。 –

+0

[Little Bobby](http://bobby-tables.com/)說** [您有SQL注入攻擊的風險](https://stackoverflow.com/q/60174/)**。瞭解[MySQLi](http://php.net/manual/en/mysqli.quickstart.prepared-statements.php)的[Prepared Statements](準備語句)(https://en.wikipedia.org/wiki/Prepared_statement)。即使** [轉義字符串](https://stackoverflow.com/q/5741187)**是不安全的!我推薦'PDO',我[寫了一個函數](https://stackoverflow.com/a/45514591)使它非常容易**,非常乾淨**,並且更加安全** **比使用非參數化查詢。 – GrumpyCrouton

回答

4

在查詢中使用WHERE子句只選擇那些pass-fail等於「Pass」的。另外,使用準備好的語句。

$current_user = wp_get_current_user(); 
$user = $current_user->user_login; 

require("database.php"); 

// Opens a connection to a MySQL server 
$conn = new mysqli("localhost", $username, $password, "tester"); 

if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 

$stmt = mysqli_prepare($conn, "SELECT * FROM `test` WHERE `name`=? AND `pass-fail`='Pass' ORDER BY `Date` DESC"); 
$stmt->bind_param("s", $user); 
$stmt->execute(); 
$result = $stmt->get_result(); 

while($row = $result->fetch_assoc()) { 
    $testname_title = get_the_title($row['testname']); 
    echo "<p>{$testname_title}</p>"; 
} 

$conn->close(); 

對於這個工作,你必須有the mysqlnd driver

如果你沒有這個,我建議PDO(其中,IMO一般也更容易使用) - 如果你需要幫助學習如何使用PDO進行安全和安全的查詢,那麼你可以查看this answer that I wrote這證明了我寫的功能,使Prepared Statements容易,乾淨,和安全。或者,您可以瞭解更多有關Prepared Statements for MySQLi

+1

關於'get_result()'的注意事項:根據手冊http://php.net/manual/en/mysqli-stmt.get-result.php,這是一個MySQL本地驅動程序 - 編輯:按照原文post https://stackoverflow.com/revisions/45618604/1 –

+2

你也有2個'WHERE',你需要一個邏輯運算符來代替。編輯:這按照原來的帖子https://stackoverflow.com/revisions/45618604/1 –

+0

感謝讓我排隊@弗雷德 - ii- :) – GrumpyCrouton

相關問題