SQL lekérdezés PHP-ben
Egy rövid példán keresztül azt fogom szemléltetni, hogyan tudsz egy adatbázis adott táblájából adatokat lekérdezni, és ezeket kiírni php segítségével.
Tegyük fel, hogy van egy ‘users’ nevű táblád amely a weboldal felhasználóit tárolja, abban a következő mezők: id, name, e-mail, active (1 vagy 0).
A táblában lévő felhasználók neveit így tudod kiírni:
1 2 3 4 5 6 7 8 9 10 11 | $q = mysql_query("SELECT * FROM users"); while($adat = mysql_fetch_object($q)){ echo $adat->name."<br/>"; } /* Kimenet: Béla József Károly Elemér */ |
A táblában lévő aktív felhasználók neveit így tudod kiírni:
1 2 3 4 5 6 7 8 9 | $q = mysql_query("SELECT * FROM users where active=1"); while($adat = mysql_fetch_object($q)){ echo $adat->name."<br/>"; } /* Kimenet: Béla Elemér */ |
A táblában lévő felhasználók név szerint növekvő sorrendben, e-mail címük megjelenítésével:
1 2 3 4 5 6 7 8 9 10 11 12 | $q = mysql_query("SELECT * FROM users ORDER BY name ASC"); while($adat = mysql_fetch_object($q)){ echo $adat->name.":".$adat->email."<br/>"; } /* Kimenet: Béla: bela@valami.hu Elemér: elemer@valami.hu József: jozsef@valami.hu Károly: karoly@valami.hu */ |
Ez egy egyszerű példa. Ha segítségre van szükséged kérdezz!!!

