webForumDet fria alternativet

Byta språk

22 svar · 647 visningar · startad av Inferis

InferisMedlem sedan sep. 2000670 inlägg
#1

Testar ett script för en chat.
Går det att skriva om det till classic asp?

<?php

define ('DBPATH','localhost');
define ('DBUSER','root');
define ('DBPASS','password');
define ('DBNAME','chat');

session_start();

global $dbh;
$dbh = mysql_connect(DBPATH,DBUSER,DBPASS);
mysql_selectdb(DBNAME,$dbh);

if ($_GET['action'] == "chatheartbeat") { chatHeartbeat(); } 
if ($_GET['action'] == "sendchat") { sendChat(); } 
if ($_GET['action'] == "closechat") { closeChat(); } 
if ($_GET['action'] == "startchatsession") { startChatSession(); } 

if (!isset($_SESSION['chatHistory'])) {
	$_SESSION['chatHistory'] = array();	
}

if (!isset($_SESSION['openChatBoxes'])) {
	$_SESSION['openChatBoxes'] = array();	
}

function chatHeartbeat() {
	
	$sql = "select * from chat where (chat.to = '".mysql_real_escape_string($_SESSION['username'])."' AND recd = 0) order by id ASC";
	$query = mysql_query($sql);
	$items = '';

	$chatBoxes = array();

	while ($chat = mysql_fetch_array($query)) {

		if (!isset($_SESSION['openChatBoxes'][$chat['from']]) && isset($_SESSION['chatHistory'][$chat['from']])) {
			$items = $_SESSION['chatHistory'][$chat['from']];
		}

		$chat['message'] = sanitize($chat['message']);

		$items .= <<<EOD
					   {
			"s": "0",
			"f": "{$chat['from']}",
			"m": "{$chat['message']}"
	   },
EOD;

	if (!isset($_SESSION['chatHistory'][$chat['from']])) {
		$_SESSION['chatHistory'][$chat['from']] = '';
	}

	$_SESSION['chatHistory'][$chat['from']] .= <<<EOD
						   {
			"s": "0",
			"f": "{$chat['from']}",
			"m": "{$chat['message']}"
	   },
EOD;
		
		unset($_SESSION['tsChatBoxes'][$chat['from']]);
		$_SESSION['openChatBoxes'][$chat['from']] = $chat['sent'];
	}

	if (!empty($_SESSION['openChatBoxes'])) {
	foreach ($_SESSION['openChatBoxes'] as $chatbox => $time) {
		if (!isset($_SESSION['tsChatBoxes'][$chatbox])) {
			$now = time()-strtotime($time);
			$time = date('g:iA M dS', strtotime($time));

			$message = "Sent at $time";
			if ($now > 180) {
				$items .= <<<EOD
{
"s": "2",
"f": "$chatbox",
"m": "{$message}"
},
EOD;

	if (!isset($_SESSION['chatHistory'][$chatbox])) {
		$_SESSION['chatHistory'][$chatbox] = '';
	}

	$_SESSION['chatHistory'][$chatbox] .= <<<EOD
		{
"s": "2",
"f": "$chatbox",
"m": "{$message}"
},
EOD;
			$_SESSION['tsChatBoxes'][$chatbox] = 1;
		}
		}
	}
}

	$sql = "update chat set recd = 1 where chat.to = '".mysql_real_escape_string($_SESSION['username'])."' and recd = 0";
	$query = mysql_query($sql);

	if ($items != '') {
		$items = substr($items, 0, -1);
	}
header('Content-type: application/json');
?>
{
		"items": [
			<?php echo $items;?>
        ]
}

<?php
			exit(0);
}

function chatBoxSession($chatbox) {
	
	$items = '';
	
	if (isset($_SESSION['chatHistory'][$chatbox])) {
		$items = $_SESSION['chatHistory'][$chatbox];
	}

	return $items;
}

function startChatSession() {
	$items = '';
	if (!empty($_SESSION['openChatBoxes'])) {
		foreach ($_SESSION['openChatBoxes'] as $chatbox => $void) {
			$items .= chatBoxSession($chatbox);
		}
	}

	if ($items != '') {
		$items = substr($items, 0, -1);
	}

header('Content-type: application/json');
?>
{
		"username": "<?php echo $_SESSION['username'];?>",
		"items": [
			<?php echo $items;?>
        ]
}

<?php

	exit(0);
}

