Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: PHP, VB6: nettipistelista vb & php

Jogge [14.09.2003 20:01:27]

#

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);

?>

Jogge [15.09.2003 08:16:57]

#

Mikähän on kun tuossa 2. listauksessa ei näy sisennyksiä?

Antti Laaksonen [16.09.2003 07:09:28]

#

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.

T.M. [16.09.2003 13:14:10]

#

pitäisikö tossa PHP-koodissa ton järjestää se lista järjestykseen? sort() funktiolla vähän helpompi

Jogge [16.09.2003 17:02:10]

#

No toi nyt oli tommonen "omasäätö" :)
Eli se vaan etsii sieltä paikan mihin väliin työntää ne pisteet ja nimen.

thefox [18.09.2003 20:38:44]

#

Ilmeisesti helppo hakxata. Mukava esimerkki silti, vaikka paljon olisi parantamisen varaa :-)

D4_B34M [13.11.2004 01:08:23]

#

ihan mugawa :]

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta