2017-04-08 66 views
0

My php While循環運行查詢,但結果必須打印在html內。在這一刻,我不明,使這個方式:Mysqli while循環:打印html內部的變量

我的PHP while循環

<?php 
include "connect.php"; 
$username=$_SESSION['Username']; 

$result = mysqli_query($dbconn," 
SELECT * 
    FROM books 
WHERE username = '$Username' 
"); 
while($rows = mysqli_fetch_array($result)); 
?> 

這段代碼有一個HTML代碼,我想打印變量之後:

<a href="editBook.php?bookid=<?php echo $book_id; ?>&book_name=<?php echo $book_name; ?>">Edit</a> 

在這當時變量爲空

如何解決這個問題?

【解析】更新 我解決我的問題。這是正確的PHP腳本。工作正常:

<?php 
include "connect.php"; 
$username=$_SESSION['Username']; 

$result = mysqli_query($dbconn," 
SELECT * 
    FROM books 
WHERE username = '$Username' 
"); 
global $book_id, $book_name 
while($row = mysqli_fetch_array($result)) { 
$book_id = row['book_id']; 
$book_name = row['book_name']; 
?> 

Outside while loop。在HTML中打印變量:

<?php echo $row['book_id']; ?> <br> 
<?php echo $row['book_name']; ?> 

關閉while循環和連接:

<?php 
} 
mysqli_close($dbconn); 
?> 
+0

也顯示你的html代碼。 –

+0

對不起,我更新了這篇文章。請閱讀。 – Frankie

+2

你需要'echo $ rows ['column_name'];' – Mario

回答

0

在你的HTML,你必須這樣做

<a href="editBook.php?bookid=<?php echo $rows['book_id']; ?>&book_name=<?php echo $rows['book_name']; ?>">Edit</a>

0

作爲有可能是爲每個用戶多本書籍,你必須打印while循環內的鏈接,或將其存儲在一個字符串:

<?php 
include "connect.php"; 
$username = $_SESSION['Username']; 

$result = mysqli_query($dbconn," 
    SELECT * FROM books 
    WHERE username = '$Username' 
"); 

$links = ""; // all links are stored in this string 
while($rows = mysqli_fetch_array($result)) { 
    // I assume that the columns are called `id` and `name` 
    $links .= '<a href="editBook.php?bookid='. $rows["id"] .'&book_name='. $rows["name"] .'">Edit '. $rows["name"] .'</a>'; 
} 
?> 

在HTML代碼簡單地寫

<?php echo $links ?> 

注您應該使用準備好的語句。您還應該看看使用mysqli類的面向對象的方式來使用mysqli。

+0

你的代碼缺少session_start,並且所有鏈接都會粘在一起,不知道要編輯哪一個,只是一個鏈接...:/ – OldPadawan

+0

不,我的代碼不缺少會話開始。我修改了上面沒有session_start的代碼。最有可能的是,會話在'connect.php'中開始。你說得對,鏈接應該有一個更具描述性的名字,我糾正了它。 – Aloso

+0

我們現在缺少他最後一條評論的答案:) – OldPadawan

1

預處理語句:

<?php 
session_start(); 
$username = $_SESSION['Username']; 

error_reporting(E_ALL); 
ini_set('display_errors', 1); 

include"config.inc.php"; 

/* connect to DB */ 
$mysqli = mysqli_connect("$host", "$user", "$mdp", "$db"); 

if (mysqli_connect_errno()) { echo "Error connecting : " . mysqli_connect_error($mysqli); } 

$query = " SELECT * FROM books WHERE username=? "; 
$stmt = $mysqli->prepare($query); 
$stmt->bind_param("s", $username); 
$results = $stmt->execute(); 
$stmt->bind_result($book_id, $book_name); 
$stmt->store_result(); 

if ($stmt->num_rows > 0) { 
while($stmt->fetch()){ 
?> 
<p><?php echo"$book_name"; ?> > <a href="editBook.php?bookid=<?php echo"$book_id"; ?>&book_name=<?php echo"$book_name"; ?>">Edit</a></p> 
<?php 
} 
} 
else 
{ echo"[ no data ]"; } 
?> 
1

(重寫)

真正的問題是:

while ($rows = ...) ; 

這個循環,直到$rowsNULL。所以之後沒有什麼可顯示的。

由於您在單個函數調用中獲取整個數組,因此不需要循環!

$rows = ...; 

但是你需要引用第一個(?)行以獲得所需的數據:

$row = $rows[0]; 

那麼,另一種方法是取剛一排,然後關閉取過程。

+0

看看我的更新後白衣解決方案。 – Frankie