2014-02-27 18 views
0

根據用戶的配置文件,我在查看他們的配置文件中是否包含某些條款,如果是,請選擇一個隨機條目從一個特定的表格。如何檢查條目是否包含單詞並從表中打印隨機條目PHP,MySQL

另外,最後,我只想打印其中一個條目。因此,如果他們的配置文件包含全部5個單詞,我希望PHP每次刷新頁面時仍然只打印一個隨機條目。

難道有人請指點我正確的方向嗎?我現在的代碼如下:

<?php 

    session_start(); 
    include 'includes/Connect.php'; 
    $username=$_SESSION['myusername']; 

    $query = "SELECT `CC` FROM `$username`";    
    $result = mysql_query($query); 
    $pos1 = strpos($result,'Honesty'); 
    $pos2 = strpos($result,'Loyalty'); 
    $pos3 = strpos($result,'Trust'); 
    $pos4 = strpos($result,'Empathy'); 
    $pos5 = strpos($result,'Respect'); 

    while($Aff = mysql_fetch_array($result)){ 
    $data = array(); 

    if($pos1!==false){ 
     $query1 = "SELECT Affirmation FROM `Aff CC1` ORDER BY RAND() LIMIT 1"; 
     for ($x = 0; $x < mysql_num_rows($query1); $x++) 
     { 
     $data[] = mysql_fetch_assoc($query1); 
     } 
    } 
    if($pos2!==false){ 
     $query2 = "SELECT Affirmation FROM `Aff CC2` ORDER BY RAND() LIMIT 1"; 
     for ($x = 0; $x < mysql_num_rows($query2); $x++) 
     { 
     $data[] = mysql_fetch_assoc($query2); 
     } 
    } 
    if($pos3!==false){ 
     $query3 = "SELECT Affirmation FROM `Aff CC3` ORDER BY RAND() LIMIT 1"; 
     for ($x = 0; $x < mysql_num_rows($query3); $x++) 
     { 
     $data[] = mysql_fetch_assoc($query3); 
     } 
    } 
    if($pos4!==false){ 
     $query4 = "SELECT Affirmation FROM `Aff CC4` ORDER BY RAND() LIMIT 1"; 
     for ($x = 0; $x < mysql_num_rows($query4); $x++) 
     { 
     $data[] = mysql_fetch_assoc($query4); 
     } 
    } 
    if($pos5!==false){ 
     $query5 = "SELECT Affirmation FROM `Aff CC5` ORDER BY RAND() LIMIT 1"; 
     for ($x = 0; $x < mysql_num_rows($query5); $x++) 
     { 
     $data[] = mysql_fetch_assoc($query5); 
     } 
    } 
    } 
?> 

所以我不是這樣做,我仍然得到什麼。

session_start(); 
           include 'includes/Connect.php'; 
           $username=$_SESSION['myusername']; 

           $query = "SELECT `CC` FROM `Profile` where `Username`=`$username`";    
           $result = mysql_query($query); 
           $pos1 = strpos($result,'Honesty'); 
           $pos2 = strpos($result,'Loyalty'); 
           $pos3 = strpos($result,'Trust'); 
           $pos4 = strpos($result,'Empathy'); 
           $pos5 = strpos($result,'Respect'); 
           $data = array(); 

           for ($x = 0; $x < mysql_num_rows($result); $x++) { 

            if($pos1!==false){ 
             $CCID=1; 
            } 

            if($pos2!==false){ 
             $CCID=2; 
            } 

            if($pos3!==false){ 
             $CCID=3; 
            } 

            if($pos4!==false){ 
             $CCID=4; 
            } 

            if($pos5!==false){ 
             $CCID=5; 
            } 

            $querymain = "SELECT `Affirmation` FROM `Affs` WHERE CCID=$CCID ORDER BY RAND() LIMIT 1"; 
            $resultmain = mysql_query($querymain); 

            for ($x = 0; $x < mysql_num_rows($resultmain); $x++) 
            { 
            $data[] = mysql_fetch_assoc($resultmain); 
            } 
           } 

           echo json_encode($data); 
           mysql_close($conn); 

           ?> 
+0

請,**不要**使用'mysql_query'在新的應用。如果您不小心[正確地轉義](http://bobby-tables.com/php)查詢中的每個值,並且將從PHP的未來版本中刪除它,那麼這種做法已被棄用,非常危險。像[PDO這樣的現代化替代品並不難學](http://net.tutsplus.com/tutorials/php/why-you-should-be-using-phps-pdo-for-database-access/)。像[PHP The Right Way](http://www.phptherightway.com/)這樣的指南概述了推薦的最佳實踐。 – tadman

回答

1

好的,所以你已經有了一個數組,最多X個物品。你可以從數組中挑選一個隨機項目,就像你從數據庫中選擇一個隨機項目一樣。

基本上,只要你的$data數組看看你有多少物品在那裏。然後選擇一個介於0和1之間的隨機數,然後減去1。現在可以從數組中訪問該特定項目。

嘗試這樣的事情後,你有你的$data陣列內置:

<?php 

$line_count = count($data) - 1; 

print "RANDOM LINE: ".$data[get_random_line($line_count)]; 


function get_random_line($line_count) { 
    mt_srand(microtime() * 1000000); 
    $random_number = rand(0, $line_count); 
    return $random_number; 
} 
+0

感謝您的Quixrick。你有什麼想法我已經有了錯誤的代碼,雖然我的陣列中沒有顯示任何東西,但是還沒有運行你的代碼?再次感謝 – Phughes

+1

我很樂意提供幫助。首先,你能向我解釋你在做什麼嗎?我會刺穿它,你可以糾正我。看起來你每個用戶名都有一張桌子。所以,如果我把我的用戶名作爲'Quixrick',那麼你可以從'Quixrick'表中得到'CC'字段。然後,出於某種原因,您正在檢查它是否包含「誠實」,「忠誠」等詞。現在,您正在循環訪問'$ result'並將其存儲在'$ Aff'中。這可能是您應該檢查以查看單詞是否匹配的地方。在循環中檢查'$ Aff'而不是'$ result'。 ... – Quixrick

+1

好吧,現在,你有5個類似的表'Aff CC1','Aff CC2'等。可能你應該只有一個表,然後只是有一些'ID'字段來標記1, 2,3等等[另外,作爲一個方面說明,讓你的表名包含空格並不是一個好習慣。]好吧,我懷疑是這種情況,但我們只是說'$ pos1'有一些東西在裏面並使其成爲'if'條件。在那裏,你正在定義你的查詢('$ query1 = ...'),但你並沒有真正執行它。您應該執行查詢,然後在'$ result1','$ result2'等處使用'mysql_num_rows'。 – Quixrick

相關問題