PHP $_POST werk niet

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Rolf Jungbacker

Rolf Jungbacker

26/01/2017 11:03:25
Quote Anchor link
Goedendag,

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)
PHP script in nieuw venster Selecteer het PHP script
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
<?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);
?>

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 -
 
PHP hulp

PHP hulp

26/12/2024 06:51:48
 
- Ariën  -
Beheerder

- Ariën -

26/01/2017 11:08:03
Quote Anchor link
Niet verwonderlijk, je maakt er een string van -een stukje tekst dus-, in plaats van een variabele.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$message = $_POST['ID'];


En let er ook op dat je eerst met deze structuur controleert of er wel ge-POST is:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
if ($_SERVER['REQUEST_METHOD']=="POST") {
    // voer hier alles uit
} else {
    // geef hier eventueel een foutmelding voor als er niet ge-POST is.
}
?>
 
Rolf Jungbacker

Rolf Jungbacker

26/01/2017 12:15:08
Quote Anchor link
Ik heb het aangepast, maar helaas. Als ik na de socket send weer een commando stuur die in het bestand zelf wordt aangehaald komt die wel gewoon binnen met reply. Het zit dus ergens in het POST verhaal, maar ik vind het niet. Is het niet mogelijk om de POST binnen te halen en deze in een cache te zetten ofzo tot het einde van het script?

Anders rest mij maar 1 ding, voor elk commando en apart script maken, helaas werkt me volume slider dan niet welke het belangrijkste is.
 
- Ariën  -
Beheerder

- Ariën -

26/01/2017 12:27:25
Quote Anchor link
Ik neem aan dat jouw script een POST-request ontvangt van een ander?

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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
echo "<pre>".print_r($_POST,true)."</pre>";
?>
 
Rolf Jungbacker

Rolf Jungbacker

26/01/2017 12:39:46
Quote Anchor link
Hiermee krijg ik netjes terug:

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
 
- Ariën  -
Beheerder

- Ariën -

26/01/2017 12:48:06
Quote Anchor link
Je krijgt blijkbaar van de server dus een error terug. Zou het niet iets met de server dan te maken hebben?
 
Rolf Jungbacker

Rolf Jungbacker

26/01/2017 12:49:27
Quote Anchor link
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.
 
- Ariën  -
Beheerder

- Ariën -

26/01/2017 13:03:22
Quote Anchor link
Kan je op de server niet loggen wat je precies binnenkrijgt i.p.v. de POST? Want die moet gewoon werken.
Of je roept het script niet als POST op.
 
Rolf Jungbacker

Rolf Jungbacker

26/01/2017 13:09:11
Quote Anchor link
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.
 
Thomas van den Heuvel

Thomas van den Heuvel

26/01/2017 13:12:22
Quote Anchor link
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.
 
- Ariën  -
Beheerder

- Ariën -

26/01/2017 13:15:20
Quote Anchor link
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.

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 -
 
Rolf Jungbacker

Rolf Jungbacker

26/01/2017 13:20:39
Quote Anchor link
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.

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
 
- Ariën  -
Beheerder

- Ariën -

26/01/2017 13:24:42
Quote Anchor link
En als je de waarde uit de POST['ID'] (dus: format_button=4\r\n) eens hard-coded meestuurt. Dan doet hij het wel?
Gewijzigd op 26/01/2017 13:25:32 door - Ariën -
 
Rolf Jungbacker

Rolf Jungbacker

26/01/2017 13:29:35
Quote Anchor link
Correct, dit had ik al aangegeven.
 
- Ariën  -
Beheerder

- Ariën -

26/01/2017 13:31:28
Quote Anchor link
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?
Gewijzigd op 26/01/2017 13:32:37 door - Ariën -
 
Thomas van den Heuvel

Thomas van den Heuvel

26/01/2017 13:32:58
Quote Anchor link
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.

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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
// $_POST['ID'] should only contain <option>=<value> - nothing less, nothing more
$message = $_POST['ID'].chr(13).chr(10); // attach carriage return and linefeed to cp650 command
?>
Gewijzigd op 26/01/2017 13:36:57 door Thomas van den Heuvel
 
Rolf Jungbacker

Rolf Jungbacker

26/01/2017 13:35:54
Quote Anchor link
- 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)
PHP script in nieuw venster Selecteer het PHP script
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
<?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
    }
?>
Gewijzigd op 26/01/2017 13:36:16 door Rolf Jungbacker
 
- Ariën  -
Beheerder

- Ariën -

26/01/2017 13:37:33
Quote Anchor link
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. ;)

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 -
 
Thomas van den Heuvel

Thomas van den Heuvel

26/01/2017 13:40:03
Quote Anchor link
Quote:
Message To server:
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
 
Rolf Jungbacker

Rolf Jungbacker

26/01/2017 13:41:31
Quote Anchor link
- 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. ;)

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!
 
- Ariën  -
Beheerder

- Ariën -

26/01/2017 13:49:21
Quote Anchor link
Ik snap het, al zou je het echo'en met double-quotes zou je die tekens weer niet zien. Bij single-quotes weer wel.
Maar het is inderdaad een goede pitfall om over na te denken. ;-)
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.