Üdv!
Segítséget szeretnék kérni egy PHP idő számítással kapcsolatban.
Két dolgot nem tudok megoldani egy online időt számoló képletet (van egy képletem ami működött egy darabig kb egy évvel ezelőttig és már nem. meg kerestem az eredeti scriptet is de az sem megy.)
Nagyon hálás-lennék ha tudnál valami tippet adni mi lehet a baj. Vagy esetleg valami alternatívát. A bejövő adat másodperc ebből kellene kiszámolnia egy idő-t (sec, min, day, month, year).
Bemásolom a script részletet. Ez a rész dolgozza fel az adatokat a MySQL-ből.->
$i=1;
while ($row1 = mysql_fetch_row($result1))
{
$time1 = $row1[2]/86400;
$time2 = round($time1,4);
$time3 = bcdiv($time2,1,0); //Tage
$time4 = $time2-$time3; //Übrige Zeit
$time5 = $time4*86400;
$time6 = $time5/3600;
$time7 = round($time6,2);
$time8 = bcdiv($time7,1,0); //Stunden
$time9 = $time7-$time8; //Übrige Zeit
$timea = $time9*3600;
$timeb = $timea/60;
$timec = round($timeb,1);
$timed = bcdiv($timec,1,0); //Minuten
if($time3 >= ’2′) {
$day = ‘Days’; }
else {
$day = ‘Day’; }
if($time8 >= ’2′) {
$hour = ‘Hours’; }
else {
$hour = ‘Hour’; }
if($timed >= ’2′) {
$min = ‘Mins’; }
else {
$min = ‘Min’; }
if($row1[3] >= ’1′) {
$result2 = mysql_query(“SELECT `clan_name` FROM `clan_data` WHERE `clan_id` = ‘$row1[3]‘”) or die(mysql_error());
$row2 = mysql_fetch_row($result2);
$clan_name = “$row2[0]“;
} else {
$clan_name = ‘No Clan’;
}
if($row1[4] >= ’0′) {
$race = array(’0′ => “Human”, ’1′ => “Elf”, ’2′ => “D. Elf”, ’3′ => “Orc”, ’4′ => “Dwarf”, ’5′ => “Kamael”);
}
echo “”;
echo “$i”;
echo “$row1[0]“;
echo “$row1[1]“;
echo “$clan_name”;
echo “”.$race[$row1[4]].”";
echo “$time3 $day $time8 $hour $timed $min”;
echo “”;
$i++;
}
Köszi előre is a segítséged!
Üdv,
Zsolt
@Zsolt
Szia Zsolt,
van hibaüzenet?
Üdv,
Nem kapok hiba üzenetet Kiírja az oszlop neveket és ennyi nincs látható hiba.
Legalábbis nem találtam.
Gondoltam rá lehet PHP hiba lefrissítettem de továbbra sem megy.
http://lionna.sytes.net/stat/top/bartz/toplist/level.php
Ennyi történik.
@Zsolt
Szia Zsolt,
a $result1 -enek van értéke? Szerintem be sem lép a while ciklusba.
A $result1 -hez tartozó SQL lekérdezést bemásolod ide? Lehet hogy adatbázisba felellene vinned időpontokat…
csatlakozik a DB hez, mert ha kiveszem az idő számító képletet felsorolja az adatokat. sőt ha csak a $row1[2] beírom a kimenet hez akkor kiírja a másodperceket.
Csináltam egy tesztet, kitöröltem a
$time1 = $row1[2]/86400;
$time2 = round($time1,4);
után lévő sorokat és a time2 ig eljut.
De bemásolom az egész scriptet a db csati nélkül, az a tuti
///////////////////////////////////////////////////////////////////////////////////////////////////////
$result = mysql_query(“SELECT * FROM `characters` WHERE `accesslevel` = ’0′ “) or die(mysql_error());
$row = mysql_num_rows($result);
if($row <= '0') {
echo "There are no characters registerd.”;
}
else {
$result1 = mysql_query(“SELECT `char_name`,`level`,`clanid`,`race`,`exp`,`online`,`onlinetime` FROM `characters` WHERE `accesslevel` = ’0′ ORDER by `exp` DESC limit $rich_limit”) or die(mysql_error());
echo “”;
echo “Pos.”;
echo “Char. Name”;
echo “Level”;
echo “Online Time”;
echo “Race”;
echo “Clan”;
echo “Status”;
echo “”;
$i=1;
while ($row1 = mysql_fetch_row($result1))
{
//race start
if($row1[3] >= ’1′) { $race = array(’0′ => “Human”, ’1′ => “Elf”, ’2′ => “D. Elf”, ’3′ => “Orc”, ’4′ => “Dwarf”, ’5′ => “Kamael”); }
//race end
//Clandata Start
if($row1[2] >= ’1′)
{
$result2 = mysql_query(“SELECT `clan_name` FROM `clan_data` WHERE `clan_id` = ‘$row1[2]‘”) or die(mysql_error());
$row2 = mysql_fetch_row($result2);
$clan_name = “$row2[0]“;
}
else { $clan_name = ‘No Clan’; }
//calndata end
//Onlinestauts Start
$onli = array(’0′ => “Offline”, ’1′ => “Online”, ’2′ => “Trade” );
//Onlinestatus End
$time1 = $row1[6]/86400;
$time2 = round($time1,4);
$time3 = bcdiv($time2,1,0); //Tage
$time4 = $time2-$time3; //Übrige Zeit
$time5 = $time4*86400;
$time6 = $time5/3600;
$time7 = round($time6,2);
$time8 = bcdiv($time7,1,0); //Stunden
$time9 = $time7-$time8; //Übrige Zeit
$timea = $time9*3600;
$timeb = $timea/60;
$timec = round($timeb,1);
$timed = bcdiv($timec,1,0); //Minuten
if($time3 >= ’2′)
{$day = ‘Days’; }
else {$day = ‘Day’; }
if($time8 >= ’2′)
{$hour = ‘Hours’; }
else {$hour = ‘Hour’; }
if($timed >= ’2′)
{$min = ‘Mins’; }
else {$min = ‘Min’; }
echo “”;
echo “$i”;
echo “$row1[0]“;
echo “$row1[1]“;
echo “$time3, $time8, $timed”;
echo “”.$race[$row1[3]].”";
echo “$clan_name”;
echo “”.$onli[$row1[5]].”";
echo “”;
$i++;
}
echo “”;
mysql_close();
}
?>
@Zsolt
A characters táblában van olyan sorod,a hol a accesslevel==0 val?
kb 13
a bcdiv nél nem jön vissza érték valamiért
úgy vettem észre
@Zsolt
Ha a $time8 = bcdiv($time7,1,0); //Stunden
helyett manuálisan adod meg az értéket, pl:
$time8 = 10;
Akkor jó?
ha kiveszem a bcdiv et
így
$time1 = $row1[6]/86400;
$time2 = round($time1,4);
$time3 = $time2; //Tage
$time4 = $time2-$time3; //Übrige Zeit
$time5 = $time4*86400;
$time6 = $time5/3600;
$time7 = round($time6,2);
$time8 = 10; //Stunden
$time9 = $time7-$time8; //Übrige Zeit
$timea = $time9*3600;
$timeb = $timea/60;
$timec = round($timeb,1);
$timed = $timec; //Minuten
Akkor műkszik igaz nem jól de megy
manuális értékekkel is működik
Szia,
bocs, a késői válaszért, csak elutaztam.
sikerült megoldani?
A $time8 = bcdiv($time7,1,0); //Stunden sor előtt, a time7-nek van értéke? Ha igen mi?
Hali igen van értéke Jelenleg time7=time8
kivettem a bcdiv et és a paramétereit.
Igaz mivel elég kicsi az értéke ezért 0 órát ír
http://lionna.sytes.net/stat/top/bartz/toplist/level.php
fura…
igen mert eddig akár hány féleképp próbáltam linux alatt apache vagy windows alatt akkor is ugyan ez.
Nem-tudom előfordulhat-e, hogy hibás a php beállítás vagy ilyesmi.
Esetleg: Az idő a szerveren jól van beállítva?
aha
Szia!
Megoldódott a probléma, hiányzott a bcmath a php ból. php5-bcmath néven találtam meg. Felrakta a linux software updater és működik.
Köszi az infókat azért.
Ennek örülök.