2017-08-05 12 views
0

React-Nativeとfetch()を使用して、PHPスクリプトを使用して新しいデータベースエントリを作成したいとします。 PHPスクリプト自体は動作しており、htmlページで正常にテストされています。 しかし、Javascriptのfetch()バージョンはまだ動作しません。

// 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); 
    }); 

はところで:

// createDatabaseEntry.php 

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

それだ多分)(フェッチまたはdbData.appendで変数を渡すことについて:ログのネットワークステータスが200

PHP側は常にありますか?

+0

は、リクエストパラメータが送信されているものを見るために[ネットワーク]タブを確認してください。 – Barmar

+0

'headers:'オプションは必要ありません。 'FormData'を使用すると、デフォルトでそのヘッダを送信します。 – Barmar

+0

'' php'からの応答を 'echo'しますか? – guest271314

答えて

0

コード

  1. 少なくとも二つの問題は、応答がphp

  2. からecho編ではありませんがありますオブジェクトのみを使用してください。Response.json()Response.text()、、JSONとしてプレーンテキストをphpからの応答を読むためまたはResponse.blob()ArrayBufferまたは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

ありがとうございます。私はなぜ私のコンソールが実際のエラーを出力しなかったのだろうと思っていました。私が知ることで、私のDBは整数値を必要とし、文字列を渡しました。 –

0

私が見てきたように、データベースに接続しましたが、INSERT文は実行しませんでした。 エスケープ 1)引数を忘れないでください 2)エラー処理

$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

彼はHTML形式でテストするときに動作すると言いました。彼はたぶんそれを質問から外しました。 – Barmar