webForumDet fria alternativet

Får EJ ut variablen ur databasobjektet

41 svar · 1 223 visningar · startad av lillebror

lillebrorMedlem sedan apr. 20041 597 inlägg
#1

Hej,

Denna fråga berör både PHP och MySQL men tonvikten på problemet tror jag ligger i PHP så därför postar jag den här.

Hur som helst så har jag ett synnerligen märkligt problem. Jag ska hämta ut ett användarnamn tillsammans med ett memberID som jag sedan skall göra en länk ut av. Namnet får jag ut korrekt. Dock skrivs aldrig memberID-informationen ut.

PHP-koden och MySQL-frågan ser ut som följer:

function showActiveMemberUser() {
$sqlSelect = "SELECT t2.memberID, t2.username, t1.activity, DATE_FORMAT(t1.date_time, '%H:%i') AS datetime FROM tblonline AS t1, tblmember AS t2 WHERE t1.memberID = t2.memberID ORDER BY t1.date_time DESC";
$RSobj = mysql_query($sqlSelect) or die (mysql_error());
	
return $RSobj;
}

Koden i index.php ser ut som följer:

$RSobj_usersOnline = showActiveMemberUser();

<div style="background-color: #E5E5E5; padding: 5px 5px 5px 5px; width: 458px; color: #000; font-size: 10px; border-bottom: 1px solid #D2BA78; border-left: 1px solid #D2BA78; border-right: 1px solid #D2BA78;">
<?php 
$i=0;
while($array = mysql_fetch_array($RSobj_usersOnline)) { ?>
<a href="showprofile.php?uid="<?php echo $array['guestID'] ?>"><?php echo $array['username'] ?></a><?php if($i <> ($RSobj_visitors['number']-$RSobj_visitors['guest']-1)) { echo ",&nbsp"; } ?>
<?php 
$i++;
} 
?>
</div>

Problemet jag har är att memberID inte skrivs ut. Någon som ser något fel i ovanstående kod? :OO

Peter SMedlem sedan dec. 20025 483 inlägg
#2

Var i den undre koden försöker du skriva ut memberID och var kommer guestID ifrån ($array['guestID'])?

lillebrorMedlem sedan apr. 20041 597 inlägg
#3

Där det står $array['guestID'] ska det istället stå $array['memberID']. Jag testade och glömde ändra tillbaka.

Här ifrån kommer guestID (bild)... Denna tabell heter tblonline och håller reda på vilka medlemmar som är inloggade samt vilka gäster som "bara" besöker sidan utan att logga in. Jag gör en funktion som visar på första sidan vilka användare som är inloggade (likt wF). Nu saknar jag bara memberID för att jag ska kunna göra en länk till medlemsprofilen.

mysql.jpg
Peter SMedlem sedan dec. 20025 483 inlägg
#4

Jo, men var i den undre koden du presenterade försöker du skriva ut memberID?

lillebrorMedlem sedan apr. 20041 597 inlägg
#5

Han inte med att editera inlägget innan du svarat på den första delen :) (Läs ovan)

Peter SMedlem sedan dec. 20025 483 inlägg
#6

Testa med att sätta ett alias på de kolumner du vill hämta:

select t2.memberid [b]memid[/b], ...

$array['memid']

Det kanske blir en namnkonflikt i.o.m. att du har samma namn på två kolumner (även fast de ligger i olika tabeller).

lillebrorMedlem sedan apr. 20041 597 inlägg
#7

Ska testa...

lillebrorMedlem sedan apr. 20041 597 inlägg
#8

Provade det utan resultat...

Det som förbryllar mig är att användarnamnet skrivs ut...hmmm... :q

Patrik81Medlem sedan okt. 2001538 inlägg
#9

Hejsan, om du inuti while-loopen kommenterar bort din länkkod, och istället skriver

echo( "<pre>\n" );
print_r( $array );
echo( "</pre>" );

så kanske du åtminstone kan se vad det är som hämtas tillbaka från databasen.

MVH Patrik

aasahMedlem sedan mars 20034 471 inlägg
#10

Jag ser några skumma saker... Dels står verkligen raden:
$RSobj_usersOnline = showActiveMemberUser();
inom PHP-taggar? Annars har du problemet att den blir en tom array. Varvid while-slingan aldrig körs.

Sedan:

lillebror skrev:

Koden i index.php ser ut som följer:

