Autor | Zpráva | ||
---|---|---|---|
Nich Profil |
#1 · Zasláno: 8. 11. 2008, 20:28:53
$nick = $_SESSION['nick']; $opakovat = 0; $sql_players = mysql_query("SELECT host, player_1, player_2 FROM host"); while ($players = mysql_fetch_assoc($sql_players)) { if (!in_array('$nick', $players)) { if ($opakovat != 1) { $sql_hosts = ("SELECT host,player_1,player_2 FROM host"); $result = mysql_query($sql_hosts); echo "<br />Založené hry:<br /><br />"; while ($row = mysql_fetch_assoc($result)) { echo "tralala"; $opakovat = 1; } } } } Samozřejmě tenhle scriptík nefaká.... problém je, že tahle podminka if (!in_array('$nick', $players)) neodfiltruje toho kdo už je v DB uloženej... např. v DB je ve sloupci host uloženy "vorel" ..... a když $nick = "vorel" tak prostě if (!in_array) to neodfiltruje.... a já právě chci aby to přes podmínku prošlo pokud v DB host="vorel" nebude a odfiltrovalo pokud bude.... nevíte někdo kde je chybka pls? |
||
Alphard Profil |
#2 · Zasláno: 8. 11. 2008, 20:49:12
kdo vás učil dávat proměnné bezdůvodně do uvozovek?
občas zde na diskusi vidím tohle, nevím, kam na to lidi chodí if (!in_array("$nick", $players)) { je to nesmyslné, ale ještě funguje, vy jste to vylepšil apostrofama if (!in_array('$nick', $players)) { mezi němi se ale nenahrazují proměnné a hledá se řetězec $nick, který samozřejmě není nalezen |
||
Nich Profil |
#3 · Zasláno: 8. 11. 2008, 20:59:24 · Upravil/a: Nich
No ja sem samouk... a chybama se clovek uci.... , ale každopádně to pořád nefiltruje ani bez těch apostrofů .... tak sem zas tam kde se byl :-)
|
||
Sicario Profil * |
#4 · Zasláno: 8. 11. 2008, 23:05:00
Mno, to co se snazis vyresit na urovni PHP by se spis melo vyresit na urovni SQL. Mirne bych upravil tento dotaz.
[/pre] $sql_players = mysql_query("SELECT host, player_1, player_2 FROM host WHERE NOT player_1 = '$nick' OR NOT player_2 = '$nick' OR NOT host = '$nick'"); V nasledujicim cyklu tak bude zbytecna podminka if (!in_array('$nick', $players)). Vice o WHERE v ref. |
||
Nich Profil |
#5 · Zasláno: 9. 11. 2008, 00:11:45 · Upravil/a: Nich
„Mno, to co se snazis vyresit na urovni PHP by se spis melo vyresit na urovni SQL. Mirne bych upravil tento dotaz. “
Nevím jestli jsem to dostatečně vysvětlil nebo jestli jsi mě špatně pochopil.... ale ta podmínka tam musí každopádně být, prtž. do $sql_players[] buď dostanu nějaký hodnoty nebo ne.... no a ty pak potřebuju ověřit.....takže např. //připojí se někdo s nickem "vorel" $nick = "vorel"; //V tabulce host ten SELECT nic nenajde, prtž. není "vorel" uloženej v žádným sloupci(host, player_1, player_2) .... takže se do pole $sql_players[] uloží tyto hodnoty $sql_players[host] = ""; $sql_players[player_1] = ""; $sql_players[player_2] = ""; //No a potom to je jednoduše ověřím v cyklu podmínkou ( Pokud nebyl $nick nalezen nikde v tabulce host tak se uděla něco.... ) if ($players[host] == "" && $players[player_1] == "" && $players[player_1] == "") { $neco = do_neco() } Tohle bych chtěl udělat..... ale bohužel ani tenhle poupravenej (snad k lepšímu) script nefunguje .... nevíte někdo pls proč? :D |
||
el mariachi Profil |
#6 · Zasláno: 9. 11. 2008, 01:12:24 · Upravil/a: el mariachi
Nich, skúšal si použiť miesto mysql_fetch_assoc obyčajné mysql_fetch_array ? máš konkrétny dôvod pre použitie asociatívneho poľa ?
inak hentá premená samozrejme v úvodzovkách nemôže byť, ale na to ťa už upozornili :) a okrem toho, toto by sa dalo naozaj vyriešiť použitím čisto SQL ;) ak teda správne chápem čo chceš... zisťovať, či sa nachádza nejaké meno z jednej tabuľky aj v druhej... |
||
joe Profil |
#7 · Zasláno: 9. 11. 2008, 01:32:19
Nich
Vyzkoušej si vložit dotaz, který předáváš do mysql_query od Sicario v phpMyAdminu, schválně co ti vrátí. Opravdu to řešíš zbytečně pomocí PHP, když to umožňuje samotná databáze. el mariachi A ty máš nějaký důvod používat mysql_fetch_array místo mysql_fetch_assoc? Napiš mi nějaký, rád bych se přiučil :) |
||
el mariachi Profil |
#8 · Zasláno: 9. 11. 2008, 01:47:03
soráč s tým poľom, už som unavený, idem radšej spať kým netresnem dačo horšie :))
|
||
Sicario Profil * |
#9 · Zasláno: 9. 11. 2008, 10:18:31
Nich
K tvemu konkretnimu reseni doporucuji print_r($players) pred ten if... Tim zjistis jestli je v te podmince chyba:-) Ad. reseni na urovni SQL. Nedoporucuje se pouziti mysql_query v cyklu - pokud to neni nezbytne nutne. // Ted nemuzu najit zadny zdroj, ktery podpira moje tvrzeni:-) // Pokud bych chtel vytvorit skript s podminkou KDYZ hrac 'vorel' NENI v tabulce hracu PAK udelej_neco();, postupoval bych nasledovne: $nick = 'vorel' list($pocet) = mysql_fetch_array(mysql_query("SELECT count(*) AS `0` FROM host WHERE '$nick' NOT IN (player_1, player_2, host)")); if (!$pocet){ // 'vorel' neni v tabulce hracu $neco = do_neco(); } |
||
Nich Profil |
#10 · Zasláno: 9. 11. 2008, 12:16:18
joe
No tak jsem to teda zkusil dat do phpMyadmina a právě tam byl kámen urázu.... když jsem měl WHERE NOT player_1 = '$nick' OR NOT player_2 = '$nick' OR NOT host = '$nick' ..... a $nick např. "vorel", a ten v DB byl, tak to označilo všechny pole v tabulce včetně pole "vorel" .... no a podle mě to NOT má zaručit, aby to prostě to "vorel" neoznačilo ...... takže jsem udělal menší změnu upravil jsem ten SELECT takhle : SELECT host, player_1, player_2 FROM host WHERE player_1 = '$nick' OR player_2 = '$nick' OR host = '$nick' prostě jsem oddělal ty NOT u toho WHERE ..... takže SELECT potom hledá jestli je někde "vorel" no a ten v DB je takže $players[host] = "vorel" ..... no a potom stačí udělat podmínku na to jestli $players[host] obsahuje něco..... v našem příkladě "vorel" tak to nic neuděla Ale pokud by SELECT hledal $nick = "vrana" , která v DB není tak $players[host] = "" ...... no a podmínka zjistí, že $players[host] je prázdný, takže to přes podmínku projde..... A tady je na to script: //Vyberu host, player_1, player_2 z tabulky host jen tam kde se host, player_1, player_2 = $nick (vorel,vrana) $sql_players = mysql_query("SELECT host, player_1, player_2 FROM host WHERE player_1 = '$nick' OR player_2 = '$nick' OR host = '$nick'"); echo "Cyklus se ještě nespustil<br />"; //Začnu plnit $players hodnotama z tabulky while ($players = mysql_fetch_assoc($sql_players)) { echo "Cyklus se už spustil<br />"; //Ověřuju jestli: // a) se $nick něčemu v tabulce rovnal ---> podmínka ho odfiltruje // b) se $nick ničemu v tabulce nerovnal -> podmínka ho pustí dál if ($players[host] == "" && $players[player_1] == "" && $players[player_1] == "") { echo "Jsem za podmínkou<br />"; } } No, ale nechápu proč to nefunguje.... prtž. v případě $nick="vorel" to vyplivne "Cyklus se už spustil" což je správně (podmínka ho nepustila dál), ale v případě $nick="vrana" to vyplivne "Cyklus se ještě nespustil" a dál už nic ..... nějak nemůžu přijít na to, proč se ten while nechce rozběhnout.... pls help :-( |
||
Nich Profil |
#11 · Zasláno: 9. 11. 2008, 12:28:19 · Upravil/a: Nich
Sicario
$players = mysql_fetch_assoc(mysql_query("SELECT host, player_1, player_2 FROM host WHERE player_1 = '$nick' OR player_2 = '$nick' OR host = '$nick'")); Stacilo pouzit misto cyklu mysql_fetch_assoc přímo a už všecko funguje jak má..... MOC VŠEM DĚKUJI za pomoc a hlavně tobě Sicario ..... mysql_fetch_array(mysql_query()) .... to sem odkoukal od tvojeho posledního scriptíku :-) ještě jednou díky ;-) |
||
joe Profil |
#12 · Zasláno: 9. 11. 2008, 14:56:19
Nich
Do phpMyAdminu ale musíš vložit až "zpracovaný dotaz". Tzn, že tam nesmíš mít proměnné php, ale už je musíš mít dosazené... To je první chyba. Další "chyba" je použití mysql_fetch_array(), protože to je zbytečný. Používej příště raději mysql_fetch_assoc() |
||
Časová prodleva: 8 dní
|
|||
LucaS Profil * |
#13 · Zasláno: 17. 11. 2008, 11:41:27
in_array je case-sensitive, neni problem treba tady? Nevi "vorel" jako "Vorel" ;-)
|
||
Časová prodleva: 17 let
|
0