0

わかりましたので、多くの人がすでにこれを尋ねていると確信していますが、本当に明確な答えはありません. 私はすでに値を持っている変数をキャプチャする必要があります....ここに私の例があります:

<?php

$data_p = mysql_query("SELECT * FROM `dreams`") or die(mysql_error());

while($info = mysql_fetch_array( $data_p )) {
    <table>
        <tr>
            <td><?php echo $info['first']; ?> <?php echo $info['last']; ?></td>
            <td><?php echo $info['city']; ?> <?php echo $info['state']; ?></td>
            <td><?php echo $info['dream']; ?></td>
            <td>$<?php echo $info['donation_goal']; ?></td>
            <td>
                <form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_top">
                <input type="hidden" name="cmd" value="_s-xclick">
                <input type="hidden" name="hosted_button_id" value="2HGLK2WGELUNG">
****************<input type="hidden" name="dream_id" value="<?php echo $info['dream_id']; ?>">
                <input type="image" src="images/donatebutton.png" id="donate" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
                <img alt="" border="0" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" width="1" height="1">
                </form>
            </td>
        </tr>
    </table
}

これは次のように示します。

http://www.dreamsurreal.com/images/example.jpg

* *がすべて入っている行は、私が問題を抱えている場所です。

Paypal.com でボタンを作成しましたが、自分で*行を追加しました。

データベースがipn.phpを介して更新されるように、この変数をpaypalに渡す必要があります。以下は、ipn.php の MYSQL 更新領域です。

// add this order to a table of completed orders
    $payer_email = mysql_real_escape_string($_POST['payer_email']);
    $mc_gross = mysql_real_escape_string($_POST['mc_gross']);
    $dream_id = $_POST['dream_id'];
    $sql = "INSERT INTO orders VALUES 
            (NULL, '$txn_id', '$payer_email', '$mc_gross', '$dream_id')";

しかし、何らかの理由で $dream_id = $_POST['dream_id'] を追加し、$dream_id を mysql 挿入の INSERT 部分に追加しても、実際の変数は挿入されず、0 になります。

これが誰にとっても十分に明確になったことを願っています。これを適切に機能させる方法について少し助けていただけませんか。

4

2 に答える 2

0

変化する

$dream_id = $_POST['dream_id'];

$dream_id = (int)$_POST['dream_id'];

よく見ると (私の記憶が正しければ)、PayPal のカスタム値フィールドの最後にドットがあります。変数を整数に型キャストすると、この問題が修正され、 SQL インジェクションから保護されます。PHP での型キャストの詳細については、こちらを参照してください。

于 2013-06-22T23:31:40.783 に答える
0

全員が機能しました....わかりましたので、その方法は次のとおりです。

変数を追加していないボタン スクリプトを次に示します。

    <form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_top">
    <input type="hidden" name="cmd" value="_s-xclick">
    <input type="hidden" name="hosted_button_id" value="2HGLK2WGELUNG">
    <input type="image" src="images/donatebutton.png" id="donate" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
    <img alt="" border="0" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" width="1" height="1">
    </form>

この行をフォームに追加してください....

<input type="hidden" name="item_number" value="<?php echo $MY_VARIABLE; ?>">

$MY_VARIABLE を独自の変数に置き換えます。

ボタンの新しいコードは次のようになります

    <form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_top">
    <input type="hidden" name="cmd" value="_s-xclick">
    <input type="hidden" name="hosted_button_id" value="2HGLK2WGELUNG">
    <input type="hidden" name="item_number" value="<?php echo $MY_VARIABLE; ?>">
    <input type="image" src="images/donatebutton.png" id="donate" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
    <img alt="" border="0" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" width="1" height="1">
    </form>

その後、ipn.php でこの領域を変更します

// add this order to a table of completed orders
    $payer_email = mysql_real_escape_string($_POST['payer_email']);
    $mc_gross = mysql_real_escape_string($_POST['mc_gross']);
    $sql = "INSERT INTO orders VALUES 
            (NULL, '$txn_id', '$payer_email', '$mc_gross')";

これらを追加します(整数を使用しているため、正しいタイプであることを確認しています)

$MY_VARIABLE = (int)$_POST['item_number'];

$sql = "INSERT INTO orders VALUES 
    (NULL, '$txn_id', '$payer_email', '$mc_gross', '$MY_VARIABLE')";

すべての修正後、この領域全体は次のようになります。

    // add this order to a table of completed orders
    $payer_email = mysql_real_escape_string($_POST['payer_email']);
    $mc_gross = mysql_real_escape_string($_POST['mc_gross']);
    $dream_id = (int)$_POST['item_number'];
    $sql = "INSERT INTO orders VALUES 
            (NULL, '$txn_id', '$payer_email', '$mc_gross', '$dream_id')";

これがすべてのお役に立てば幸いです。お時間をいただきありがとうございます。

于 2013-06-23T21:13:23.563 に答える