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:
<?php
 
$connect = mysql_connect("localhost","csovike10_wiwi","password");

$eredmeny = mysql_db_query ("csovike10_wiwi","SELECT lastname, firstname, username, title, town FROM wiwi ORDER BY regdate DESC");

$user = $_SESSION["user"];

$checkcontacttype = mysql_db_query("csovike10_wiwi","SELECT pendingin, pendingout, contact FROM contacts WHERE username='$user'");

while($contacttype = mysql_fetch_array($checkcontacttype)) /ezzel nem stimmel vmi/

while ($sor = mysql_fetch_array ($eredmeny)) 

{


echo'



		<div>
		<table border="0" cellpadding="15" align="left">
		<tr>
		<td>
		<table align="left" border="1"';

		if($sor["username"]==$_SESSION["user"]) echo ' bordercolor="#eee769"';		
		else if($contacttype["pendingin"]==$sor["username"] | $contacttype["pendingout"]==$sor["username"]) echo ' bordercolor="#ee838d"';
		else if($contacttype["contact"]==$sor["username"]) echo ' bordercolor="#7be135"';
				
		echo'>
		  <tr>
	    <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>
	  </tr>
  		<tr>
    	<td height="40"><center>
    	<b><a href="main.php?page=profile&user='.$sor["username"].'">'.$sor["title"].' '.$sor["lastname"].' '.$sor["firstname"].'</a></b></center></td>
  		</tr>
    	<tr>
    	<td height="10"><div align="center">'.$sor["username"].'</div></td>
  		</tr>
  		<tr>
    	<td height="10"><div align="center">'.$sor["town"].'&nbsp;</div></td>
  		</tr>
  		<tr>
    	<td height="10"><div align="center">&eacute;letkor</div>
		</td>
  		</tr>
		</table>
		</td>
		</tr>
		</table>		
		</td>
		</tr>
		</table>
		</div>


';

}

echo '<br><br><br>';

mysql_free_result ($eredmeny);
mysql_close($connect);
 

?>
 
1

mysql_fetch_array

Poetro · 2010. Már. 10. (Sze), 03.17
minden hasonló kód:
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
SELECT pendingin, pendingout, contact FROM contacts WHERE username='$user'
sorból
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
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:
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
SELECT pendingin, pendingout, contact FROM contacts WHERE username='$user'
sorból
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
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:
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
SELECT pendingin, pendingout, contact FROM contacts WHERE username='$user'
sorból
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
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