Thor. Skrevet 31. juli 2008 Del Skrevet 31. juli 2008 Jeg spiller tribalwars (Norsk server 1) og har fått ansvaret for et forum hvor tre stammer (gjenger) holdes samlet. Vi har et behov for å bruke bbkoder når vi snakker om ting som skjer i spillet men jeg får ike til dette helt. Jeg har funnet noe halvferdig som vistnok skulle gjøre jobben. Her er et eksempel: Updateplayer.php <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Update Players Database</title> </head> <body> <?php //connect to db $dbhost = 'localhost'; $dbuser = '**'; //Change it to your DB User name $dbpass = '**'; //Change it to your DB password mysql_connect($dbhost, $dbuser, $dbpass); $dbname = '**'; //Change it to your DB Name mysql_select_db($dbname); echo "Clearing Database... "; mysql_query("TRUNCATE players;"); echo "Done! <br />"; $lines = file('http://no1.tribalwars.no/map/tribe.txt'); if(!is_array($lines)) die("File could not be opened"); echo "Updating Players Database... "; foreach($lines as $line) { list($id, $name, $ally, $villages, $points, $rank) = explode(',', $line); $name = strtolower(addslashes(urldecode($name))); mysql_query("INSERT INTO players SET id='$id', name='$name', ally='$ally', villages='$villages', points='$points', rank='$rank';"); } echo "Done! <br />"; ?> </body> </html> player.php <?php //connect to db $dbhost = 'localhost'; $dbuser = '**'; $dbpass = '**'; mysql_connect($dbhost, $dbuser, $dbpass); $dbname = '**'; mysql_select_db($dbname); $q = strtolower(str_replace(" ", "+", $_GET['q'])); $query = "SELECT * FROM players WHERE name = '$q'"; $run = mysql_query($query); while ($row = mysql_fetch_array($run)) { $userid[] = $row['id']; $username[] = $row['name']; } header( 'Location: [url="http://no1.tribalwars.no/staemme.php?screen=info_player&id='"]http://no1.tribalwars.no/staemme.php?scree...er&id='[/url] . $userid[0]); ?> Dette fungerer ikke. Ingenting legger seg i databasen selv om jeg vet at bruker, pass og databasenavn er korrekt skrevet, samt sql dumpen.txt? Lenke til kommentar
Per Kristian Skrevet 31. juli 2008 Del Skrevet 31. juli 2008 Spørringen din er korrekt, men er du sikker på at dataene du henter ut er riktige? Inneholder de f.eks. ' eller " som kan ødelegge queryen, og er de av en type som passer inn i databasefeltene (f.eks. sette en tekst inn i et tall-felt)? Prøv å skrive ut queryen til skjermen og les den, da finner du kanskje feilen. Lenke til kommentar
Thor. Skrevet 31. juli 2008 Forfatter Del Skrevet 31. juli 2008 Ser ut til at den delen er ok nå ja, men nå får jeg en feilmelding. eller mange.. Warning: mysql_connect() [function.mysql-connect]: Can't connect to MySQL server on 'localhost' (10048) in C:\wamp\www\test\updateplayer.php on line 14 Warning: mysql_select_db() [function.mysql-select-db]: Can't connect to MySQL server on 'localhost' (10048) in C:\wamp\www\test\updateplayer.php on line 17 Warning: mysql_select_db() [function.mysql-select-db]: A link to the server could not be established in C:\wamp\www\test\updateplayer.php on line 17 Clearing Database... Warning: mysql_query() [function.mysql-query]: Can't connect to MySQL server on 'localhost' (10048) in C:\wamp\www\test\updateplayer.php on line 20 Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in C:\wamp\www\test\updateplayer.php on line 20 Done! Updating Players Database... Warning: mysql_query() [function.mysql-query]: Can't connect to MySQL server on 'localhost' (10048) in C:\wamp\www\test\updateplayer.php on line 31 Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in C:\wamp\www\test\updateplayer.php on line 31 Warning: mysql_query() [function.mysql-query]: Access denied for user 'ODBC'@'localhost' (using password: NO) in C:\wamp\www\test\updateplayer.php on line 31 Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in C:\wamp\www\test\updateplayer.php on line 31 Slik ble det i en gigantisk loop. Googlet koden 10048 og fant denne artikkelen. Problemet er at Programmet skal kjøres på et one.com domene. Er det noen andre løsninger? Det er 13000 linjer +/- og økende som skal oppdateres annenhver dag. Dumt å vente ett sekund mellom handlingene da.. Lenke til kommentar
grimjoey Skrevet 31. juli 2008 Del Skrevet 31. juli 2008 (endret) kanskje dette kan fungere bedre: (forklarer ikke feilmeldingene, men bør hjelpe til å få koden til å fungere.) ved endringer er orginal linjen kommentert ut fulgt av en ny endret linje. foreach($lines as $line) { list($id, $name, $ally, $villages, $points, $rank) = explode(',', $line); // $name = strtolower(addslashes(urldecode($name))); $name = strtolower(mysql_real_escape_string(urldecode($name))); mysql_query("INSERT INTO players SET id='$id', name='$name', ally='$ally', villages='$villages', points='$points', rank='$rank';"); } $q = strtolower(str_replace(" ", "+", $_GET['q'])); $query = "SELECT * FROM players WHERE name = '$q'"; $run = mysql_query($query); // while ($row = mysql_fetch_array($run)) { while ($row = mysql_fetch_assoc($run)) { $userid[] = $row['id']; $username[] = $row['name']; } feilmeldingene kan komme av at du looper gjennom disse filene (en dårlig ide). looper du mysql_connect, vil du fort ende opp uten ledige utgående porter. kan løses med: $link = mysql_connect(); // masse kode.... mysql_close($link); dette vil frigjøre tilkoblingen, men er fortsatt en elendig ide å loope mysql_connect (veldig resurskrevende). kan du vise meg koden hvor du inkluderer disse filene så kan jeg foreslå en bedre måte å gjøre det på? Endret 31. juli 2008 av grimjoey Lenke til kommentar
Thor. Skrevet 1. august 2008 Forfatter Del Skrevet 1. august 2008 Jeg inkluderer ikke dette til noe enda men planen er at jeg i et phpbb3-forum lager en [bbkode][/bb-kode] som linker til www.siden.min/player.php?123&q=456 og henter id-en og videresender deg til byen med koordinatene 123x456. Og beklageligvis så er jeg på et så lavt nivå innen php at jeg ikke skjønner så mye av det du skrev Er du så snill og viser meg de ferdige filene *trøtt*? Lenke til kommentar
grimjoey Skrevet 1. august 2008 Del Skrevet 1. august 2008 (endret) getplayerid.php <?php /* Usage: getPlayerId(playername); Returns: playerid */ function getPlayerId($name) { $resource = 'http://no1.tribalwars.no/map/tribe.txt'; $f = file($resource); foreach ($f as $line) { $array = explode(',', $line); $playerId = $array[0]; $playerName = urldecode($array[1]); $playerName = strtolower($playerName); $name = strtolower($name); if (!strcmp($playerName, $name)) { return $playerId; } } return false; } ?> player.php <?php /* Usage: player.php?q=playername Returns: redirects to playerinfo page */ require_once 'getplayerid.php'; function getUrlPlayerInfo($name) { $playerId = getPlayerId($name); if ($playerId !== false) { return 'http://no1.tribalwars.no/staemme.php?screen=info_player&id=' . $playerId; } else return false; } if (isset($_GET['q'])) { $url = getUrlPlayerInfo($_GET['q']); if ($url !== false) { header('Location: ' . $url); } else { die('<html><body><p>Spilleren ble ikke funnet!</p></body></html>'); } } else { print '<html><body><p>Brukes: player.php?q=spillernavn</p></body></html>'; } ?> map.php <?php /* Usage: map.php?x=xvalue&y=yvalue Returns: redirects to map at the given coords */ function getUrlMap($x, $y) { return 'http://no1.tribalwars.no/game.php?screen=map&x=' . $x . '&y=' . $y; } if (isset($_GET['x']) && isset($_GET['y'])) { $url = getUrlMap($_GET['x'], $_GET['y']); header('Location: ' . $url); } else { print '<html><body><p>Brukes: map.php?x=xverdi&y=yverdi</p></body></html>'; } ?> village.php <?php /* Usage: village.php?q=playername Returns: redirect to village or if multiple villages: print links */ require_once 'getplayerid.php'; function getVillageInfoByPlayerName($name) { $resource = 'http://no1.tribalwars.no/map/village.txt'; $playerId = getPlayerId($name); if ($playerId !== false) { $array = file($resource); $villageInfoArray = array(); foreach ($array as $line) { $villageInfo = explode(',', $line); $villageName = $villageInfo[1]; $villageX = $villageInfo[2]; $villageY = $villageInfo[3]; $ownerId = $villageInfo[4]; if ((int)$playerId == (int)$ownerId) { $villageInfoArray []= array($villageName, $villageX, $villageY); } } return $villageInfoArray; } else { die('<html><body><p>Spilleren ikke funnet!</p></body></html>'); } } function getVillageUrlByXY($x, $y) { return 'map.php?x=' . $x . '&y=' . $y; } function getVillageLinkByInfo($name, $x, $y) { $name = htmlentities(urldecode($name)); $url = getVillageUrlByXY($x, $y); return '<a href="' . $url . '">' . $name . '</a>'; } function getPath($string) { $array = explode('/', $string); $count = count($array) - 1; $return = ''; foreach ($array as $k => $v) { if ($k && ($k < $count)) { $return .= '/'.$v; } } return $return; } if (isset($_GET['q'])) { $villageInfoArray = getVillageInfoByPlayerName($_GET['q']); $count = count($villageInfoArray); if ($count > 1) { $out = ''; foreach ($villageInfoArray as $villageInfo) { $name = $villageInfo[0]; $x = $villageInfo[1]; $y = $villageInfo[2]; $out .= '<p>' . getVillageLinkByInfo($name, $x, $y) . '</p>'; } print '<?xml version="1.0" encoding="UTF-8"?> <html><head><meta http-equiv="Content-Type" content="text/html" charset="UTF-8"> </head><body>' . $out . '</body></html>'; } elseif ($count == 1) { $x = $villageInfoArray[0][1]; $y = $villageInfoArray[0][2]; $path = getPath($_SERVER['PHP_SELF']); $url = 'http://'; $url .= $_SERVER['HTTP_HOST']; $url .= $path . '/'; $url .= getVillageUrlByXY($x, $y); header('Location: ' . $url); } else { die('<html><body><p>Ingen landsbyer funnet!</p></body></html>'); } } else { print '<html><body><p>Brukes: village.php?q=spillernavn</p></body></html>'; } ?> alle filene må ligge i samme bane for at det skal fungere riktig. Endret 1. august 2008 av grimjoey 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å