HadHa Skrevet 26. mai 2013 Del Skrevet 26. mai 2013 (endret) Er relativt fersk på PHP, men har satt opp et lite metric system for spill. Det jeg nå sliter med, er at hver spiller får en unik ID fra serveren min hver gang de installerer appen. Jeg vil gjøre noe slik: if ( $_GET["idnumber"] ) { $newid = mysqli_query($con,"SELECT MAX(PhoneID) FROM $tname"); die( $newid ); }; Men jeg får ingen respons når jeg trigger dette i web-browser.. Hva gjør jeg galt? Lurer også på hvor godt php og mysql fungerer i lag? La oss si at jeg har 10 brukere som prøver å gjøre dette 'helt samtidig'. Vil php klare å skille mellom dem og gi ut unike tall til hver bruker? edit: legger ved toppen av scriptet slik at det er lettere å se hva jeg driver med <?php // Get Configuation file require("config.php"); // Connect to server $db = mysql_connect($host, $user, $pass) or die ( mysql_error() ); mysql_select_db($dbname) or die ( mysql_error() ); // Check for the existing table if its not found create it if ( ! mysql_num_rows( mysql_query("SHOW TABLES LIKE '" . $tname . "'") ) ) { $query = "CREATE TABLE `$tname` ( `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY, `PhoneID` VARCHAR(255) NOT NULL, `Pack` VARCHAR(255) NOT NULL, `Level` VARCHAR(255) NOT NULL, `Stars` VARCHAR(255) NOT NULL, `Time` INT(255) NOT NULL, `Score` INT(255) NOT NULL, `Date` VARCHAR(255) NOT NULL )"; $create_table = mysql_query($query) or die ( mysql_error() ); } // Check for a universla DeviceID if ( $_GET["newid"] ) { $result = mysqli_query($db,"SELECT * FROM `$tname`"); //$bigID = mysqli_query($bigID,"SELECT MAX(PhoneID) FROM $tname"); // = SELECT MAX(PhoneID) AS HighestPrice FROM Products; echo ($result); die ($result); }; // Check server status from application if ( $_GET["status"] ) die('online'); Endret 26. mai 2013 av HadHa Lenke til kommentar
MikkelRev Skrevet 26. mai 2013 Del Skrevet 26. mai 2013 Hva er det du prøver å skrive ut med de echo-linjene dine nederst? mysqli_result() returnerer ikke en streng, og derfor er det ikke bare å skrive ut resultatet. Lenke til kommentar
HadHa Skrevet 26. mai 2013 Forfatter Del Skrevet 26. mai 2013 Hva er det du prøver å skrive ut med de echo-linjene dine nederst? mysqli_result() returnerer ikke en streng, og derfor er det ikke bare å skrive ut resultatet. Takk for svar. Planen var å lagre det største tallet den fant i kolonnen "PhoneID", i $result. Deretter vil jeg echoe/die result. Appen min får da dette tallet tilbake og vet at det tallet +1 er et unikt tall. Lenke til kommentar
Ernie Skrevet 26. mai 2013 Del Skrevet 26. mai 2013 Du må bruke mysql_fetch_array med resultatet fra mysql_query for å hente ut de faktiske dataene. Lenke til kommentar
MikkelRev Skrevet 26. mai 2013 Del Skrevet 26. mai 2013 (endret) Prøv noe sånt: $sql="SELECT MAX(PhoneID) AS max_phone_id FROM $tname"; $result=mysql_query($sql) or die(mysql_error()); $max_phone_id=mysql_result($result,0,max_phone_id) or die(mysql_error()); echo "max_phone_id=$max_phone_id"; Koden er utestet. Du bør også oppgradere mysql-funksjonene til de tilsvarende mysqli-funksjoner, eller aller helst PDO-funksjoner. Endret 26. mai 2013 av MikkelRev Lenke til kommentar
HadHa Skrevet 26. mai 2013 Forfatter Del Skrevet 26. mai 2013 Takk - det funker, jeg forstår nå at jeg tenkte litt bakvendt. Om du har noen minutter ekstra, hva mener du med følgende settning: Koden er utestet. Du bør også oppgradere mysql-funksjonene til de tilsvarende mysqli-funksjoner, eller aller helst PDO-funksjoner. Lenke til kommentar
MikkelRev Skrevet 26. mai 2013 Del Skrevet 26. mai 2013 mysql-funksjonssettet er gamle og utgående funksjoner og anbefales ikke lenger. Hold deg unna disse funksjonene: http://no1.php.net/manual/en/ref.mysql.php This extension is deprecated as of PHP 5.5.0, and will be removed in the future. Instead, the MySQLi or PDO_MySQL extension should be used. See also MySQL: choosing an API guide and related FAQ for more information. Alternatives to this function include: mysql-funksjoner er står for mysql improved, og er et bedre valg. Det gjelder disse funksjonene: http://no1.php.net/manual/en/book.mysqli.php PDO er det foretrukkne alternativet, og det kan du lese mer om her: http://no1.php.net/manual/en/ref.pdo-mysql.php Lenke til kommentar
HadHa Skrevet 26. mai 2013 Forfatter Del Skrevet 26. mai 2013 Morro - skal lese meg opp på den biten. Er det også noen som kan si noe om delspørsmålet mitt? Inni samme funksjonen her kommer jeg til å gjøre noe slik Ved førstegangsinstallasjon av appen min ber den serveren om en ID. Serveren svarer med dette: $sql="SELECT MAX(PhoneID) AS max_phone_id FROM $tname"; $result=mysql_query($sql) or die(mysql_error()); $max_phone_id=mysql_result($result,0,max_phone_id) or die(mysql_error()); - Lager et nytt tall i tabellen - med PhoneID verdien: $max_phone_id+1- die ("max_phone_id=$max_phone_id" Appen setter sin ID til å være verdien den fikk tilbake. Ved en 'eventuelt stor pågang', som 10-20 stker prøver å gjøre dette samtidig, vil det fungere som jeg har tenkt? Eller kommer jeg her til å dele ut duplikater av samme ID. Lenke til kommentar
quantum Skrevet 1. juni 2013 Del Skrevet 1. juni 2013 (endret) Dette avhenger av hvordan du legger inn et nytt tall i tabellen. Du må lese ut nåværende phone-id med en select og legge inn ny med update eller insert i samme transaksjon. Da vil MySQL holde styr på dette for deg. Legg også en unik indeks på phone-id-kolonnen, da får du både sikret at eventuelle feil fanges opp og dessuten at max-funksjonen ikke krever en full tablescan. Alternativt kan du låse tabellen med LOCK_TABLES Les mere om dette her http://dev.mysql.com...ansactions.html Et bedre alternativ enn max-funksjonen til dette bruket er å ha en id-kolonne definert med auto-increment, den vil da automatisk oppdateres med +1 for hver rad du legger inn. http://php.net/manua...astinsertid.php Merk det Nour skriver om mysql, du må lese ut verdien i samme transaksjon, altså før commit()-setningen. Mer generell info - les om ACID-prinsippet her http://no.wikipedia.org/wiki/Database Endret 1. juni 2013 av quantum 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å