2017-08-25 146 views
0

我已經詳盡地搜索了完成此任務的方法。我在將div內的內容轉換爲可以處理爲php語句的變量時遇到了問題。我曾嘗試使用AjaxForm我曾嘗試AJAX。如何將表單中的div內容與其他表單數據一起放入數據庫中

這是我的表單代碼,它是在「library.php」標題下。這裏我有一個ID爲「input」的div。我試圖在這個div中獲取數據,這個數據可以是「Public」或「Private」選項。然後,我將繼續使用該按鈕創建的數據提交給database.php中

<form method="post" action="library.php" id="form3"> 
<a id="libOptPP" class="select">      
    **<div id="input" class="input" name="Privacy">    
    </div>** 
    <div id="libOptPP2" class="select-options"> 
    <ul> 
    <li id="pub" value="1"><span>Public</span> (logo) </li> 
    <li id="priv" value="2" class="selected"><span>Private</span></li> 
    </ul>      
    </div> 
</a> 
<div class="libOptCS"> 
    <span class="bbCT"> 
    <button type="submit" name="create"> Create </button> 
    </span> 
</div> 
</form> 

這裏是位於Library.php的頭部內的腳本,我會嘗試使用Ajax發送變量「隱私」的Database.php。這個變量將包含在前面的代碼塊中聲明的div的文本。這將是選項「公共」或「私人」。我沒有使用div的ID名,而是使用類來選擇它是「.select .input」。

<script> 
$(document).ready(function main() { 
    $("create").click(function() {  

    var privacy = $(.select .input).text();      
    .ajax({ 
    type: "POST", 
    url: ../../database/database.php, 
    data: "privacy="+privacy, 
    dataType: "html", 
    async: false, 
    success: function(data) { 
    alert(data); 
    } 
    }); 
    }); 
}); 
</script> 

這是用於將表單數據輸入到我的數據庫的php代碼。一旦我們點擊前面代碼中所述的創建按鈕,這將激活將數據傳輸到適當的表格和後續行中。

if (isset($_POST["create"])) { 
$Privacy = mysqli_real_escape_string($db, $_POST['privacy']); 
$ETH = mysqli_real_escape_string($db, $_POST['ETH']); 
$Email_Phone_Number = $_SESSION['Email_Phone_Number']; 

if ($Privacy === "Public") { 
    $sql = "INSERT INTO library (Title, Privacy, Bio, User_iD) 
     VALUES ('$ETH', '$Privacy', 'testbio', (SELECT User_iD FROM logstart WHERE Email_Phone_Number='$Email_Phone_Number'))"; 
     mysqli_query($db, $sql); 
} 
if ($Privacy === "Private") { 
$sql = "INSERT INTO library (Title, Privacy, Bio, User_iD) 
     VALUES ('$ETH', '$Privacy', 'testbio', (SELECT User_iD FROM logstart WHERE Email_Phone_Number='$Email_Phone_Number'))"; 
     mysqli_query($db, $sql); 
} 
if (mysqli_query($db, $sql)) { 
    echo "YES!"; 
    } else { 
    echo "No!"; 
    } 
} 

某處沿着該變量未被識別。當我按下「創建」按鈕時會創建「未識別的索引:隱私」彈出窗口。換句話說,$ _POST ['privacy']不包含我需要的數據,它應該是Public或Private,以便我可以識別並進一步使用其餘的代碼。

+1

不知道PHP,但...爲什麼你不使用輸入控件 - 無論是隱藏的,文本的還是textarea?此外,你綁定到創建按鈕的點擊事件,但它是一個提交按鈕,你沒有調用preventDefault,所以也許表單在你的代碼運行之前被提交? – upsidedowncreature

+1

您的代碼易受SQL注入攻擊。您應該使用參數化查詢和準備語句來幫助防止攻擊者通過使用惡意輸入值來危害數據庫。 http://bobby-tables.com/給出了風險的解釋,以及如何使用PHP/mysqli安全編寫查詢的一些示例。 – ADyson

回答

0

您的形式張貼回到正常的方式,而不是使用AJAX,因爲兩件事情:

1)您沒有正確結合的Click事件的按鈕 - 你的選擇是尋找元素,如<create>其中當然不存在。

2)一旦解決了這個問題,您忘記了防止按鈕的默認回發行爲。您可以使用標記或代碼對此進行排序。標記是簡單的:

<button id="create" type="button" name="create"> Create </button> 

注意id屬性唯一標識的按鈕,該type="button"屬性 - 除非該類型是「提交」,那麼就不會引起形式做一個正常的回發。然後,事件處理程序應該是:

$("#create").click(function() { 

注意#告訴jQuery來尋找id爲「創造」的元素。

另一個問題:您的PHP包含邏輯錯誤。您爲相同的查詢多次調用mysqli_query,而不是檢查早期查詢的結果。您的if語句對隱私值的處理似乎也是多餘的 - 您不會因此而改變查詢。這是你需要怎麼做:

if (isset($_POST["create"])) { 
$Privacy = mysqli_real_escape_string($db, $_POST['privacy']); 
$ETH = mysqli_real_escape_string($db, $_POST['ETH']); 
$Email_Phone_Number = $_SESSION['Email_Phone_Number']; 

$sql = "INSERT INTO library (Title, Privacy, Bio, User_iD) 
     VALUES ('$ETH', '$Privacy', 'testbio', (SELECT User_iD FROM logstart WHERE Email_Phone_Number='$Email_Phone_Number'))"; 
$result = mysqli_query($db, $sql); //return the result of the query for checking 

if ($result === true) { 
    echo "YES!"; 
    } else { 
    echo "No!"; 
    } 
} 

另見上文重新SQL注入漏洞我的意見,這是不直接關係到你的問題,但確實需要的迫切關注。

編輯 你的腳本還有一些其他問題,包括語法錯誤,這可能會阻止它的工作。這裏有一個固定/改進版本:

$(document).ready(function() { 
    $("#create").click(function() { 

    var privacy = $(".select .input").text(); 

    $.ajax({ 
     type: "POST", 
     url: "../../database/database.php", 
     data: { "privacy": privacy }, 
     dataType: "html", 
     success: function(data) { 
     alert(data); 
     } 
    }); 
    }); 
}); 

有缺失的講話標誌着一輪的變量,手動創建的數據串(冒着編碼問題,如果你傳遞一個對象,它的jQuery可以照顧你),關閉其不需要名稱和不必要的使用async: false(它只是鎖定瀏覽器沒有很好的理由)。


+0

這有所幫助,但我仍然在隱私問題上遇到不明身份的索引問題。換句話說,我的問題仍然存在於無法賦予這個php變量的價值。 –

+0

實際上,您的腳本看起來更加密切,您的代碼中存在一些明顯的問題,包括語法錯誤,這將意味着腳本沒有運行,因此可能仍然以正常方式回傳。如果您檢查瀏覽器的控制檯,您可能會在運行代碼時看到它們。我將立即用固定版本編輯問題 – ADyson

相關問題