2017-11-16 1 views
-1

Ich habe ein PHP-Projekt, in dem ich eine index.html mit einer einfachen Form habe:Warum verarbeitet PHP meine Anfrage nicht?

<p>Test connection</p> 
    <form action="Servicios.php" method="post"> 
     <input type='submit' name='Test' value='Test'> 
    </form> 

in Servicios.php Im Versuch, es wie diese nicht, aber es macht

<?php  
    echo "can you print this"; 
    if($_SERVER["REQUEST_METHOD"]=="POST") 
    { 
     if(!empty($_POST["Test"])) 
     { 
     echo "Hello world"; 
     } 
    } 

zu verarbeiten funktioniert, das ist, weil es nie das erste if wie "wahr" auswertet. Das erste Echo an der Spitze funktioniert, aber wenn ich ein Echo zu $ ​​_SERVER ["REQUEST_METHOD"] mache, gibt es mir nichts. Ich habe versucht mit isset ($ _ POST ['Hola']), aber ich hatte das gleiche Ergebnis.

Dies geschieht nur in dem Projekt, das ich in einem Internet-Host habe. Ich habe diesen exakt gleichen Code in meinem lokalen Computer mit netbeans und xampp geschrieben und es funktioniert perfekt. Ich habe keine Idee warum.

Ich habe das Gefühl, dass ich einen dummen Fehler mache, aber ich kann es nicht finden.

Mein Host ist ein Ubuntu-Server von den ec2 Amazon Web Services.

bearbeiten dies ist die Ausgabe von <?=print_r($_SERVER);?> in Servicios.php ich die Teile ersetzt, wo meine ip mit [IP]

Array ( 
    [HTTP_HOST] => [ip] 
    [HTTP_USER_AGENT] => Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:57.0) Gecko/20100101 Firefox/57.0 
    [HTTP_ACCEPT] => text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
    [HTTP_ACCEPT_LANGUAGE] => es-MX,es-ES;q=0.9,es;q=0.7,es-AR;q=0.6,es-CL;q=0.4,en-US;q=0.3,en;q=0.1 
    [HTTP_ACCEPT_ENCODING] => gzip, deflate 
    [HTTP_REFERER] => http://[ip]/ProyectoPM/ 
    [CONTENT_TYPE] => application/x-www-form-urlencoded 
    [CONTENT_LENGTH] => 11 
    [HTTP_CONNECTION] => keep-alive 
    [HTTP_UPGRADE_INSECURE_REQUESTS] => 1 
    [PATH] => /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 
    [SERVER_SIGNATURE] => Apache/2.4.18 (Ubuntu) Server at [ip] Port 80 
    [SERVER_SOFTWARE] => Apache/2.4.18 (Ubuntu) 
    [SERVER_NAME] => [ip] 
    [SERVER_ADDR] => 172.31.43.105 
    [SERVER_PORT] => 80 
    [REMOTE_ADDR] => 189.208.87.127 
    [DOCUMENT_ROOT] => /var/www/html 
    [REQUEST_SCHEME] => http 
    [CONTEXT_PREFIX] => 
    [CONTEXT_DOCUMENT_ROOT] => /var/www/html 
    [SERVER_ADMIN] => [email protected] 
    [SCRIPT_FILENAME] => /var/www/html/ProyectoPM/Servicios.php 
    [REMOTE_PORT] => 5672 
    [GATEWAY_INTERFACE] => CGI/1.1 
    [SERVER_PROTOCOL] => HTTP/1.1 
    [REQUEST_METHOD] => POST 
    [QUERY_STRING] => 
    [REQUEST_URI] => /ProyectoPM/Servicios.php 
    [SCRIPT_NAME] => /ProyectoPM/Servicios.php 
    [PHP_SELF] => /ProyectoPM/Servicios.php 
    [REQUEST_TIME_FLOAT] => 1510846404.812 
    [REQUEST_TIME] => 1510846404) 1 

Dies ist in der Anordnung zeigte er mit <?=var_dump($_SERVER); ?> kehrt

Eine wichtigere Bearbeitung Zuerst sagte ich dass eine einfache echo "can you print this"; im Host funktioniert, jetzt sehe ich, dass es auch nicht. Wenn ich zu servicios.php gehe, indem ich auf meine Schaltfläche in index.html klicke, wechselt der Browser zu Servicios.php (er zeigt es in der URL an), aber es zeigt einfach nichts. Es zeigt nur etwas, wenn ich den ganzen Code lösche und eine Anweisung wie <?=print_r($_SERVER);?>, die ich oben bereits gesetzt habe.

+1

Run 'print_r ($ _ SERVER) zu überprüfen,' zu sehen, was da drin ist. –

+0

Zeigt das Web-Server-Protokoll für diese Anforderung an. –

+0

Ok, print_r ($ _ SERVER) gibt mir ein langes Array, was genau soll ich suchen? – Quique

Antwort

0
if(isset($_POST['Test'])){ 
echo 'Hello world'; 
} 

Dies sollte funktionieren. Dies wird überprüft, ob die Schaltfläche mit der POST-Methode gesendet wurde. Dies sollte ausreichend sein, um zu überprüfen, ob das Formular übermittelt wurde.

+0

Dies wird nicht für OP funktionieren. Dies funktioniert in localhost. – pr1nc3

+0

Sie entfernen das mit 'empty()' erstellte Prüf-OP. –

0

http://php.net/manual/en/function.extract.php

In einigen Versionen extrahieren Befehl verwendet werden soll.

if(extract($_POST)) { 
    // code 
} 
+2

Das zeigt nicht, was das Problem ist, es macht den Code schlechter, wenn überhaupt. Verwenden von Array-Schlüssel als Variablen ist keine gute Idee. –

+1

Während dieser Link die Frage beantworten kann, ist es besser, die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz zur Verfügung zu stellen. Nur-Link-Antworten können ungültig werden, wenn sich die verknüpfte Seite ändert. - [Von Review] (/ review/low-quality-posts/17969986) – Jehy

0

Sie können dies versuchen, wenn post-Methode

if(strtoupper($_SERVER['REQUEST_METHOD']) === 'POST') { 
// if form submitted with post method 
    // validate request, 
    // manage post request differently, 
    // log or don't log request, 
    // redirect to avoid resubmition on F5 etc 
} 
+1

Es ist nicht notwendig, es in Großbuchstaben zu schreiben ([diese Antwort zeigt warum] (https://stackoverflow.com/a/10766285/6651287)), und Wenn die Überprüfung mit _equal_ nicht funktioniert, funktioniert auch _identical_ nicht. –

Verwandte Themen