Нужны советы по обработке и сокрытию формы HTML - PullRequest
0 голосов
/ 28 января 2011

Я хотел бы иметь возможность отправить форму, обработать ее с помощью Javascript, а затем PHP + сделать вызов API и затем представить сообщение с благодарностью или показать массив ошибок с помощью API.

До сих пор я мог сделать этот звонок успешно, с благодарностью, но потом не смог скрыть форму.

http://www.wilsonkeenan.com/learningphp/DoDirectPayment.php

Есть мысли о том, что я делаю не так? Любое руководство будет высоко ценится.

<?php

if (isset($_POST['submitted'])){
session_start();
require_once 'CallerService.php';

/**
 * Get required parameters from the web form for the request
 */
$paymentType =urlencode( $_POST['paymentType']);
$firstName =urlencode( $_POST['firstName']);
$lastName =urlencode( $_POST['lastName']);
$creditCardType =urlencode( $_POST['creditCardType']);
$creditCardNumber = urlencode($_POST['creditCardNumber']);
$expDateMonth =urlencode( $_POST['expDateMonth']);

// Month must be padded with leading zero
$padDateMonth = str_pad($expDateMonth, 2, '0', STR_PAD_LEFT);

$expDateYear =urlencode( $_POST['expDateYear']);
$cvv2Number = urlencode($_POST['cvv2Number']);
$address1 = urlencode($_POST['address1']);
$address2 = urlencode($_POST['address2']);
$city = urlencode($_POST['city']);
$state =urlencode( $_POST['state']);
$zip = urlencode($_POST['zip']);
$countrycode = urlencode($_POST['countrycode']);
$amount = urlencode($_POST['amount']);
//$currencyCode=urlencode($_POST['currency']);
$currencyCode="USD";
$paymentType=urlencode($_POST['paymentType']);

/* Construct the request string that will be sent to PayPal.
   The variable $nvpstr contains all the variables and is a
   name value pair string with & as a delimiter */
$nvpstr="&PAYMENTACTION=$paymentType&AMT=$amount&CREDITCARDTYPE=$creditCardType&ACCT=$creditCardNumber&EXPDATE=".         $padDateMonth.$expDateYear."&CVV2=$cvv2Number&FIRSTNAME=$firstName&LASTNAME=$lastName&STREET=$address1&CITY=$city&STATE=$state".
"&ZIP=$zip&COUNTRYCODE=$countrycode&CURRENCYCODE=$currencyCode";



/* Make the API call to PayPal, using API signature.
   The API response is stored in an associative array called $resArray */
$resArray=hash_call("doDirectPayment",$nvpstr);

/* Display the API response back to the browser.
   If the response from PayPal was a success, display the response parameters'
   If the response was an error, display the errors received using APIError.php.
   */
$ack = strtoupper($resArray["ACK"]);

if($ack!="SUCCESS")  {
    $_SESSION['reshash']=$resArray;
    $location = "APIError.php";
         header("Location: $location");
   } elseif ($ack =="SUCCESS") {
       echo '<h1>Thank you</h1>';
   }
}
    else {
     // Display Form
    }
    ?>

<form method="POST" id="donate" action="" name="DoDirectPaymentForm">
<!--Payment type is <?=$paymentType?><br> -->
<input type=hidden name=paymentType value="<?php echo $paymentType?>" >
    <fieldset>
    <div>
        <label class="label">First Name:</label>
        <input type=text size=36 maxlength=32 name=firstName class="required" value=John>
    </div>
    </div>
<input type="hidden" name="submitted" value="1">
<input type=Submit value=Submit>
</div>

Ответы [ 3 ]

1 голос
/ 28 января 2011

Ваша скобка else закрыта перед формой, попробуйте это:

else { /*Display Form*/ ?>


<form method="POST" id="donate" action="" name="DoDirectPaymentForm">
<!--Payment type is <?=$paymentType?><br> -->
<input type=hidden name=paymentType value="<?php echo $paymentType?>" >
    <fieldset>
    <div>
        <label class="label">First Name:</label>
        <input type=text size=36 maxlength=32 name=firstName class="required" value=John>
    </div>
    </div>
<input type="hidden" name="submitted" value="1">
<input type=Submit value=Submit>
</div>
<?php } ?>
0 голосов
/ 28 января 2011

Как сказал FatherStorm, jQuery - намного более чистый способ сделать это.Посмотрите на вызов AJAX.Его очень просто использовать.

Но если вы по какой-то причине не хотите, вы можете использовать сеансовые переменные, чтобы решить, отображать ли форму.

if($ack == 'SUCCESS')
    $_SESSION['success'] = true;
else
{
    //bunch of processing here for whatever your api returns
    $_SESSION['success'] = false;
}

if($_SESSION['success']): ?>
    Thank You
<?php else: ?>
    <form>...</form>
<?php endif; ?>
0 голосов
/ 28 января 2011

Я предполагаю, что вы используете классический Javascript, а не библиотеку, такую ​​как jQuery.поэтому давайте предположим, что ваша форма находится в DIV с идентификатором myForm, поэтому в классическом javascript

document.getElementById('myForm').style.display='none';

в jQuery это будет $('#myForm').hide();

Рассмотрим jQuery.

теперь, чтобы обработать несколько возможных результатов в Javascript, вы захотите, чтобы ваша страница AJAX отображала строку в кодировке JSON, а не только текст результата rraw, поэтому она не будет отображаться "Поздравления";это было бы больше похоже на

echo json_encode(array('result'=>'success','html'=>'Congratulations'));

и на стороне javascript (в jQuery, опять же, потому что это быстрее)

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

$.getJSON("handleAjax.php", { paymentType: $('#paymentType').val(), name: $('#name').val(),[...more_fields_here...]}, function(data){
    alert( data.html);
    if(data.result=='success'){
       $('#myForm').hide();
    }
    });

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

if(Condition){
 include('/templates/paymentForm.phtml');
}else{
  include('/templates/paymentThanks.phtml');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...