2017-04-17 126 views
0

我想在彈出窗口中顯示一個窗體,當我點擊「添加」按鈕時。所以我使用模式來顯示PHP表單,但是當我試圖將插入到表單中的數據保存到數據庫中時,它不起作用。當我點擊保存,一個奇怪的URL出來像這樣:?將數據從模態插入到數據庫中

.../pembelitkatakutest.php圖像= 025pikachu_xy_anime_3.png &節省=

我不知道,但我認爲URL不應該有「image = 025pikachu_xy_anime_3.png &」部分。

我的代碼如下:

<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#myModal">Add Tongue Twister</button><br><br><br> 

<!-- Modal --> 
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true"> 
<div class="modal-dialog"> 
<div class="modal-content"> 
    <div class="modal-header"> 
    <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">&times;</span><span class="sr-only">Close</span></button> 
    <h4 class="modal-title" id="myModalLabel">Add Tongue Twister</h4> 
    </div> 
    <div class="modal-body"> 
    <form method = "POST"> 
     <div class="form-group"> 
      <label for="usr">Please Choose a Picture:</label> 
      <input type="file" name="image"> 
      <script type="text/javascript"> 
      $(document).ready(function() { 
      $(window).keydown(function(event){ 
      if(event.keyCode == 13) { 
      event.preventDefault(); 
      return false; 
      } 
      }); 
      }); 
      </script> 
     </div> 
     <div class="form-group"> 
      <label for="pwd">Please write the tongue twister:</label> 
      <input type="text" rows = "3" class="form-control"> 
     </div> 
    </div> 
    <div class="modal-footer"> 
    <button type="button" class="btn btn-default" data-dismiss="modal">Close</button> 
    <button type="submit" class="btn btn-primary" name="save">Save changes</button> 
    <?php if(isset($_POST['save'])) 
    { 
     //target folder to keep the media 
     $target = "images/".basename($_FILES['image']['name']); 

     //get all submitted data from form 
     $image = $_FILES['image']['name']; 
     $text = $_POST['text']; 

     if(!empty($_FILES['image']['name'])) 
     { 
     $sql = "INSERT INTO pembelitkataku(image, text) VALUES ('$image','$text')"; 
     mysqli_query($db, $sql); 
     } 
     else 
     { 
     $message = "Sila pilih semua fail"; 
     echo "<script type='text/javascript'>alert('$message');</script>"; 
     } 

     move_uploaded_file($_FILES['image']['tmp_name'], $target); 
    } 
    ?> 
    </div> 
    </form> 
</div> 

我可以知道哪裏出了問題在我的代碼,我能做些什麼來解決這個問題?

如果可能的話,我想避免使用Javascript,因爲它很容易理解。

謝謝。

+0

你的代碼容易受到[** SQL注入攻擊**](https://en.wikipedia.org/wiki/SQL_injection)的影響。你應該使用[** mysqli **](https://secure.php.net/manual/en/mysqli.prepare.php)或[** PDO **](https://secure.php.net/ manual/en/pdo.prepared-statements.php)準備帶有綁定參數的語句,如[**這篇文章**]所述(https://stackoverflow.com/questions/60174/how-can-i-prevent-sql步噴射功能於PHP)。 –

+0

你還應該確保在插入數據庫之前img上傳沒有出錯 – OldPadawan

回答

1

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

因爲默認情況下你的代碼正在GET請求,但你的PHP代碼要接收POST請求。你可以在這行代碼中看到它:

if(isset($_POST['save'])) 
+0

我編輯了發佈方法,但是表單無法捕獲圖像,因爲如果圖像沒有上傳到 if(! ($ _FILES ['image'] ['name'])) { $ sql =「INSERT INTO pembelitkataku(image,text)VALUES('$ image','$ text')」; mysqli_query($ db,$ sql); } else { $ message =「Sila pilih semua fail」; echo「」; } 代碼行@ F1dzh。我可以知道爲什麼嗎? –

+0

好吧,我忘記了'enctype =「multipart/form-data」'請將此添加到表單中!我更新了以前的代碼! :) – F1dzh

+0

這很好@ F1dzh!非常感謝你,祝你一個愉快的一天:D –