Autor | Zpráva | ||
---|---|---|---|
paTaNiNho Profil |
#1 · Zasláno: 13. 8. 2012, 00:07:51
Dobrý den,
rád bych se podělil s mým problémem všem těm, kteří budou ochotni mi pomoci či mě aspoň navedou na správnou cestu. Jsem v programování spíše začátečník, ale pro svůj projekt potřebuji naprogramovat vlastní control panel pro mé budoucí zákazníky. Konkrétně se jedná o herní control panel, kde uživatel po přihlášení bude moci spravovat vlastní herní server (restartovat, vypínat, upravovat konfiguraci, apod.). Samotné přihlašování by problém být neměl, ale jde mi konkrétně o to, jak odliším jednotlivé uživatele po přihlášení od sebe, tedy, aby se jim po přihlášení objevila unikátní stránka s jeho vybranými službami. Počítám, že po přihlášení se z databáze zjistí jeho ID, pro které bude v další tabulce informace přesně o jeho službách, ale absolutně netuším, jak to svázat dohromady. Tedy, co by vše mělo v tabulce být, ale i v samotném PHP po přihlášení. . . Poradí mi někdo prosím? Všem ochotným předem děkuji a prosím, mějte se mnou trpělivost. |
||
Alphard Profil |
#2 · Zasláno: 13. 8. 2012, 00:20:05
Návodů na přihlášení se všude válí hromady, zkuste se podívat např. na Nejčastější potíže s PHP (FAQ) » Registrace uživatelů.
V zásadě stačí do tabulky v databázi uložit unikátní identifikátor a heslo. Identita uživatele se pak udržuje pomocí session. |
||
paTaNiNho Profil |
#3 · Zasláno: 14. 8. 2012, 20:13:39
Děkuji. . .s přihlášením problém nemám, jen nechápu, jak každému uživateli volat ten rozdílný obsah. . .šlo by to prosím případně přiblížit?
|
||
Alphard Profil |
#4 · Zasláno: 14. 8. 2012, 20:47:39
To s tím blízce souvisí. Přihlášený uživatel má nějaké unikátní id a na jeho základě lze zobrazit unikátní obsah, jak sám píšete. Já nevím, jaké informace přesně potřebujete, ale kdyby bylo možné uložit je do tabulky služeb, dal byste k nim sloupec
user_id a podle něho by se poznalo, ke komu daná služba patří.
|
||
paTaNiNho Profil |
#5 · Zasláno: 14. 8. 2012, 21:23:10
. . .děkuju, teoreticky to jako začátečník chápu, ale prakticky jsem malinko v rozpacích, možná chci moc, ale nebylo by možné přiblížit mi to pomocí kódu? Jsou to se mnou trable, já vím, ale dost by mě to snad napovědělo. . .
za případnou laskavost jsem Vám předem zavázán |
||
paTaNiNho Profil |
Tak už jsem se posunul dále, nyní PHP podle id přihlášeného pozná, kterou službu mu přiřadit a vypíše ji pomocí:
$server = mysql_query("select * from servers where userid = '".$_SESSION['id']."'"); while ($serverrow = MySQL_Fetch_Array ($server)): <tr> <td width="36%"><?php echo $serverrow ["hra"]; ?></td> <td width="25%"><?php echo $serverrow ["ip"]; ?></td> <td width="15%"><?php echo $serverrow ["port"]; $server_port = $serverrow ["port"]; ?></td> <td width="12%"> <?php $stream = ssh2_exec($spojeni,'/bin/sh '.$serverrow ["game_dir"].'./start_n check'); stream_set_blocking( $stream, true ); $data = ""; while( $buf = fread($stream,4096) ){ $data .= $buf; echo $data; } fclose($stream); ?> </td> <td width="12%" align="center"> <form method="post"> <table style="width:auto; background:#000;" border="0"><tr> <td><input type="submit" name="<?php echo "start".$serverrow ["id"]; ?>" value="START" /></td><td> //spuštění serveru <input type="submit" name="<?php echo "stop".$serverrow ["id"]; ?>" value="STOP" /></td></tr></table> //vypnutí serveru <?php echo "start".$serverrow ["id"];?> </form> </td> </tr> endwhile; name tlačítka proměnnou, která tlačítka při více službách na jednoho uživatele odlišně rozdělí podle ID např. (start1, start2, start4). Dále v kódu pak mám if(isset($_POST["start".$serverrow ["id"].""])){ , ale nevím co dál, tedy jak rozhodne co to je je za ID služby, aby si mohl vzít její nastavení cesty k spouštěcímu scriptu přímo na serveru.
Asi to zase tak těžké nebude, ale jako amatérovi mi to asi zatím nedochází, tak kdyby někdo tušil a snad se v mém textu aspoň trochu vyznáte vyznáte, ochotným patří mé dík. . . |
||
juriad Profil |
#7 · Zasláno: 16. 8. 2012, 22:14:50
princip je správně
rozlišení služeb můžeš vyřešit pomocí <input type="hidden" name="id" value="<?php echo $serverrow ["id"]; ?>"> a vlastní button bude obsahovat jen akci start/stop
používej jednotný styl: while {...} oproti while: ... endwhile;
|
||
paTaNiNho Profil |
#8 · Zasláno: 16. 8. 2012, 22:38:00
děkuji za upřesnění. . .ale moc mi to nenapovědělo, šlo by to ještě upřesnit?
. . .jak já potom v té podmínce pro kliknutí na button z databáze vytáhnu tu cestu, kterou potřebuji a je psána u každé služby, která je rozlišena ID omlouvám se, ale s začátečníkama je to asi těžké |
||
juriad Profil |
#9 · Zasláno: 17. 8. 2012, 09:50:02
přidej do
form (řádek 20) action="zpracujStartStop.php"
a v souboru zpracujStartStop.php budeš mít: <?php session_start(); if(!empty($_POST['id']) && (isset($_POST['start']) || isset($_POST['stop']))) { $id = intval($_POST['id']); // mozna jeste dalsi osetreni if(isset($_POST['start']) { // asi neco jako: $server = mysql_query("SELECT * FROM servers WHERE userid = '".$_SESSION['id']."' AND id = '".mysql_real_escape_string($id)."'"); // nezapomen na bezpecnost, never uzivateli, ze v $id bude jen cislo $serverrow = MySQL_Fetch_Array ($server); if($serverrow !== false) { // zkontroluje, jestli dotaz vratil alespon jeden radek // jeste napred by mohla byt kontrola, jestli je server zrovna vypnuty $stream = ssh2_exec($spojeni,'/bin/sh '.$serverrow ["game_dir"].'./start_n start'); ... } else { // chyba, takovy server neexistuje, vypsat tady chybu nema smysl vzhledem k nasledujicimu presmerovani // uloz si ji do SESSION a vypis na nasledujici strance } ... } else if(isset($_POST['stop']) { ... } else { // ted nikdy nenastane, ale treba muzes chtit skript rozsirit o dalsi akce } } else { // neplatny pozadavek, nejlepsi je asi ho uplne ignorovat } header("Location: index.php"); // akce zpracovana, presmeruj na vypis // kazde zpracovani POSTu musi koncit přesmerovanim, jinak by refresh odeslal data znovu je možné zpracovat akci přímo na stránce výpisu, ale je podle mě je vopruz přidávat všude podmínky |
||
paTaNiNho Profil |
děkuji za vyčerpávající odpověď, určitě to podle návodu nějak zpracuji. . .
chtěl bych se zeptat, zdali s tím nemáte někdo zkušenost, ale ještě v samotném statusu serveru (vypisuje voláním scriptu na serveru, zdali je online či offline) - zde: <td width="12%"> <?php $stream = ssh2_exec($spojeni,'/bin/sh '.$serverrow ["game_dir"].'./start_n check'); stream_set_blocking( $stream, true ); $data = ""; while( $buf = fread($stream,4096) ){ $data .= $buf; echo $data; } fclose($stream); ?> </td> $data .= $buf; přidal podmínku, která zjistí, co exec vypsal a uživateli to ukáže malinko hezčeji (prozatím bez .css):
if ($data == "online") { echo '<strong><font color="#00CC00">Online</font></strong>'; } else { echo '<strong><font color="#FF0000">Offline</font></strong>'; } } exec asi zapíše výstup do $data jinak než jen "online" , i když ve scriptu na serveru mám jen echo "online" či echo "offline" , ukazuje to stále Offline, i když je server zapnutý.
Nemáte s tím zkušenosti? |
||
juriad Profil |
#11 · Zasláno: 17. 8. 2012, 12:15:10
domněnka:
echo automaticky odřádkuje, mohl by přebývat new line zkus pomocí strlen zjistit skutečnou délku řetězce (jestli neobsahuje nějaký bordel), nebo použij regulární výrazy či dotaz na podřetězec (strpos )
if(strpos($data, "online") !== false) { // online } else { // offline } pro výpis použij raději: echo '<span class="online">Online</span>'; .online { font-weight: bold; color: #00cc00; } |
||
paTaNiNho Profil |
#12 · Zasláno: 17. 8. 2012, 12:31:18
nezbývá mi nic jiného než poděkovat a oznámit, že jsi FRAJER. . .všechny Tebou poznamenané scripty fungují na jedničku a mě nezbývá nic jiného než se učit a učit, děkuji a kdybych se zase někde zasekl s dovolením se ozvu
|
||
Časová prodleva: 12 let
|
0