2016-07-16 5 views
-1

So habe ich diesen Code, der Name und E-Mail-Adresse an die Datenbank senden soll. Nicht nur, dass es das nicht tut, sondern in meiner zweiten Codezeile, wo ich es drucken möchte, was auch immer eingegeben wurde, bekomme ich immer noch einen leeren Bildschirm. Gibt es eine Einstellung, um zu zeigen, welche Fehler in meinem Code aufgetreten sind, die ich ausgeschaltet habe, oder ist dieser Code falsch?PHP-Formular keine Eingabe an die Datenbank senden und nicht zeigen print_r

//Only process the form if $_POST isn't empty 
if(! empty($_POST)){ 
    print_r($_POST); exit; 


//Connect to MYSQL 
    $mysqli = new mysqli('localhost', 'root','','snippets'); 

//Check connection 
    if($mysqli ->connect_error){ 
     die('Connect Error: '. $mysqli->connect_errno . ': ' . $mysqli->connect_error); 
    } 

//Insert data 
    $sql = "INSERT INTO user(name, email) VALUES ('{$mysqli->real_escape_string($_POST['name'])}','{$mysqli->real_escape_string($_POST['email'])}')"; 
    $insert = $mysqli->query($sql); 

//Print reponse from MySQL 
    if($insert){ 
     echo "Success! Row ID: {$mysqli->insert_id}"; 
    }else{ 
     die("Error: {$mysqli->errno}:{$mysqli->error}"); 
    } 

//Close connection 
    $mysqli ->close(); 
} 
?> 
<form method="post" action=""> 
    <input name="name" type="text"> 
    <input name="email" type="email"> 
    <input type="submit" value="Submit Form"> 
</form> 
+0

Bitte print_r vor der leeren Check-Funktion und kommentieren Sie die Ausgabe –

+0

Es tut mir leid, ich bin noch neu, wie mache ich das? – Shady

+1

Google 'error_reporting' –

Antwort

1

$_POST wird bei POST-Anfragen nicht aufgefüllt. Die wahrscheinlichste Ursache ist, dass Ihr PHP so eingestellt ist, dass es keine Superglobals erzeugt ($_POST, $_GET ...).

Das Update möglicherweise in Ihrer php.ini Datei. Öffnen Sie diese Datei und suchen Sie nach der Einstellung variables_order (See the docs). Ich vermute, dass dies in Ihrer Konfigurationsdatei auskommentiert wurde (oder nicht existiert). Setzen Sie ihn auf:

variables_order = "EGPCS" 

Wenn Sie nicht sicher sind, wo der aktive php.ini befindet, Ihre PHP-Datei ändern unten nur den Code zu haben:

<?php 
phpinfo(); exit; 

Viele Informationen über Ihre Installation wird erscheinen. Der Wert Loaded Configuration File teilt Ihnen mit, welche Datei bearbeitet werden muss, um Ihre PHP-Einstellungen zu ändern.

Wenn alles andere fehlschlägt, können Sie die übermittelten Werte selbst extrahieren; es ist wirklich einfach:

$args = []; //will hold the submitted arguments 
parse_str(file_get_contents('php://input'),$args); 

Von dort verwenden nur $args wie Sie $_POST verwenden würden. Es enthält Ihre Formulareingaben. Seien Sie sich bewusst sein, dass es auch die Eingaben enthalten würde, die Sie normalerweise in $_GET sehen würden, wenn ein „GET“ -Anfrage

+0

Ich habe es gerade versucht, aber es funktioniert nicht, die Seite wird aktualisiert und ich bekomme immer noch eine leere Seite und nichts wird zur Datenbank hinzugefügt. Ich fange an mich zu fragen, ob hier etwas mit meinem Setup nicht stimmt. Könnte jemand versuchen, dies auf ihrer eigenen Maschine laufen zu lassen und zu sehen, ob es ihnen auch einen leeren Bildschirm gibt? – Shady

+0

Was sehen Sie, wenn Sie 'echo file_get_contents (file_get_contents ('php: // input');' am Anfang des Skripts setzen? – BeetleJuice

+0

Warnung: file_get_contents(): Dateiname darf in C: \ wamp64 \ www \ nicht leer sein process.php in Zeile 9 EDIT * habe gerade versucht, dies nach dem Ausfüllen des Formulars zu senden und bekam Warnung: file_get_contents (name = test & email = TEST% 40EMAIL.COM): Fehler beim Öffnen des Streams: Keine solche Datei oder Verzeichnis in C: \ wamp64 \ www \ process.php on line 9 – Shady

-1

gemacht wird „INSERT INTO Benutzer (Name, E-Mail) VALUES ('{$ mysqli-> real_escape_string ($ _ POST [ 'name'])}‘, '{$ mysqli-> real_escape_string ($ _ POST [' E-Mail '])}') "

Versuchen Sie einen umgekehrten Schrägstrich für die Verwendung von "name" und" E-Mail "Attribute. Dies reduziert Mehrdeutigkeiten in Anführungszeichen. Meistens ist das das Problem.

So würde es so aussehen:

"INSERT INTO user(name, email) VALUES ('{$mysqli- 
>real_escape_string($_POST[\'name\'])}','{$mysqli->real_escape_string($_POST[\'email\'])}')" 

Aber ich denke, es wäre am besten Praxis Gebrauch „real_escape_string“ dauern, bis dieser Abfrage. Im Allgemeinen wird der PHP nicht ausgeführt, wenn er in einer Abfragezeichenfolge verwendet wird. So sparen

mysqli- $> real_escape_string ($ _ POST [ 'name'] in einer Variablen UND

mysqli- $> real_escape_string ($ _ POST [ 'E-Mail'] in einer anderen Variablen und dann,

es zu der Abfrage hinzufügen

+0

Meine IDE sagt mir, dass dieser Code falsch ist und ich bekomme einen Parsing-Fehler, wenn ich versuche, es auszuführen. – Shady

+0

Obwohl du versuchst zu helfen, macht das nur eine schlechte Situation. Die Lösung sind vorbereitete Anweisungen mit Platzhalterwerten. – tadman

0

stellt sich heraus, dass es einen Konflikt zwischen meinem WAMP-Server und dem integrierten Server von PhpStorm vorgesehen war, die die IDE ich. verwende ist als @Beetlejuice dort vermutet auch eine war Problem in meiner php.ini-Datei.Dies sollte uncommented sein und auf On gesetzt werden:; enable_post_data_reading = Aus

Vielen Dank an alle, die geholfen haben.

Verwandte Themen