ugrás a tartalomhoz

dupla while, táblázat, sql, mi1más :)

titanium · 2010. Már. 10. (Sze), 00.40
Sziasztok!

Az iWiW-hez hasonló közösségi oldalt csinálgatok. Bármilyen felhasználókat listázó oldalon az ismeretlen userek sima, az ismerősök zöld, míg a függő kapcsolatok piros szegéllyel jelennek meg. (az adott user meg sárgával) A kódomban vmi nincs rendben, mert a lekérdezés eredményét tartalmazó tömbömet csak egyszer vizsgálja meg, így az adott felhasználónak mindegy, hogy hány ismerőse, vagy függő kapcsolata van, az adott típusból csak az elsőt keretezi be a megfelelő színnel. (pl. 2 függő, 3 ismerősnél 1 függőt, 1 ismerőst keretez be zölddel.) Kérlek titeket, ha tudtok, segítsetek! Köszönettel: daniboyle

A kód:
  1. <?php  
  2.    
  3. $connect = mysql_connect("localhost","csovike10_wiwi","password");  
  4.   
  5. $eredmeny = mysql_db_query ("csovike10_wiwi","SELECT lastname, firstname, username, title, town FROM wiwi ORDER BY regdate DESC");  
  6.   
  7. $user = $_SESSION["user"];  
  8.   
  9. $checkcontacttype = mysql_db_query("csovike10_wiwi","SELECT pendingin, pendingout, contact FROM contacts WHERE username='$user'");  
  10.   
  11. while($contacttype = mysql_fetch_array($checkcontacttype)) /ezzel nem stimmel vmi/  
  12.   
  13. while ($sor = mysql_fetch_array ($eredmeny))   
  14.   
  15. {  
  16.   
  17.   
  18. echo'  
  19.   
  20.   
  21.   
  22.         <div>  
  23.         <table border="0" cellpadding="15" align="left">  
  24.         <tr>  
  25.         <td>  
  26.         <table align="left" border="1"';  
  27.   
  28.         if($sor["username"]==$_SESSION["user"]) echo ' bordercolor="#eee769"';        
  29.         else if($contacttype["pendingin"]==$sor["username"] | $contacttype["pendingout"]==$sor["username"]) echo ' bordercolor="#ee838d"';  
  30.         else if($contacttype["contact"]==$sor["username"]) echo ' bordercolor="#7be135"';  
  31.                   
  32.         echo'>  
  33.           <tr>  
  34.         <td><table width="100" onMouseOver=bgColor="#d5dde8" onMouseOut=bgColor="#e4e9f0" height="200" border="0" cellpadding="5" align="left"><tr><td width="100" height="100"><a href="main.php?page=profile&user='.$sor["username"].'"><center><img src="pics/noimage.gif" width="100" height="53" border="0"></center></a></td>  
  35.       </tr>  
  36.         <tr>  
  37.         <td height="40"><center>  
  38.         <b><a href="main.php?page=profile&user='.$sor["username"].'">'.$sor["title"].' '.$sor["lastname"].' '.$sor["firstname"].'</a></b></center></td>  
  39.         </tr>  
  40.         <tr>  
  41.         <td height="10"><div align="center">'.$sor["username"].'</div></td>  
  42.         </tr>  
  43.         <tr>  
  44.         <td height="10"><div align="center">'.$sor["town"].'&nbsp;</div></td>  
  45.         </tr>  
  46.         <tr>  
  47.         <td height="10"><div align="center">&eacute;letkor</div>  
  48.         </td>  
  49.         </tr>  
  50.         </table>  
  51.         </td>  
  52.         </tr>  
  53.         </table>        
  54.         </td>  
  55.         </tr>  
  56.         </table>  
  57.         </div>  
  58.   
  59.   
  60. ';  
  61.   
  62. }  
  63.   
  64. echo '<br><br><br>';  
  65.   
  66. mysql_free_result ($eredmeny);  
  67. mysql_close($connect);  
  68.    
  69.   
  70. ?>  
 
1

mysql_fetch_array

Poetro · 2010. Már. 10. (Sze), 03.17
minden hasonló kód:
  1. while($contacttype = mysql_fetch_array($checkcontacttype))  
pontosan egyszer megy végig az eredményhalmazon, különben végtelen ciklusba kerülnél amit szerintem te se szeretnél.
Amit tehetsz, az az, hogy előre lekérdezed egy tömbbe a teljes $contacttype táblázatodat, és azon mész végig mondjuk foreach-csel a fenti while ciklus helyett (nem mintha bármelyik is hatékony lenne több (tíz/száz) ezer felhasználó esetén).

A másik az, hogy mindenképp figyelj a változók escapelésére, mert előfordulhat hogy a felhasználó neve ebben az esetben mondjuk tartalmaz idézőjelet, és akkor bukott az egész script. És persze ez nem csak az SQL query-re érvényes, hanem a HTML formázásodra is.
Mondjuk tegyük fel hogy a felhasználó neve O'Reilly. Ekkor a
  1. SELECT pendingin, pendingout, contact FROM contacts WHERE username='$user'  
sorból
  1. SELECT pendingin, pendingout, contact FROM contacts WHERE username='O'Reilly'  
lesz, ami nem túl szerencsés, remélem ez elsőre látszik.

