Bejárat > PHP programozás > SQL lekérdezés PHP-ben

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!!!

Categories: PHP programozás Tags:
  1. Zsolt
    december 17th, 2011 17:36-nél | #1

    Ü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

  2. december 17th, 2011 21:54-nél | #2

    @Zsolt
    Szia Zsolt,

    van hibaüzenet?

  3. Zsolt
    december 18th, 2011 19:45-nél | #3

    Ü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.

  4. december 18th, 2011 20:36-nél | #4

    @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…

  5. Zsolt
    december 18th, 2011 20:43-nél | #5

    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();

    }
    ?>

  6. december 18th, 2011 20:47-nél | #6

    @Zsolt
    A characters táblában van olyan sorod,a hol a accesslevel==0 val?

  7. Zsolt
    december 18th, 2011 21:05-nél | #7

    kb 13

  8. Zsolt
    december 18th, 2011 21:12-nél | #8

    a bcdiv nél nem jön vissza érték valamiért
    úgy vettem észre

  9. december 18th, 2011 21:18-nél | #9

    @Zsolt
    Ha a $time8 = bcdiv($time7,1,0); //Stunden
    helyett manuálisan adod meg az értéket, pl:
    $time8 = 10;

    Akkor jó?

  10. Zsolt
    december 18th, 2011 21:24-nél | #10

    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

  11. Zsolt
    december 18th, 2011 22:05-nél | #11

    manuális értékekkel is működik

  12. december 21st, 2011 02:23-nél | #12

    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?

  13. Zsolt
    december 21st, 2011 20:47-nél | #13

    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

  14. december 22nd, 2011 00:17-nél | #14

    fura…

  15. Zsolt
    december 28th, 2011 07:51-nél | #15

    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.

  16. december 28th, 2011 22:31-nél | #16

    Esetleg: Az idő a szerveren jól van beállítva?

  17. Zsolt
    december 29th, 2011 16:07-nél | #17

    aha

  18. Zsolt
    február 5th, 2012 23:30-nél | #18

    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.

  19. február 5th, 2012 23:32-nél | #19

    Ennek örülök.

  1. Még nincsenek visszakövetések