<?php 
while($array = mysql_fetch_array($RSobj_usersOnline)) { ?>
<a href="showprofile.php?uid="<?php echo $array['memberID'] ?>"><?php echo $array['username'] ?></a><?php if($i <> ($RSobj_visitors['number']-$RSobj_visitors['guest']-1)) { echo ",&nbsp"; } ?>
}

I while-slingan använder du omväxlande array och $RSobj_visitors. Var kommer det senare ifrån? :q Och om det är ett RecordSet kan du ju inte hämta värdet direkt ur den heller.

lillebrorMedlem sedan apr. 20041 597 inlägg
#11

Patrik81 skrev:

Hejsan, om du inuti while-loopen kommenterar bort din länkkod, och istället skriver

echo( "<pre>\n" );
print_r( $array );
echo( "</pre>" );

så kanske du åtminstone kan se vad det är som hämtas tillbaka från databasen.

MVH Patrik

Tack för tipset! Gjorde som du sa och fick följande information vilket visar att information för memberID finns med i arrayen:

Array
(
    [0] => 1
    [memberID] => 1
    [1] => Fredrik
    [username] => Fredrik
    [2] => Läser "Vilka är online".
    [activity] => Läser "Vilka är online".
    [3] => 22:45
    [datetime] => 22:45
)

Någon idé om varför detta inte skrivs ut? :q

lillebrorMedlem sedan apr. 20041 597 inlägg
#12

aasah skrev:

Jag ser några skumma saker... Dels står verkligen raden:
$RSobj_usersOnline = showActiveMemberUser();
inom PHP-taggar?

Ja, det gör den. Det var jag som var slarvig när jag bifogade koden :)

Efter att ha testat tidigare tips postade jag resultatet från detta i inlägget ovan. Det visar att arrayen ej är tom och att memberID har ett värde som stämmer med vad som finns i databasen.

aasah skrev:

I while-slingan använder du omväxlande array och $RSobj_visitors. Var kommer det senare ifrån? :q Och om det är ett RecordSet kan du ju inte hämta värdet direkt ur den heller.

Denna kodrad:

($RSobj_visitors['number']-$RSobj_visitors['guest']-1)) { echo ",&nbsp"; } ?>

Används för att räkna ut hur många aktiva inloggade medlemmar som är kvar att loopa ut. Anledningen att jag gör detta är för att jag ska kunna skriva ut komma efter varje användarnamn men EJ efter den sista utskriva posten då det inte skall finnas något kommatecken där :)

aasahMedlem sedan mars 20034 471 inlägg
#13

lillebror skrev:

aasah skrev:

I while-slingan använder du omväxlande array och $RSobj_visitors. Var kommer det senare ifrån? Och om det är ett RecordSet kan du ju inte hämta värdet direkt ur den heller.

Denna kodrad:

($RSobj_visitors['number']-$RSobj_visitors['guest']-1)) { echo ",&nbsp"; } ?>

Används för att räkna ut hur många aktiva inloggade medlemmar som är kvar att loopa ut. Anledningen att jag gör detta är för att jag ska kunna skriva ut komma efter varje användarnamn men EJ efter den sista utskriva posten då det inte skall finnas något kommatecken där :)

Jo, fast jag menade, hur är den definierad? Var får den sitt värde ifrån?

Namnet antyder att det är ett RecordSet, i så fall kan du inte komma åt kolumnvärden i den direkt. Då behövs ett mysql_fetch_array först. Men det kanske i själva verket är gjort, bara namnet som är missvisande?

lillebrorMedlem sedan apr. 20041 597 inlägg
#14

Någon som kan fatta vad det är som spökar med detta problem?! Blir smått konfunderad över vad jag lyckats åstadkomma! Tycker jag provat det mesta för att komma till rätta med det hela! :e

MatteMedlem sedan aug. 20002 975 inlägg
#15

Visa då hur din kod ser efter du rättat till felaktigheterna i ditt första inlägg.

Kan du också ta en titt på Visa->Källa, eller motsvarande, i din webbläsare, och visa oss vad som skrivs ut av PHP-koden.

lillebrorMedlem sedan apr. 20041 597 inlägg
#16

Detta är kodstycket i index.php