Hasonló a helyzet például az
<a href="main.php?page=profile&user='.$sor["username"].'">
sorral is, amibe egy Béla&Társa nevű felhasználót helyettesítve:
<a href="main.php?page=profile&user=Béla&Társa">
lesz, ami szintén nem az elvárt viselkedés. Minden helyen használjuk a megfelelő escape függvényeket, MySQL esetén a mysql_real_escape_string, HTML elemek tulajdonságai esetén pedig például a
  1. htmlspecialchars($text, ENT_QUOTES);  
kódot. De a sort persze lehetne még folytatni.
2

mysql_fetch_array

Poetro · 2010. Már. 10. (Sze), 03.18
minden hasonló kód:
  1. while($contacttype = mysql_fetch_array($checkcontacttype))  
pontosan egyszer megy végig az eredményhalmazon, különben végtelen ciklusba kerülnél amit szerintem te se szeretnél.
Amit tehetsz, az az, hogy előre lekérdezed egy tömbbe a teljes $contacttype táblázatodat, és azon mész végig mondjuk foreach-csel a fenti while ciklus helyett (nem mintha bármelyik is hatékony lenne több (tíz/száz) ezer felhasználó esetén).

A másik az, hogy mindenképp figyelj a változók escapelésére, mert előfordulhat hogy a felhasználó neve ebben az esetben mondjuk tartalmaz idézőjelet, és akkor bukott az egész script. És persze ez nem csak az SQL query-re érvényes, hanem a HTML formázásodra is.
Mondjuk tegyük fel hogy a felhasználó neve O'Reilly. Ekkor a
  1. SELECT pendingin, pendingout, contact FROM contacts WHERE username='$user'  
sorból
  1. SELECT pendingin, pendingout, contact FROM contacts WHERE username='O'Reilly'  
lesz, ami nem túl szerencsés, remélem ez elsőre látszik.

Hasonló a helyzet például az
<a href="main.php?page=profile&user='.$sor["username"].'">
sorral is, amibe egy Béla&Társa nevű felhasználót helyettesítve:
<a href="main.php?page=profile&user=Béla&Társa">
lesz, ami szintén nem az elvárt viselkedés. Minden helyen használjuk a megfelelő escape függvényeket, MySQL esetén a mysql_real_escape_string, HTML elemek tulajdonságai esetén pedig például a
  1. htmlspecialchars($text, ENT_QUOTES);  
kódot. De a sort persze lehetne még folytatni.
3

mysql_fetch_array

Poetro · 2010. Már. 10. (Sze), 03.19
minden hasonló kód:
  1. while($contacttype = mysql_fetch_array($checkcontacttype))  
pontosan egyszer megy végig az eredményhalmazon, különben végtelen ciklusba kerülnél amit szerintem te se szeretnél.
Amit tehetsz, az az, hogy előre lekérdezed egy tömbbe a teljes $contacttype táblázatodat, és azon mész végig mondjuk foreach-csel a fenti while ciklus helyett (nem mintha bármelyik is hatékony lenne több (tíz/száz) ezer felhasználó esetén).

A másik az, hogy mindenképp figyelj a változók escapelésére, mert előfordulhat hogy a felhasználó neve ebben az esetben mondjuk tartalmaz idézőjelet, és akkor bukott az egész script. És persze ez nem csak az SQL query-re érvényes, hanem a HTML formázásodra is.
Mondjuk tegyük fel hogy a felhasználó neve O'Reilly. Ekkor a
  1. SELECT pendingin, pendingout, contact FROM contacts WHERE username='$user'  
sorból
  1. SELECT pendingin, pendingout, contact FROM contacts WHERE username='O'Reilly'  
lesz, ami nem túl szerencsés, remélem ez elsőre látszik.

Hasonló a helyzet például az
<a href="main.php?page=profile&user='.$sor["username"].'">
sorral is, amibe egy Béla&Társa nevű felhasználót helyettesítve:
<a href="main.php?page=profile&user=Béla&Társa">
lesz, ami szintén nem az elvárt viselkedés. Minden helyen használjuk a megfelelő escape függvényeket, MySQL esetén a mysql_real_escape_string, HTML elemek tulajdonságai esetén pedig például a
  1. htmlspecialchars($text, ENT_QUOTES);  
kódot. De a sort persze lehetne még folytatni.
4

Hali! Köszi szépen a választ.

titanium · 2010. Már. 11. (Cs), 00.53
Hali! Köszi szépen a választ. (A felhasználónévben már regisztrációnál tiltom ezeket a karaktereket, így kikerülve bármilyen későbbi hibalehetőséget.)

Üdv: daniboyle
5

com

bevisaxel · 2010. Május. 31. (H), 13.17
<system.web>
<compilation>
<assemblies>
<add assembly="MNissen.DataControls, Version=1.1.0.0, Culture=neutral, PublicKeyToken=e21df62f5c740a13" />
<add assembly="Web, Version=1.0.0.0, Culture=neutral, PublicKeyToken=e21df62f5c740a13" />
<add assembly="Services, Version=1.0.0.0, Culture=neutral, PublicKeyToken=e21df62f5c740a13" />
<add assembly="Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=e21df62f5c740a13" />
<add assembly="Microsoft.ApplicationBlocks.ExceptionManagement, Version=1.0.0.0, Culture=neutral, PublicKeyToken=e21df62f5c740a13" />
</assemblies>
</compilation>
</system.web>

------------------
132-S-708 ! 132-S-712 ! 132-S-815 ! 132-S-900