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.