<div style="font-family: 'Trebuchet'; padding: 5px 5px 5px 5px; width: 450px; color: #968E2E; font-weight: none; border-bottom: 0px solid #888; font-size: 18px;">» <a href="/online.php">Antal besökare:</a> <?php echo $RSobj_visitors['number'];?></div>	
		<div style="padding: 0px 5px 5px 5px; width: 458px; color: #7C7C7C; font-size: 11px;">
		<?php echo $RSobj_visitors['member']; if($RSobj_visitors['member'] > 1) { echo " medlemmar"; } else if ($RSobj_visitors['member'] == 0) { echo " medlemmar"; } else { echo " medlem"; } ?> och <?php echo $RSobj_visitors['guest']." "; if($RSobj_visitors['guest'] == 1) { echo "gäst"; } else if ($RSobj_visitors['guest'] <> 1 or $RSobj_visitors['guest'] == 0) { echo "gäster"; } ?>
   		</div>
		<div style="padding: 5px 5px 5px 5px; width: 458px; color: #000; font-size: 10px; margin-bottom: 15px;">
		<?php 
		$i=0;
		while($arrayl = mysql_fetch_array($RSobj_usersOnline)) { ?>
		<a href="showprofile.php?uid="<?php echo $arrayl['memberID']; ?>"><?php echo $arrayl['username']; ?></a>
		<?php if($i <> ($RSobj_visitors['number']-$RSobj_visitors['guest']-1)) { echo ", "; }
		$i++;
		} 
		?>
		</div>

Detta är SQL-satsen som används:

function showActiveMemberUser() {
	$sqlSelect = "SELECT t2.memberID, t2.username, t1.activity, DATE_FORMAT(t1.date_time, '%H:%i') AS datetime FROM tblonline AS t1, tblmember AS t2 WHERE t1.memberID = t2.memberID ORDER BY t1.date_time DESC";
	$RSobj = mysql_query($sqlSelect) or die (mysql_error());
	
	return $RSobj;
}

Ovan nämnda SQL-sats anropas från index.php och det ser ut så här och ligger högst upp i filen:

$RSobj_usersOnline = showActiveMemberUser();

:)

MatteMedlem sedan aug. 20002 975 inlägg
#17

Och hur ser då din genererade HTML-kod ut ?

lillebrorMedlem sedan apr. 20041 597 inlägg
#18
<div style="font-family: 'Trebuchet'; padding: 5px 5px 5px 5px; width: 450px; color: #968E2E; font-weight: none; border-bottom: 0px solid #888; font-size: 18px;">» <a href="/online.php">Antal besökare:</a> 1</div>	
		<div style="padding: 0px 5px 5px 5px; width: 458px; color: #7C7C7C; font-size: 11px;">
		1 medlem och 0 gäster   		</div>
		<div style="padding: 5px 5px 5px 5px; width: 458px; color: #000; font-size: 10px; margin-bottom: 15px;">
				<a href="showprofile.php?uid="">Fredrik</a>
				</div>
	
		</div>
MatteMedlem sedan aug. 20002 975 inlägg
#19

Innan din while-sats lägger du nu till följande:

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

Kör sedan om din kod.

Får du nu några felmeddelanden ?

lillebrorMedlem sedan apr. 20041 597 inlägg
#20

Följande kod får jag då, ser riktigt skumt ut!

Notice: Undefined index: memberID in /xxx/public_html/index.php on line 149
">Fredrik , Notice: Undefined index: memberID in /xxx/public_html/index.php on line 149
">Johan

Källkoden:


		<div style="font-family: 'Trebuchet'; padding: 5px 5px 5px 5px; width: 450px; color: #968E2E; font-weight: none; border-bottom: 0px solid #888; font-size: 18px;">» <a href="/online.php">Antal besökare:</a> 2</div>	
		<div style="padding: 0px 5px 5px 5px; width: 458px; color: #7C7C7C; font-size: 11px;">
		2 medlemmar och 0 gäster   		</div>
		<div style="padding: 5px 5px 5px 5px; width: 458px; color: #000; font-size: 10px; margin-bottom: 15px;">
				<a href="showprofile.php?uid="<br />
<b>Notice</b>:  Undefined index:  memberID in <b>/xxx/public_html/index.php</b> on line <b>149</b><br />
">Fredrik</a>
		, 		<a href="showprofile.php?uid="<br />
<b>Notice</b>:  Undefined index:  memberID in <b>/xxx/public_html/index.php</b> on line <b>149</b><br />
">Johan</a>
				</div>
	
		</div>
145 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
142 ms — hämta tråd, inlägg och bilagor (db)