2013-06-22 4 views
0

Итак, я уверен, что многие люди уже спрашивали об этом, но я не видел никаких реальных ясных ответов. Мне нужно, чтобы захватить переменную, которая у меня уже есть значение для .... вот мой пример:PHP Пользовательские переменные для IPN

<?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, но я добавил * линию в себе.

Мне нужна эта переменная, которая будет передана в paypal, чтобы я обновлял мою базу данных через ipn.php. Вот область обновления MYSQL для 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']); 
    $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 в ВСТАВИТЬ части тузда вставка , он не вставляет фактическую переменную, она просто делает это 0.

Надеюсь, я сделал это достаточно ясно для всех, могу ли я, пожалуйста, немного поработать над тем, как сделать эту работу должным образом.

ответ

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')"; 

Надеюсь, все это поможет, спасибо за ваше время.

+0

Хорошо ... так что это сработало для песочницы .... теперь у меня проблемы с живой версией этого ... grrrr .... lol. –

0

Изменить

$dream_id = $_POST['dream_id']; 

в

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

Если вы посмотрите внимательно (и если я правильно помню) есть точка в конце поля пользовательского значения системы PayPal. Указание переменной на целое число устраняет эту проблему, а также защищает ее от SQL injection. Вы можете больше узнать о методе машинного перевода в PHP here.

+0

Должен ли я добавлять dream_id под пользовательские переменные при создании кнопки, или я могу просто добавить его в кодировку, как я уже упоминал выше? Но да, я изменю это, чтобы отличить его как целое, спасибо. –

+0

Просто изменить строку вашего кода должно быть хорошо. Я не делаю много вещей в самом PayPal, поэтому может быть какая-то настройка или настройка, о которых я не знаю, чтобы исправить это. –