2016-04-19 45 views
0

我在我的网站上创建一个搜索栏功能,用户可以使用名称搜索用户。搜索结果可能会出现多个用户名称相似(例如,如果我搜索“珍娜“,我的数据库可能有多个用户名为”珍娜“,因此会显示多个结果)。我希望用户能够点击其中一个配置文件并查看特定的”珍娜“用户配置文件。有点像Twitter,我可以在那里搜索帐户并查看不同的配置文件。现在我有代码返回搜索,并使搜索结果成为一个可点击的链接。但是,当我尝试保存用户标识时,它只保存最新的用户标识。链接到特定的用户配置文件php

home.php(其中用户在搜索栏中IS0

<form method="GET" action="search.php" id="searchform"> 
    Search for users: 
    <input type="text" name="search_user" placeholder="Enter username"> 
    <input type="submit" name="submit" value="Search"> 
</form> 

的search.php(打印出用户名,该用户搜索)

session_start(); 
$user = ''; 
$password = ''; 
$db = 'userAccounts'; 
$host = 'localhost'; 
$port = 3306; 
$link = mysqli_connect($host, $user, $password, $db); 
mysqli_query($link,"GRANT ALL ON comment_schema TO 'oviya'@'localhost'"); 
if (mysqli_connect_errno()) { 
    printf("Connect failed: %s\n", mysqli_connect_error()); 
    exit(); 
} 
$search_user = $_GET['search_user']; 
$sql = "SELECT * FROM users WHERE username LIKE '%$search_user%'"; 
$result = mysqli_query($link, $sql); 
if(mysqli_num_rows($result)>0){ 
    while ($row = mysqli_fetch_assoc($result)) { 
     $a = '<a'; 
     $b = ' href="'; 
     $c = 'user_profiles.php'; 
     $d = '">'; 
     $e = $row['username']; 
     $f = '</a'; 
     $g = '>'; 
     $_SESSION['user'] = $row['user_id']; 
     $userID = $_SESSION['user']; 
     echo $a.$b.$c.$d.$e.$f.$g; 
     header("Location: user_profiles.php"); 
    } 
} 

user_profiles.php (应该是显示特定用户简档的位置,基于用户用特定用户ID点击的链接)

session_start(); 
$userID=$_SESSION['user']; 
$link = mysqli_connect('localhost', 'x', '', 'userAccounts'); 
$query="SELECT * FROM dataTable WHERE user_id='$userID'"; 
$results = mysqli_query($link,$query); 
while ($row = mysqli_fetch_assoc($results)) { 
    echo '<div class="output" >'; 
    $entry_id = $row["entry_id"]; 
    $output= $row["activity"]; 
    echo "Activity: "; 
    echo htmlspecialchars($output ,ENT_QUOTES,'UTF-8')."<br>"."<br>"; 
    $output= $row["duration"]; 
    echo "Duration: "; 
    echo htmlspecialchars($output ,ENT_QUOTES,'UTF-8')." hrs"."<br>"."<br>"; 
    $output= $row["date_"]; 
    echo "Date: "; 
    echo htmlspecialchars($output ,ENT_QUOTES,'UTF-8')."<br>"."<br>"; 
    echo '</div>'; 
} 

我得到我的错误所在,search.php中的while循环只会保存最新的用户标识,因此链接将始终将我带到具有该用户标识的用户配置文件中。我只是不确定如何实现它,以便当用户查看配置文件列表时,他们点击的链接将根据用户标识将它们带到特定配置文件。

+0

'的print_r($ _ SESSION [ '用户'])'在个人资料页ANS发布它的价值! – Saty

+0

@Oviya Arasu,请检查我的答案,让我知道如果它解决您的问题 – Nehal

回答

1

你需要在搜索和user.php的文件做改动:

的search.php:

<?php 
session_start(); 
$user = ''; 
$password = ''; 
$db = 'userAccounts'; 
$host = 'localhost'; 
$port = 3306; 

$link = mysqli_connect($host, $user, $password, $db); 
mysqli_query($link, "GRANT ALL ON comment_schema TO 'oviya'@'localhost'"); 

if (mysqli_connect_errno()) { 
    printf("Connect failed: %s\n", mysqli_connect_error()); 
    exit(); 
} 

$search_user = $_GET['search_user']; 

$sql = "SELECT * FROM users WHERE username LIKE '%$search_user%'"; 
$result = mysqli_query($link, $sql); 

if (mysqli_num_rows($result) > 0) { 

    while ($row = mysqli_fetch_assoc($result)) { 
     $id = $row['user_id']; 
     ?> 
     <a href="user_profiles.php?id=<?php echo $id; ?>" > 
      <?php echo $row['username']; ?> 
     </a> 
     <?php 
     $_SESSION['user'] = $row['user_id']; 
     $userID = $_SESSION['user']; 

     header("Location: user_profiles.php"); 
    } 
} 

User_profile。PHP:

$userid = $_GET['id']; 

$link = mysqli_connect('localhost', 'x', '', 'userAccounts'); 
$query = "SELECT * FROM dataTable WHERE user_id='$userid'"; 
$results = mysqli_query($link, $query); 

while ($row = mysqli_fetch_assoc($results)) { 
    echo '<div class="output" >'; 
    $entry_id = $row["entry_id"]; 
    $output = $row["activity"]; 
    echo "Activity: "; 
    echo htmlspecialchars($output, ENT_QUOTES, 'UTF-8') . "<br>" . "<br>"; 
    $output = $row["duration"]; 
    echo "Duration: "; 
    echo htmlspecialchars($output, ENT_QUOTES, 'UTF-8') . " hrs" . "<br>" . "<br>"; 
    $output = $row["date_"]; 
    echo "Date: "; 
    echo htmlspecialchars($output, ENT_QUOTES, 'UTF-8') . "<br>" . "<br>"; 
    echo '</div>'; 
} 
+0

它的工作!非常感谢 –

+0

很高兴帮助你! – Nehal

0

首先,您将多个用户ID保存为一个字符串。

另一件事,你将它保存在while循环中。

因此,最新值会更新旧值。

就你而言,它将始终保存最后一个值。这是首要问题。

您可以将用户ID数组并保存在其中。

$userIds = array(); 
while ($row = mysqli_fetch_assoc($result)) { 
     $a = '<a'; 
     $b = ' href="'; 
     $c = 'user_profiles.php'; 
     $d = '">'; 
     $e = $row['username']; 
     $f = '</a'; 
     $g = '>'; 
     $userIds[] = $row['user_id']; 
     $userID = $_SESSION['user']; 
     echo $a.$b.$c.$d.$e.$f.$g; 
     header("Location: user_profiles.php"); 
    } 
$_SESSION['user'] = $userIds; 

而在你user_profiles.php,环阵列上或使用MySQL IN()条件让所有用户配置文件。

此外,为什么你需要太多的HTML链接变量。您可以使用串联像下面这样做在单一变量:

$userIds = array(); 
while ($row = mysqli_fetch_assoc($result)) { 
$a = '<a' 
. ' href="'; 
. 'user_profiles.php'; 
. '">'; 
. $row['username']; 
. '</a'; 
. '>'; 
$userIds[] = $row['user_id']; 
$userID = $_SESSION['user']; 
echo $a; 
header("Location: user_profiles.php"); 
} 
$_SESSION['user'] = $userIds; 

另一个错误是,你是echo荷兰国际集团HTML链接和做重定向。

这将导致headers already sent...错误。

0

这将显示用户列表与搜索的字符串

if(mysqli_num_rows($result)>0){ 

    while ($row = mysqli_fetch_assoc($result)) { 
$link="<a href='user_profiles.php?user_id=".$row['user_id']."'>".$row['username']."</a>"; 
    } 
} 

点击链接后会重定向到user_profiles.php(无需头球冲顶被用于自动重定向。) 在user_profiles.php

session_start(); 
$userID=$_GET['user_id']; 

$link = mysqli_connect('localhost', 'x', '', 'userAccounts'); 
$query="SELECT * FROM dataTable WHERE user_id='$userID'"; 
$results = mysqli_query($link,$query); 

while ($row = mysqli_fetch_assoc($results)) { 
    echo '<div class="output" >'; 
    $entry_id = $row["entry_id"]; 
    $output= $row["activity"]; 
    echo "Activity: "; 
    echo htmlspecialchars($output ,ENT_QUOTES,'UTF-8')."<br>"."<br>"; 
    $output= $row["duration"]; 
    echo "Duration: "; 
    echo htmlspecialchars($output ,ENT_QUOTES,'UTF-8')." hrs"."<br>"."<br>"; 
    $output= $row["date_"]; 
    echo "Date: "; 
    echo htmlspecialchars($output ,ENT_QUOTES,'UTF-8')."<br>"."<br>"; 
    echo '</div>'; 
} 
相关问题