2017-03-17 8 views
0

テキストとファイルの簡単な更新フォームを作成しました。これは私のコードですPHP - ファイルを正常に更新しましたが、テキストを更新できませんでした。

<?php 
require("config.php"); 
$id = $_GET['id']; 

$sql = "SELECT * FROM contracts WHERE id= '$id'"; 
$result = $con->query($sql); 
while ($row = $result->fetch_assoc()) 
{ 

?> 

<html><head><title>test</title></head> 
<body> 

<form method="POST" action="" enctype="multipart/form-data"> 

    ID: <?php echo $id; ?><br> 
    <input type="hidden" name="id" value="<?php echo $id; ?>" /> 

    Contract Title 
    <input type="text" name="contract_title" value="<?php echo $row['contract_title']; ?>" /><br> 

    Upload File: 
    <?php echo $row['filename'] ?> 
    <input type="file" name="upload"/><br> 
    <input type="submit" name="edit" value="Submit"/> 
</form> 
</body> 
</html> 

<?php 
} 

if(isset($_POST['edit']) ) 
{ 

if ($_FILES['upload']['size'] != 0){ 

$contract_title = $con->real_escape_string($_POST['contract_title']); 

$filename = $con->real_escape_string($_FILES['upload']['name']); 
$filedata= $con->real_escape_string(file_get_contents($_FILES['upload']['tmp_name'])); 
$filetype = $con->real_escape_string($_FILES['upload']['type']); 
$filesize = intval($_FILES['upload']['size']); 

$query = "UPDATE `contracts` set `filename` = '$filename',`filedata` = '$filedata', `filetype` = '$filetype',`filesize` = '$filesize' WHERE `id` = '$id' " ; 

if ($con->query($query) == TRUE) { 
echo "<br><br> New record created successfully"; 
} else { 
    echo "Error:<br>" . $con->error; 
} 

} else { 

$contract_title = $con->mysqli_real_escape_string($_POST['contract_title']); 

$filename = $con->real_escape_string($_FILES['upload']['name']); 
$filetype = $con->real_escape_string($_FILES['upload']['type']); 
$filesize = intval($_FILES['upload']['size']); 

$query = "UPDATE `contracts` set `filename` = '$filename', `filetype` = '$filetype',`filesize` = '$filesize' WHERE `id` = '$id' " ; 

if ($con->query($query) == TRUE) { 
echo "<br><br> New record created successfully"; 
} else { 
echo "Error:<br>" . $con->error; 
} 

} 
$con->close(); 
} 

?> 

投稿ボタンをクリックすると、テキスト以外のファイルアップロードが正常に更新されました。それはアップロードファイルプロセスと同じ問題をするため、メソッドから取得するためにポストから変更する必要はありません。これをどうやって解決するのですか?

+0

あなたのコードはSQLインジェクションに対して脆弱です。 – hassan

+0

'$ filedata'をエコーし​​た場合は何も印刷されますか? – hassan

+0

@hassanそれは、行7の未定義の変数を言いました。 – MechaMetalHead

答えて

0

このコードは何時間も間違いを探していますが、これは私が逃した単純な間違いです!

$query = "UPDATE `contracts` set `contract_title` = '$contract_title', `filename` = '$filename',`filedata` = '$filedata', `filetype` = '$filetype',`filesize` = '$filesize' WHERE `id` = '$id' " ; 

私はクエリにcontract_titleを入力しませんでした。私の神

0

おそらく、$ファイル名が正しく取得されていない可能性があります。デバッグして$ _FILES ['upload'] ['name']を表示して、何を得るかを確認してください(json_encodeとアクセスしようとしている結果を見ることができます)。コードの残りの部分は大丈夫だと思われる

+0

$ filenameは既に正しいですし、$ _FILES ['upload'] ['name']を印刷しようとすると、未定義のインデックスのアップロードが表示されます。 – MechaMetalHead

関連する問題