Nettipistelista käyttäen winsock:kia. Homma toimii niin, että ohjelma lähettää nimen ja pisteet php-skriptille joka järjestää ja tallentaa ne tekstitiedostoon ja lähettää järjestetyt pisteet ja nimet takaisin vb-ohjelmalle, joka taas näyttää ne käyttäjälle. PHP-osuus jäi vähän kommentoimatta, mutta kaipa siitä jotain selvää saa (saatan joskus muokata ja listätä kommentit). Tuossa vb-ohjelmassa on valmiina osoite minun kotisivuilleini josta löytyy tuo php-juttu, joten testataksesi sinun ei tarvitse pistää tuota php-tiedostoa minnekkän, ajat vaan tuon itse ohjelman.
Formiin tarvitsee pistää:
label1 - inforuutu
text1 - nimi
text2 - pisteet
text3 (multiline ja mieluiten vierityspalkit) - TOP10-lista
command1 - Lähetä
command2 - Tyhjennä
command3 - Päivitä
timer1 (interval vaikka 100 ja enabled = false) - yhteyden saamisen tarkkailu
winsock1 - "Microsoft winsock control"-komponentti
PHP-skripti tarvitsee omg.txt:n, jolle CHMOD 666.
Dim mikä As Integer Private Sub Command1_Click() Winsock1.Close 'suljetaan yhteys, jos on auki Winsock1.Connect "koti.mbnet.fi", 80 'muodostetaan yhteys Timer1.Enabled = True Label1.Caption = "Lähetetään..." mikä = 0 End Sub Private Sub Command2_Click() Winsock1.Close 'suljetaan yhteys, jos on auki Winsock1.Connect "koti.mbnet.fi", 80 'muodostetaan yhteys Timer1.Enabled = True Label1.Caption = "Tyhjennetään..." mikä = 2 End Sub Private Sub Command3_Click() Winsock1.Close 'suljetaan yhteys, jos on auki Winsock1.Connect "koti.mbnet.fi", 80 'muodostetaan yhteys Timer1.Enabled = True Label1.Caption = "Päivitetään..." mikä = 1 End Sub Private Sub Form_Unload(Cancel As Integer) Winsock1.Close 'suljetaan yhteys End Sub Private Sub Timer1_Timer() If Winsock1.State = 7 Then lähetä 'kun yhteys on valmis niin lähetetään tavaraa palvelimelle End Sub Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long) Dim taulu() As String Dim tavara As String Winsock1.GetData tavara, vbString 'vastaanotetaan paketti tavara-muuttujaan mista = InStr(1, tavara, "TOP10") - 1 'otetaan oikea pala muuttujasta tavara = Right(tavara, Len(tavara) - mista) If mista <> -1 Then tavara = Right(tavara, Len(tavara) - 7) 'poistetaan "TOP10" taulu = Split(tavara, vbCrLf) 'pilkotaan lista taulukkoon, jotta olisi sitten joskus helpompi käyttää Text3.Text = tavara End If End Sub Private Sub lähetä() Dim tavara As String Select Case mikä Case 0: 'nappi "lähetä" tavara = "GET /jogge/KOODAUS/PHP/omg.php?name=" & Trim(Text1.Text) & "&score=" & Trim(Text2.Text) & " HTTP/1.0" & vbCrLf & "Pragma: no-cache" & vbCrLf & "Accept: */*" & vbCrLf & "Accept: text/html" & vbCrLf & vbCrLf Case 1: 'nappi "päivitä" tavara = "GET /jogge/KOODAUS/PHP/omg.php?name=&score=0 HTTP/1.0" & vbCrLf & "Pragma: no-cache" & vbCrLf & "Accept: */*" & vbCrLf & "Accept: text/html" & vbCrLf & vbCrLf Case 2: 'nappi "tyhjennä" tavara = "GET /jogge/KOODAUS/PHP/omg.php?name=&score=-1 HTTP/1.0" & vbCrLf & "Pragma: no-cache" & vbCrLf & "Accept: */*" & vbCrLf & "Accept: text/html" & vbCrLf & vbCrLf End Select Winsock1.SendData tavara 'lähetetään paketti Timer1.Enabled = False Label1.Caption = "" End Sub
<?php $filu=file("omg.txt"); $nimi=$_GET['name']; $score=intval($_GET['score']); if (strlen($nimi)>16) //tarkistetaan nimen pituus (nyt enintään 16) $nimi=substr($nimi,0,16); if ($score>99999) //tarkistetaan pisteiden määrä (nyt enintään 99999) $score=99999; for ($n=0;$n<10;$n++) { $pelaaja[$n]=$filu[$n*2+1]; $pisteet[$n]=$filu[$n*2]; } if ($score==-1) { for ($n=0;$n<10;$n++) { $pisteet[$n]="0\r\n"; $pelaaja[$n]="\r\n"; } } if ($score>0) { for ($n=9;$n>=0;$n--) if ($score>$pisteet[$n]) $kohta=$n; for ($n=9;$n>=$kohta;$n--) { $pisteet[$n+1]=$pisteet[$n]; $pelaaja[$n+1]=$pelaaja[$n]; } $pelaaja[$kohta]=$nimi."\r\n"; $pisteet[$kohta]=$score."\r\n"; } echo "TOP10\r\n"; $kahva=fopen("omg.txt","w"); for ($n=0;$n<10;$n++) { fwrite($kahva,$pisteet[$n]); fwrite($kahva,$pelaaja[$n]); echo $pisteet[$n]; echo $pelaaja[$n]; } fclose($kahva); ?>
Mikähän on kun tuossa 2. listauksessa ei näy sisennyksiä?
Mukava esimerkki, olen itsekin joskus ajatellut tehdä tuontapaisen systeemin. PHP-koodi näkyy valitettavasti väärin, koska sitä yritetään näyttää VB:n värikoodauksella.
pitäisikö tossa PHP-koodissa ton järjestää se lista järjestykseen? sort() funktiolla vähän helpompi
No toi nyt oli tommonen "omasäätö" :)
Eli se vaan etsii sieltä paikan mihin väliin työntää ne pisteet ja nimen.
Ilmeisesti helppo hakxata. Mukava esimerkki silti, vaikka paljon olisi parantamisen varaa :-)
ihan mugawa :]
Aihe on jo aika vanha, joten et voi enää vastata siihen.