PHP $_POST werk niet
Ik heb een script om een TCP commando te versturen naar een apparaat om een functie uit te voeren. Bij 1 apparaat werkt dit script, bij 2 andere apparaten moet ik een "welkomst bericht" omzeilen.
Dit heb ik gedaan door 2 keer een commando eerst te versturen waarop ik in het script netjes antwoord krijg op de pagina. Daarna haal ik via post een variable commando op, welke dan gestuurd zou moeten worden. Als ik hem in het begin van het scrip echo, weergeeft hij hem netjes. Maar bij het script wordt hij niet uitgevoerd.
Zou iemand kunnen zeggen waar de fout in het script zit?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
$host = "IP";
$port = POORT;
$message = "$_POST[ID]";
$askall = "all=?\r\n";
echo "Message To server: ".$message;
echo "<br><br>";
// create socket
$socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socket\n");
// connect to server
socket_connect($socket, $host, $port) or die("Could not connect to server\n");
// send string to server
socket_write($socket, $askall, strlen($askall)) or die("Could not send data to server\n");
// send string to server
socket_write($socket, $askall, strlen($askall)) or die("Could not send data to server\n");
sleep(1);
// send string to server
socket_write($socket, $message, strlen($message)) or die("Could not send data to server\n");
sleep(1);
// get server response
$result = socket_read ($socket, 1024) or die("Could not read server response\n");
echo "Reply From Server : ".$result;
// close socket
socket_close($socket);
?>
$host = "IP";
$port = POORT;
$message = "$_POST[ID]";
$askall = "all=?\r\n";
echo "Message To server: ".$message;
echo "<br><br>";
// create socket
$socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socket\n");
// connect to server
socket_connect($socket, $host, $port) or die("Could not connect to server\n");
// send string to server
socket_write($socket, $askall, strlen($askall)) or die("Could not send data to server\n");
// send string to server
socket_write($socket, $askall, strlen($askall)) or die("Could not send data to server\n");
sleep(1);
// send string to server
socket_write($socket, $message, strlen($message)) or die("Could not send data to server\n");
sleep(1);
// get server response
$result = socket_read ($socket, 1024) or die("Could not read server response\n");
echo "Reply From Server : ".$result;
// close socket
socket_close($socket);
?>
Reply is:
Message To server:
format_button=4\r\n
Reply From Server :
---===[ Welcome to the CP650. ]===---
error
fader_level=35 format_button=7 format_list=11, 4, 5, 10, 11, 65, 61, 75 global_delays=63, 0, 0, 0, 0, 0, 0, 0 mute=0 preset_fader_level=50, 40, 40, 40, 40, 45, 40, 35 projector=1 user_formats=65, 61, 75
Hier moet dus als laatste binnen komen format_button=4\r\n wat niet gebeurd, de button wordt ook niet gewijzigd.
Wie kan mij vertellen waar ik de fout in ga?
Gewijzigd op 26/01/2017 11:08:59 door - Ariën -
En let er ook op dat je eerst met deze structuur controleert of er wel ge-POST is:
Anders rest mij maar 1 ding, voor elk commando en apart script maken, helaas werkt me volume slider dan niet welke het belangrijkste is.
De POST is overigens al bruikbaar in het hele script. De vraag is eigenlijk of de POST wel de juiste gegevens binnenkrijgt die je wilt gebruiken voor je verwerking.
Kan je dit niet loggen in een textbestand? In $_POST zit de hele array met je POST-informatie, en die kan je handmatig ook in beeld gooien met:
Array
(
[ID] => format_button=4\r\n
)
De eerste echo in het bestand wil dit ook tonen, de socket alleen verstuurd het commando niet.
Gewijzigd op 26/01/2017 12:40:00 door Rolf Jungbacker
Je krijgt blijkbaar van de server dus een error terug. Zou het niet iets met de server dan te maken hebben?
Die moet hij dan toch tonen in de read? Hij weergeeft alle commando's die ik stuur (al stuur ik er 10) behalve de gene van de POST.
Of je roept het script niet als POST op.
Hoe werkt het loggen en ophalen uit een tekstbestand dan? Er moet natuurlijk platte tekst via de socket verstuurd worden, misschien dat de post functie hier iets aan veranderd waardoor het niet werkt.
Google anders eens op "cp650 tcp commands" of iets soortgelijks (iets met PHP?). Dit levert je dan dingen op als een handleiding.
Rolf Jungbacker op 26/01/2017 13:09:11:
Ik zou niet weten hoe dat moet... helaas...
Hoe werkt het loggen en ophalen uit een tekstbestand dan? Er moet natuurlijk platte tekst via de socket verstuurd worden, misschien dat de post functie hier iets aan veranderd waardoor het niet werkt.
Hoe werkt het loggen en ophalen uit een tekstbestand dan? Er moet natuurlijk platte tekst via de socket verstuurd worden, misschien dat de post functie hier iets aan veranderd waardoor het niet werkt.
Misschien is het handig te vertellen wat voor server het precies is, waarmee je connect? Of is dat maatwerk? Voor zover ik zie ligt het echt niet aan de POST-functie. Die moet gewoon werken, mits het bestaat. Met mijn code kan je een foutmelding afdwingen als je onverhoopt jouw script niet benadert met een POST-request.
Gewijzigd op 26/01/2017 13:16:22 door - Ariën -
Thomas van den Heuvel op 26/01/2017 13:12:22:
Je communiceert dus met een apparaat via sockets. Is er geen documentatie over het te gebruiken protocol? Heb je ook geen (web)service waarmee deze lowlevel zut is verpakt in een meer hanteerbare vorm?
Google anders eens op "cp650 tcp commands" of iets soortgelijks (iets met PHP?). Dit levert je dan dingen op als een handleiding.
Google anders eens op "cp650 tcp commands" of iets soortgelijks (iets met PHP?). Dit levert je dan dingen op als een handleiding.
Het apparaat is het probleem niet, via een client, via de server van de films(ja het is voor een bioscoop) werkt alles. De commando's werken daar ook mee, alleen niet via de post functie. Helaas. Het probleem is dus dat de gegevens die in de php file staan gewoon worden doorgestuurd. De actie vanaf een html pagina dmv een button met post wordt wel netjes ge-echo't op de php pagina, maar niet gebruikt in het script.
Het betreft dus een Dolby CP650 voor de cinema ;)
Gewijzigd op 26/01/2017 13:24:19 door Rolf Jungbacker
Gewijzigd op 26/01/2017 13:25:32 door - Ariën -
Correct, dit had ik al aangegeven.
Gewijzigd op 26/01/2017 13:32:37 door - Ariën -
Of nog beter, je verstuurt via je formulier alleen de instructie ("format_button=4") en plakt hier in je PHP-code een regelovergang aan vast.
EDIT of een nog verdere abstractie zodat je niet letterlijk rauwe instructies aan het invullen bent maar met dropdowns werkt enzo zodat altijd geldige opties en waarden worden verstuurd.
Maak van $message bijvoorbeeld:
Code (php)
Gewijzigd op 26/01/2017 13:36:57 door Thomas van den Heuvel
- Ariën - op 26/01/2017 13:31:28:
Maar, heb je al mijn structuur ingebouwd om te kijken of er daadwerkelijk ge-POST is? Ik kan me niet bedenken waarom een POST-waarde opeens zou verdwijnen. Misschien dat \r\n gestript worden en de waarde foutief op de server binnenkomt?
Sorry vergeten te vermelden, als ik dat toevoeg dat krijg ik een 500 fout.
<code>
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?php
if ($_SERVER['REQUEST_METHOD']=="POST") {
$host = "";
$port = ;
$message = $_POST['ID'];
$askall = "all=?\r\n";
echo "Message To server: ".$message;
echo "<br><br>";
// create socket
$socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socket\n");
// connect to server
socket_connect($socket, $host, $port) or die("Could not connect to server\n");
// send string to server
socket_write($socket, $askall, strlen($askall)) or die("Could not send data to server\n");
sleep(1);
// send string to server
socket_write($socket, $askall, strlen($askall)) or die("Could not send data to server\n");
sleep(1);
// send string to server
socket_write($socket, $message, strlen($message)) or die("Could not send data to server\n");
sleep(1);
// get server response
$result = socket_read ($socket, 1024) or die("Could not read server response\n");
sleep(1);
echo "Reply From Server : ".$result;
// close socket
socket_close($socket);
} else {
BLABLA
}
?>
if ($_SERVER['REQUEST_METHOD']=="POST") {
$host = "";
$port = ;
$message = $_POST['ID'];
$askall = "all=?\r\n";
echo "Message To server: ".$message;
echo "<br><br>";
// create socket
$socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socket\n");
// connect to server
socket_connect($socket, $host, $port) or die("Could not connect to server\n");
// send string to server
socket_write($socket, $askall, strlen($askall)) or die("Could not send data to server\n");
sleep(1);
// send string to server
socket_write($socket, $askall, strlen($askall)) or die("Could not send data to server\n");
sleep(1);
// send string to server
socket_write($socket, $message, strlen($message)) or die("Could not send data to server\n");
sleep(1);
// get server response
$result = socket_read ($socket, 1024) or die("Could not read server response\n");
sleep(1);
echo "Reply From Server : ".$result;
// close socket
socket_close($socket);
} else {
BLABLA
}
?>
Gewijzigd op 26/01/2017 13:36:16 door Rolf Jungbacker
En de code-tags werken met blok-haken i.p.v. vissehaakjes. ;)
Thomas van den Heuvel op 26/01/2017 13:32:58:
Uhm, je moet niet letterlijk "\r\n" sturen (een backslash, de letter "r", nog een backslash en de letter "n"), maar de controle-codes voor een normale regelovergang.
Hmm.. die is even nieuw voor mij.
Maar wat zou er mis kunnen gaan anders? Het komt op dezelfde output neer, lijkt me?
Gewijzigd op 26/01/2017 13:40:14 door - Ariën -
Quote:
Message To server:
format_button=4\r\n
format_button=4\r\n
Dit commando heeft het verkeerde formaat, zie mijn vorige reactie.
@Ariën, nee, de topicstarter verstuurt letterlijk de tekst \r\n in plaats van een regelovergang.
4\r\n is geen getal, daarom krijg je ook de respons "error".
Gewijzigd op 26/01/2017 13:43:22 door Thomas van den Heuvel
- Ariën - op 26/01/2017 13:37:33:
BLA BLA kan je er niet zomaar plaatsen. Echo het dan op zijn minst.
En de code-tags werken met blok-haken i.p.v. vissehaakjes. ;)
En de code-tags werken met blok-haken i.p.v. vissehaakjes. ;)
Aha, naja sorry! zal het er zo weer inplaatsen.
Maar ik heb de $message aangepast en hij werkt!!
Dit had ik zelf niet kunnen vinden, bedankt!
Maar het is inderdaad een goede pitfall om over na te denken. ;-)