Autor Zpráva
Nich
Profil
  
  $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
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
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 *
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
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
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
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
soráč s tým poľom, už som unavený, idem radšej spať kým netresnem dačo horšie :))
Sicario
Profil *
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
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
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
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()
LucaS
Profil *
in_array je case-sensitive, neni problem treba tady? Nevi "vorel" jako "Vorel" ;-)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0