function sendChat() {
	$from = $_SESSION['username'];
	$to = $_POST['to'];
	$message = $_POST['message'];

	$_SESSION['openChatBoxes'][$_POST['to']] = date('Y-m-d H:i:s', time());
	
	$messagesan = sanitize($message);

	if (!isset($_SESSION['chatHistory'][$_POST['to']])) {
		$_SESSION['chatHistory'][$_POST['to']] = '';
	}

	$_SESSION['chatHistory'][$_POST['to']] .= <<<EOD
					   {
			"s": "1",
			"f": "{$to}",
			"m": "{$messagesan}"
	   },
EOD;

	unset($_SESSION['tsChatBoxes'][$_POST['to']]);

	$sql = "insert into chat (chat.from,chat.to,message,sent) values ('".mysql_real_escape_string($from)."', '".mysql_real_escape_string($to)."','".mysql_real_escape_string($message)."',NOW())";
	$query = mysql_query($sql);
	echo "1";
	exit(0);
}

function closeChat() {

	unset($_SESSION['openChatBoxes'][$_POST['chatbox']]);
	
	echo "1";
	exit(0);
}

function sanitize($text) {
	$text = htmlspecialchars($text, ENT_QUOTES);
	$text = str_replace("\n\r","\n",$text);
	$text = str_replace("\r\n","\n",$text);
	$text = str_replace("\n","<br>",$text);
	return $text;
}
InferisMedlem sedan sep. 2000670 inlägg
#2

Det fungerar alltså inte att göra så?

nitro2k01Medlem sedan aug. 20039 342 inlägg
#3

Funkar inte att göra hur då?
I regel går det alltid att skriva om kod, men du ställer ju inte en specifik fråga utan visar bara upp ett stycke kod och undrar om det går att översätta.
Om du inte kan ASP, lär dig lite om ASP. Om du stöter på patrull och har specifika frågor, kom tillbaka och fråga om dessa, så är chansen nog större att få ett svar.

InferisMedlem sedan sep. 2000670 inlägg
#4

Jag kan lite asp, men noll om php.
Förstår lite vad php gör i koden, men långt ifrån alla ställen.
Är detta php eller blir det en utskrift? Har inte php alltid avslutningstaggar?

	}
header('Content-type: application/json');
?>
{
		"items": [
			<?php echo $items;?>
        ]
}

<?php
			exit(0);
}

Förtydligande:
Det som är mellan ?> och där <?php börjar igen...

InferisMedlem sedan sep. 2000670 inlägg
#5

Är detta något som skrivs ut för javascriptet? Eller är det någon funktion i php?

	echo "1";
	exit(0);
InferisMedlem sedan sep. 2000670 inlägg
#6

Är EOD; samma som End if?

MickeA.comMedlem sedan feb. 20034 441 inlägg
#7

Inferis skrev:

Är detta något som skrivs ut för javascriptet? Eller är det någon funktion i php?

	echo "1";
	exit(0);

Det där skriver ut "1" i webbläsaren och exit innebär att scriptet slutar att exekveras. Översatt till asp skulle det bli:

Response.Write("1")
Response.End
MickeA.comMedlem sedan feb. 20034 441 inlägg
#8

Inferis skrev:

Är EOD; samma som End if?

nitro2k01 skrev:

Om du inte kan ASP, lär dig lite om ASP. Om du stöter på patrull och har specifika frågor, kom tillbaka och fråga om dessa, så är chansen nog större att få ett svar.

Som sagt.. overkill att be någon översätta en hel applikation, lär dig PHP eller leta reda på något som redan är ASP.

Skriver du 200 som frågor om samma script här lär du inte få någon hjälp.

nitro2k01Medlem sedan aug. 20039 342 inlägg
#9

PHP har nästan alltid avslutningstaggar. Man kan strunta i att sätta ut avslutningstaggen sist i en fil för att försäkra sig om att man inte får med skräptecken, typ mellanslag och radbrytningar. (Bra om man vill skicka en binärfil från ett PHP-skript, samt även för include-filer med bara kod i, av samma anledning)

Men det är dock inte det du ser i koden ovan, även om den metoden verkar användas på slutet av filen. Den kan se lite rörig ut, men det du ser utanför är JSON-kodad data som ser lite ut som PHP. För att förtydliga: Nedan är det som ligger innanför PHP-taggarna rött och det som ligger utanför grönt.

[red]	}
header('Content-type: application/json');
?>[/red]
[blue]{
		"items": [[/blue]
			[red]<?php echo $items;?>[/red]
[blue]        ]
}
[/blue]
[red]<?php
			exit(0);
}
[/red]

Med andra ord, $items skrivs ut i mitten av JSON-data. JSON är ett sätt att koda data, som liknar XML i funktion, men Javascript i utseende. (Koden kan till och med köras korrekt som Javascript om man känner för det.)

nitro2k01Medlem sedan aug. 20039 342 inlägg
#10

Inferis skrev:

Är EOD; samma som End if?

Nej. Det du ser är en inmatning av en sträng med flera rader. <<< påbörjar inmatningen, det första EOD definierar vilken sträng som ska användas för att markera slutet av inmatningen. Det andra EOD't gör just detta.

För övrigt, $items .= "banan"; är likvärdigt med $items = $items . "banan";
Koden används för att foga samman strängar. (Det har man en punkt till istället för + som i vissa andra språk.)

	$items .= <<<EOD
					   {
			"s": "0",
			"f": "{$chat['from']}",
			"m": "{$chat['message']}"
	   },
EOD;
InferisMedlem sedan sep. 2000670 inlägg
#11

Tack nitro2k01!
Det där med punkt istället för + hade jag nog aldrig listat ut.

Men vad gör detta?

if ($_GET['action'] == "chatheartbeat") { chatHeartbeat(); }

Är $_GET samma som request.form? Varför dubbla ==?

MickeA.comMedlem sedan feb. 20034 441 inlägg
#12

Nej, $_GET[] är samma som Request.Querystring().. Raden gör så att funktionen chatHeartbeat körs om variabeln action är lika med chatheartbeat...

InferisMedlem sedan sep. 2000670 inlägg
#13

Av ren nyfikenhet, hur ser då Request.form("") ut?

MickeA.comMedlem sedan feb. 20034 441 inlägg
#14

$_POST[]

Återigen, lär dig grunderna på egen hand, sen kan du ställa frågor om enskilda saker. Finns obegränsat med information på nätet, en bra start är t.ex. https://www.php.net eller https://www.google.com

InferisMedlem sedan sep. 2000670 inlägg
#15

MickeA.com skrev:

Raden gör så att funktionen chatHeartbeat körs om variabeln action är lika med chatheartbeat...

Det verkar inte finnas else och end if?

Men if ($_GET['action'] == "chatheartbeat") { chatHeartbeat(); }

är samma som

if request,querystring("action") = "chatheartbeat" Then
call function
End if
InferisMedlem sedan sep. 2000670 inlägg
#16

Kollade runt på nybörjarsidor för php, men har tyvärr ingenstans att testa koden.

MickeA.comMedlem sedan feb. 20034 441 inlägg
#17

Okej.. jag provar igen, ser du vad det står nu?

MickeA.com skrev:

Återigen, lär dig grunderna på egen hand, sen kan du ställa frågor om enskilda saker. Finns obegränsat med information på nätet, en bra start är t.ex. https://www.php.net eller https://www.google.com

Det är alltså inte för att vara taskig, men det kommer inte bli någor (bra) resultat om du frågar vad varje rad gör och sen sätter ihop något eget av det.

Börja här:
http://www.phpportalen.net/school.php

När du fått grepp om grunderna kan du som sagt återkomma och jag lovar att någon då hjälper dig.

MickeA.comMedlem sedan feb. 20034 441 inlägg
#18

Inferis skrev:

Kollade runt på nybörjarsidor för php, men har tyvärr ingenstans att testa koden.

Här:
http://www.wampserver.com/en/

nitro2k01Medlem sedan aug. 20039 342 inlägg
#19

Jag instämmer med Micke, lär dig PHP först, sen försök skriva och/eller förstå kod. Sen är den chat-koden, som du kanske har kommit på, inget bra nybörjarexempel. Den använder sig av mer udda egenheter i språket, har en virrig indentering skriver till råge på allt ut JSON-kod som blandas in mitt i allting för att öka på förvirringen.

InferisMedlem sedan sep. 2000670 inlägg
#20

Tack Micke!

132 ms totalt · 3 externa anrop · v20260731065814-full.cf67ef55
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)