2017-08-05 1 views
0

Mit React-Native und fetch() möchte ich einen neuen Datenbankeintrag mit einem PHP-Skript erstellen. Das PHP-Skript selbst funktioniert, getestet wurde es erfolgreich mit einer HTML-Seite. Aber ich kann meine Javascript fetch() Version noch nicht funktionieren.

// App.js  

    const dbData = new FormData(); 
    dbData.append(
     'fileName', 'fileNameTest', 
    ); 

    fetch('http://myurl.com/createDatabaseEntry.php', { 
     headers: { 
     'Content-Type': 'multipart/form-data', 
     }, 
     method: 'POST', 
     body: dbData, 
    }).then((res) => { 
     console.log('Database response: ', res); 
    }) 
    .catch((error) => { 
     console.log('DB error: ', error); 
    }); 

BTW: Netzwerkstatus in den Protokollen ist immer 200.

Die PHP-Seite:

// createDatabaseEntry.php 

$fileName = $_POST['fileName']; 
$link = mysqli_connect('localhost', 'login', 'password', 
'myDatabase'); 
$sql = "INSERT INTO files (fileName) VALUES ('$fileName')"; 

Es ist wahrscheinlich über die Variablen vorbei mit Abruf- oder die dbData.append()?

+0

Überprüfen Sie die Registerkarte Netzwerk zu lesen, um zu sehen, welche Anforderungsparameter gesendet werden. – Barmar

+0

Sie brauchen die Option 'headers:' nicht, sie sendet diesen Header standardmäßig, wenn Sie 'FormData' verwenden. – Barmar

+0

Wo "echo" du eine Antwort von 'php'? – guest271314

Antwort

0

Es gibt mindestens zwei Probleme auf Code

  1. Keine Antwort ist echo ed von php

  2. Sie Loggen Sie nur Response Objekt, wo Sie wahrscheinlich erwarten würden, Response.json(), Response.text(),zu verwendenoder Response.blob() Antwort von php als JSON, einfacher Text, ein ArrayBuffer oder ein Blob


fetch('http://myurl.com/createDatabaseEntry.php', { 
    method: 'POST', 
    body: dbData, 
}) 
.then(res => res.text()).then(text => console.log(text)) 
.catch(error => console.error('DB error: ', error)); 
+0

Danke. Ich habe mich gefragt, warum meine Konsole keinen tatsächlichen Fehler ausgegeben hat, selbst wenn ich sie protokolliert habe. Damit konnte ich herausfinden, dass meine DB einen ganzzahligen Wert benötigt und ich eine Zeichenfolge übergeben habe. –

0

Wie ich sehe, Sie eine Verbindung mit der Datenbank, aber nicht ausgeführt INSERT-Anweisung. Bitte vergessen Sie nicht, 1) Argumente entweichende 2) Fehlerverarbeitung

$filename = mysqli_real_escape_string($link, $fileName); 
$sql = "INSERT INTO files (fileName) VALUES ('$filename')"; 
if (true === mysqli_query($link, $sql)) { 
    echo 'Insert done'; 
} else { 
    echo 'Error: ' . mysqli_error($link); 
} 
+0

Er sagte, es funktioniert, wenn er es mit einem HTML-Formular testet. Wahrscheinlich hat er das einfach nicht in Frage gestellt. – Barmar