Goedenavond,

Ik zit al een tijdje met het volgende probleem.
Ik heb onderstaande link (href) in HMTL.
Bij het aanklikken van de link wordt tcp.php aangeroep en wordt de parameter message=51 meegegeven.

In het PHP-script wordt als eerste de parameter gelinkt aan een variabele $message.
Vervolgens probeer ik een fsockopen te doen van een bepaald IP-adres met een bepaalde poort.
Vervolgens als de socket geopend is wil ik er een berichtje heen sturen met fwrite.
Deze functie gaat goed op het moment dat het een vast bericht; fwrite($fp, "message").
Als ik het bericht "message" vervang door de variabele $message zoals hier onder, dan gaat het mis.

Zou iemand mij hier verder mee kunnen helpen?

HTML
<a href="tcp.php?message=51">PHP File</a>



PHP
<?php
$message = $_GET['message'];
echo $message;

LampAan();

function LampAan() {
$fp = fsockopen("xxx.xxx.xxx.xxx", 10000, $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br />\n";
}

else {
fwrite($fp, $message);
while (!feof($fp))
{
echo fgets($fp, 128);
}
fclose($fp);

$url = 'verlichting.php'; // this can be set based on whatever
no redirect
header( "Location: $url" );
}
}
?>
En wat gaat er "mis"? Op welke regel, enz?
Het komt omdat functies variabelen van buiten de functie niet "zien". Zie een functie maar als een apart script. Je moet alle variabelen opnieuw aanmaken of je geeft ze mee als parameter. In dit geval is het simpel op te lossen door $message als parameter mee te geven.

<?php
LampAan($message);
?>

Maar er zijn nog een paar problemen..
- een $_GET variabele is nooit gegarandeerd aanwezig. Test dus of deze bestaat!
- $errno en $errstr bestaan niet. Beter even initialiseren.
- no direct is geen geldig PHP syntax.
- na een echo op regel drie en zeventien kun je een redirect op regel 23 wel vergeten.

Zo zou het wel moeten werken:
<?php
$url = 'verlichting.php'; // this can be set based on whatever

if(isset($_GET['message']))
{
$message = $_GET['message'];

LampAan($message);

header( "Location: $url" );
exit; // altijd een exit na een redirect anders loopt je script gewoon door.
}

echo 'Geen message in URL. Gebruik: tcp.php?message=<message>.';

function LampAan($message)
{
$errno = 0;
$errstr = null;

$fp = fsockopen("xxx.xxx.xxx.xxx", 10000, $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br />\n";
return false; // verlaat de functie en vertel iig dat er iets fout gegaan is.
}

fwrite($fp, $message);
/*
while (!feof($fp))
{
echo fgets($fp, 128); // alleen voor debugging anders werkt de redirect niet.
}
*/
fclose($fp);

return true; // verlaat de functie en vertel dat de operatie geslaagd is
}
?>

[size=xsmall]Toevoeging op 08/11/2017 21:21:09:[/size]

P.S. als je dit op je pc test zet dan foutmeldingen aan want dan had je waarschijnlijk allang gezien wat er mis ging. Foutmeldingen kun je aanzetten door dit boven in je script te zetten:

<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);
?>
Bedankt voor de snelle reacties.
Het probleem is inmiddels opgelost.

Reageren