Rinox Skrevet 20. mai 2007 Del Skrevet 20. mai 2007 Hei Jeg har et lite problem i PHP nå. Se først på denne koden: $getuser = mysql_query("SELECT * from fight_list order by id asc"); while ($user = mysql_fetch_array($getuser)) { echo '<a href="index.php?side=fightlist&brukernavn=' . $user['username'] . '">' . $user['username'] . '</a><br />'; } Der hvor det står echo og så html-koder skrives ikke linken ut, men <br /> virker fint.. Noen som vet hva dette kan komme av? Lenke til kommentar
Ståle Skrevet 20. mai 2007 Del Skrevet 20. mai 2007 Sikker pa at username finnes i tabellen? Og at det star noe i den? Lenke til kommentar
Crowly Skrevet 20. mai 2007 Del Skrevet 20. mai 2007 legg til echo "<pre>".print_r($user)."</pre>"; før du skriver uten linken, da skulle du få en grei sjekk på hva som ligger i de forskjellige feltene. Da den bort når ting fungere som det skal. Lenke til kommentar
Rinox Skrevet 20. mai 2007 Forfatter Del Skrevet 20. mai 2007 Nå fant jeg feilen! Jeg har ikke username i den tabellen, men jeg har et felt som heter "id", det er brukernes id. Men da sliter jeg fortsatt litt. Jeg har brukernavn i users-tabellen, men hvordan skal jeg kunne gjøøre slik at brukernavn skrives ut på skjermen. Slik at alle brukernavn i users som har sin id i fight_list-tabellen blir listet opp? Noen som vet det? Lenke til kommentar
Crowly Skrevet 20. mai 2007 Del Skrevet 20. mai 2007 (endret) SELECT t2.username, t1.noe, t1.noe_annet FROM brukernavn_tabell t2, fight_list t1 WHERE t2.id=t1.id GROUP BY t1.id ORDER BY t1.id asc Noe slikt, er ikke sikkert at du trenger GROUP BY, hadde vært enklere om jeg hadde sett tabell definisjonene. Jeg forutsetter at Id i brukernavn tabellen er lik id i fight_list, hvis ikke så må du bytte det ut med noe som knytter de to tabellene sammen. Endret 20. mai 2007 av crowly Lenke til kommentar
Rinox Skrevet 20. mai 2007 Forfatter Del Skrevet 20. mai 2007 Men hva skal det stå der du har skrevet t1.noe, t1.noe_annet ? Lenke til kommentar
Runar0 Skrevet 20. mai 2007 Del Skrevet 20. mai 2007 Det bytter du ut med felt som du ønsker å liste opp. Eks t1.user_id Lenke til kommentar
Martin A. Skrevet 20. mai 2007 Del Skrevet 20. mai 2007 SELECT t2.username, t1.noe, t1.noe_annet FROM brukernavn_tabell t2, fight_list t1 WHERE t2.id=t1.id GROUP BY t1.id ORDER BY t1.id asc Noe slikt, er ikke sikkert at du trenger GROUP BY, hadde vært enklere om jeg hadde sett tabell definisjonene. Jeg forutsetter at Id i brukernavn tabellen er lik id i fight_list, hvis ikke så må du bytte det ut med noe som knytter de to tabellene sammen. 8653020[/snapback] Den der fungerer vel ikke særlig bra? Bør vel heller bruke noe ala Add Join. SELECT u*, f.* FROM fight_list f, LEFT JOIN users u ON (u.id=f.id) WHERE u.id=ID Denne koden henter alt fra fight_list og users. Lenke til kommentar
Rinox Skrevet 20. mai 2007 Forfatter Del Skrevet 20. mai 2007 Da fikk jeg denne feilmeldingen: Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource Jeg la til or die(mysql_error()) og da kom denne her: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' f.* FROM fight_list f, LEFT JOIN users u ON (u.id=f.id) WHERE u.id=ID' at line 1 Koden min: $getuser = mysql_query("SELECT u*, f.* FROM fight_list f, LEFT JOIN users u ON (u.id=f.id) WHERE u.id=ID"); while ($user = mysql_fetch_array($getuser) or die(mysql_error())) { echo ("<a href='index.php?side=fightlist&brukernavn=$user[username]'>$user[username]</a><br />"); } Vet noen hva dette kommer av? Hvordan fikses det? Lenke til kommentar
-morten Skrevet 20. mai 2007 Del Skrevet 20. mai 2007 M4rTiN: Spørringene deres gjør i praksis akkurat det samme, bare at i crowly sin skal ikke GROUP BY være med, og i din skal ikke WHERE være med. Rinox: SELECT u.*, f.* FROM fight_list f, users u WHERE f.id = u.id Og du må ha echo "blahblah {$user['username']} lalal"; eller echo "blahbah" . $user['username'] . "llala"; Sånn du har det nå fungerer innimellom, men er egentlig feil. Lenke til kommentar
Crowly Skrevet 20. mai 2007 Del Skrevet 20. mai 2007 (endret) Klikk for å se/fjerne innholdet nedenfor SELECT t2.username, t1.noe, t1.noe_annet FROM brukernavn_tabell t2, fight_list t1 WHERE t2.id=t1.id GROUP BY t1.id ORDER BY t1.id asc Noe slikt, er ikke sikkert at du trenger GROUP BY, hadde vært enklere om jeg hadde sett tabell definisjonene. Jeg forutsetter at Id i brukernavn tabellen er lik id i fight_list, hvis ikke så må du bytte det ut med noe som knytter de to tabellene sammen. 8653020[/snapback] Den der fungerer vel ikke særlig bra? Bør vel heller bruke noe ala Add Join. SELECT u*, f.* FROM fight_list f, LEFT JOIN users u ON (u.id=f.id) WHERE u.id=ID Denne koden henter alt fra fight_list og users. 8653461[/snapback] WHERE t2.id=t1.id blir det samme som LEFT JOIN users u ON (u.id=f.id), men jeg tror LEFT JOIN er litt mer spesifikk for kolonne plassering eller noe slikt, har ikke satt meg inn i JOIN funksjonene til Mysql, er vant med Sql i Oracle og hittil så har det stortsett fungert greit for meg, men noe nytt må jeg ha lært meg Ellers så er det jo bare å teste, det værste som kan skje er at det ikke fungerer Edit: Noen kom meg i forkjøpet med ett bedre svar Endret 20. mai 2007 av crowly Lenke til kommentar
Rinox Skrevet 20. mai 2007 Forfatter Del Skrevet 20. mai 2007 Takk, dere Nå ble det fikset! Lenke til kommentar
Rinox Skrevet 20. mai 2007 Forfatter Del Skrevet 20. mai 2007 Nå har jeg enda et lite problem med det samme scriptet mitt... Nå ser koden slik ut: Klikk for å se/fjerne innholdet nedenfor if (!$_GET['brukernavn']) { $getuser = mysql_query("SELECT u.*, f.* FROM fight_list f, users u WHERE f.id = u.id"); while ($user = mysql_fetch_array($getuser)) { echo ("<a href='index.php?side=fightlist&brukernavn=$user[username]'>$user[username]</a> , "); } } else { $motstanderSporring = mysql_query("SELECT `id` FROM `users` WHERE `username` = '" . $_GET['brukernavn'] . "'"); $motstanderObj = mysql_fetch_object($motstanderSporring); $motstander_id = $motstanderObj->id; switch($_GET[act]) { case 'sloss': $motstanderInfo = mysql_fetch_array(mysql_query("SELECT * FROM fight_info WHERE id = " . $motstander_id)); $brukerInfo = mysql_fetch_array(mysql_query("SELECT * FROM fight_info WHERE id = " . $bruker_id)); if ($brukerInfo['level'] > $motstanderInfo['level']) { //bruker vinner' echo("du vant."); } elseif ($brukerInfo['level'] == $motstanderInfo['level']) { //Like sterke i level, prosent teller echo("likt"); if ($brukerInfo['percent'] > $motstanderInfo['percent']) { //bruker vinner echo("wg"); } elseif ($brukerInfo['percent'] == $motstanderInfo['percent']) { //like sterke, tilfeldig trekning echo("sfdh"); } else { //bruker taper echo("ffff"); } } else { //bruker taper echo("taper!"); } echo("ehbtegtrheth"); break; } $getuser = mysql_query("SELECT * from fight_list"); $usernum = mysql_num_rows($getuser); if ($usernum == 0) { echo ("<b>Brukeren er ikke lenger klar for sverdkamp!</b>"); } else { if ($_GET['brukernavn'] == $logged['username']) { echo ("<b>Du kan ikke angripe deg selv. Velg en annen spiller.</b>"); } else { $bet = mysql_fetch_array(mysql_query("SELECT * FROM fight_list WHERE id = " . $motstander_id)); echo("For å slåss mot " . $_GET['brukernavn'] . " må du vedde " . $bet['bet'] . " kroner.<b />"); echo("<form action='?side=fightlist&go=fightlist&act=sloss' method='post'><input type='submit' name='submit' value='Sloss om " . $bet['bet'] . " kroner'></form>"); } } } Etter jeg har sendt det skjemaet hvor det står: "For å sloss mot blablabla må du vedde blablabla kroner" så skjer ingenting av det som skal skje i casen "sloss".... Noen som vet hva som kan være problemet? Alt er helt vanlig... Lenke til kommentar
Ståle Skrevet 20. mai 2007 Del Skrevet 20. mai 2007 Far du ikke ut echo("ehbtegtrheth"); heller? Prov: switch($_GET['act']) Lenke til kommentar
Rinox Skrevet 20. mai 2007 Forfatter Del Skrevet 20. mai 2007 (endret) Hjelper ikke... Kanskje det er fordi at et annet sted i koden som jeg ikke har vist dere så bruker jeg også switch($_GET[act]). Går det ikke ann å bruke to like på forskjellige steder? EDIT: Nei, Ståle, jeg får ikke ut noe av det... Endret 20. mai 2007 av Rinox Lenke til kommentar
Martin A. Skrevet 20. mai 2007 Del Skrevet 20. mai 2007 Foreslår heller at du binder case'ene til en eller flere funksjoner PHP <?phpswitch ( $_GET['act'] ) { case 'sloss': dothis(); dothat(); } ?> Men siden du kun har en case, hvorfor ikke ta det i en if istede? if ( $_GET['act'] == 'sloss' ). En annen debugmulighet man har er å printe ut linjenummeret. PHP <?phpecho __LINE__ . "<br />"; //Litt kode echo __LINE__ . "<br />"; //enda mer kode echo __LINE__ . "<br />"; ?> Putt denne før og etter alle if'er feks. Så finner man lettere ut hvor saker og ting stopper opp. Lenke til kommentar
Rinox Skrevet 21. mai 2007 Forfatter Del Skrevet 21. mai 2007 Foreslår heller at du binder case'ene til en eller flere funksjoner PHP <?phpswitch ( $_GET['act'] ) { case 'sloss': dothis(); dothat(); } ?> Men siden du kun har en case, hvorfor ikke ta det i en if istede? if ( $_GET['act'] == 'sloss' ). Skjønte ikke helt hva du mente her... Kan du forklare litt nærmere? Lenke til kommentar
Ståle Skrevet 21. mai 2007 Del Skrevet 21. mai 2007 Det er ikke vits med switch() hvis du bare skal ha en case. Da er det like greitt a bruke if() sa du bor ha if ( $_GET['act'] == 'sloss' ) istedenfor switch ( $_GET['act'] ) (ogsa endre resten av switch()en ogsa) Lenke til kommentar
Rinox Skrevet 21. mai 2007 Forfatter Del Skrevet 21. mai 2007 Nei, men jeg har andre caser også, bare at jeg tok de vekk fra den koden Lenke til kommentar
Ståle Skrevet 21. mai 2007 Del Skrevet 21. mai 2007 Jeg har testet case-en, og det blir ihvertfall outputtet noe. Det eneste jeg kan tenke meg er at du ikke har ?act=sloss.... men det ville jo vaere... Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå