2017-08-25 5 views
0

このタスクを実行する方法を網羅的に検索しました。私は、div内のコンテンツをPHP文に処理できる変数に変換する際に問題があります。私はAjaxFormを使ってみました。私はAjaxを試しました。フォーム内にあるdiv内のコンテンツを他のフォームデータと共にデータベースに入れる方法

ここに私のフォームコードは "library.php"というタイトルの下にあります。ここで私はID "入力"との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> 

データを提出するために作成ボタンを使用して進みます、私は、変数を送信しようとAjaxを使用しますLibrary.phpの頭部内にあるスクリプトですDatabase.phpの "プライバシー"。この変数には、前のコードブロックに記述されているdivのテキストが含まれます。これは "Public"または "Private"のいずれかのオプションになります。 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はわかりませんが...なぜ入力コントロールを使用していないのですか?非表示、テキスト、またはテキストエリアのいずれであってもですか?また、作成ボタンのクリックイベントにバインドしていますが、送信ボタンです。preventDefaultを呼び出さないので、コードが実行される前にフォームが送信されている可能性があります。 – upsidedowncreature

+1

あなたのコードはSQLインジェクション攻撃に対して脆弱です。パラメーター化された照会とプリペアドステートメントを使用して、悪意のある入力値を使用して攻撃者がデータベースを侵害しないようにする必要があります。 http://bobby-tables.com/には、PHP/mysqliを使用して質問を安全に書く方法の例と同様に、リスクの説明が記載されています。 – ADyson

答えて

0

フォームための二つのことを、通常の方法をポストバックではなく、AJAXを使用している:

1)あなたは適切にボタンにクリックイベントをバインドされていません - あなたのセレクタが<create>のように要素を探していますコースは存在しません。

2)これが解決したら、ボタンのデフォルトのポストバック動作を防止することを忘れてしまいました。マークアップまたはコードを使用してこれをソートすることができます。マークアップは簡単です:

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

注一意ボタンを識別するためにid属性、およびtype="button"属性 - タイプでない限り、「提出」それは、フォームが通常のポストバックを行うには発生しません。次に、あなたのイベントハンドラは次のようになります。「作成」idを持つ要素を探すためのjQueryを伝え#

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

注意。

もう1つの問題: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

関連する問題