$ _POST数组为空,我得到了未定义的变量错误

问题描述:

Sorry to ask it again, but I checked almost all the q&a's on the topic and still couldn't solve it. Here is my form.php and creditform.php

Edit1.Changed the .get to .post

Edit2.I'm getting errors of undefined variable "name" "email" "address" "income" etc (in short for all of them) in creditform.php What I want to do is just insert all the inputs into the table in db.

HTML

<!-- End crumbs-->
            <div class="container wrap wow fadeInUp">
            <div class="row">
            <div class="col-sm-5 col-md-6 left-app">
            <form id="form" action="php/creditform.php" method="post">
                <input type="text" placeholder="Name" name="name" required>
                <input type="email" placeholder="Email"  name="email" required>
                <input type="text" placeholder="Address"  name="address" required>
                <input type="number" placeholder="Monthly income before taxes"  name="income" required>
                <input type="number" placeholder="Amount Needed"  name="amount_needed" required>
                <input type="number" placeholder="Phone"  name="phone" required>
             <div class="row">
             <div class="container">
                <input type="submit" name="submit" value="Submit" class="button"></div></div>
             <div id="result"></div>  
            </form> 
            </div>
                <script>
                $(document).ready(function($) {
                   'use strict';

                $('#form').submit(function(event) {  
                   event.preventDefault();  
                   var url = $(this).attr('action');  
                   var datos = $(this).serialize();  
                   $.post(url, datos, function(resultado) {  
                   $('#result').html(resultado);  
                   });  
               });
                </script>

FORM.PHP

<?php

include('db.config.php');

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
   $name = $email = $address = $income = $amount_needed = $phone = '';

if(isset($_POST['submit'])){

   $name = addslashes($_POST['name']);
   $email = addslashes($_POST['email']);
   $address = addslashes($_POST['address']);
   $income = addslashes($_POST['income']);
   $amount_needed = addslashes($_POST['amount_needed']);
   $phone = addslashes($_POST['phone']);

// check form fields
if(empty($name)){
    $error .= 'Enter name <br />';
}
if(empty($email)){
    $error .= 'Enter email <br />';
}
// check if errors exist
if(!empty($error)){
    echo $error;    
} else {
    // process form as normal   

    $sql = "INSERT INTO `" . DBN . "`.`creditapp` (`name`, `email`, `address`, `income`, `amount_needed`, `phone`) VALUES ('$name', '$email', '$address', '$income', '$amount_needed', '$phone')";
    $db->Query($sql);
}
}
} 
print_r($_POST);

?>

CREDITFORM.PHP

<?php
if(isset($_POST['submit'])){

   $name = $_POST['name'];
   $email = $_POST['email'];
   $address = $_POST['address'];
   $income = $_POST['income'];
   $amount_needed = $_POST['amount_needed'];
   $phone = $_POST['phone'];
}
print_r($_POST);


?>

It's obvious that I'm missing something, please correct me... Thanks for your time

Okay, I practiced more on ajax - json - php and in the end this was my solution and my latest code.

Thanks for all answers and suggestions. Hope this also helps to someone.

Still open to any kind of advice to improve.

<?php

include('db.config.php');

if(isset($_POST['submit'])){


$name = addslashes($_POST['name']);
$email = addslashes($_POST['email']);
$address = addslashes($_POST['address']);
$income = addslashes($_POST['income']);
$amount_needed = addslashes($_POST['amount_needed']);
$phone = addslashes($_POST['phone']);

// process form as normal   

$sql = "INSERT INTO `" . DBN . "`.`creditapp` (`name`, `email`, `address`, `income`, `amount_needed`, `phone`) VALUES ('$name', '$email', '$address', '$income', '$amount_needed', '$phone')";
$db->Query($sql);

die();

<div class="container wrap wow fadeInUp">
     <div class="row">
     <div class="col-sm-5 col-md-6 left-app">
        <form id="form" action="creditapp.php" method="post">
          <input type="text" placeholder="Name" name="name" id="name" required>
          <input type="email" placeholder="Email"  name="email" id="email" required>
          <input type="text" placeholder="Address"  name="address" id="address" required>
          <input type="text" placeholder="Monthly income before taxes" id="income" name="income" required>
          <input type="text" placeholder="Amount Needed"  name="amount_needed" id="amount_needed" required>
          <input type="text" placeholder="Phone"  name="phone" id="phone" required>
        <div class="row">
        <div class="container">
          <input type="submit" name="submit" value="Submit" class="button sub"></div>
        </div>
        </form> 
        </div>

   <script>
   $(document).ready(function() {

   $('.sub').click(function(e){
       e.preventDefault();
        var name = $('#name').val(),
            email = $('#email').val(),
            address = $('#address').val(),
            income = $('#income').val(),
            amount_needed = $('#amount_needed').val(),
            phone = $('#phone').val();


        $.ajax({
            url: "creditapp.php",
            type: "POST",
            data: {
                name: name,
                email: email,
                address: address,
                income: income,
                amount_needed: amount_needed,
                phone: phone,
                submit: "submit"
            }

            }).done(function(msg){
              $('.right-info').html('<pre>' + msg + '</pre>');
            })
       })
   });
</script>

The problem you are having is with your javascript. You wait for the submit and than you do an ajax GET request, you need a POST.

<script>
            $(document).ready(function($) {
               'use strict';
            $('#form').submit(function(event) {  
               event.preventDefault();  
               var url = $(this).attr('action');  
               var datos = $(this).serialize();  
               $.post(url, datos, function(resultado) {  
               $('#result').html(resultado);  
               });  
           });
            </script>

Here is a simple Ajax call to a Php File by an event : Click on a button.

In your example you must use POST method because you use :

$_POST['something'];

Javascript client side :

 $("body").on("click", "#mybutton", function() {
            var mydata = $("#form").serialize();
            $.ajax({
                type: "POST",
                url: "/api/api.php",
                data: {data : mydata},
                timeout: 6e3,
                error: function(a, b) {
                    if ("timeout" == b) $("#err-timedout").slideDown("slow"); else {
                        $("#err-state").slideDown("slow");
                        $("#err-state").html("An error occurred: " + b);
                    }
                },
                success: function(a) {
                    var e = $.parseJSON(a);
                    if (true == e["success"]) {
                        $("#result").html(e['message']);
                        // here is what you want, callback Php response content in Html DOM
                    }
                }
            });
            return false;
        });

Next in your Php code simply do after any success function :

if ($result) {
            echo json_encode(array(
                'success' => true,
                'msg' => "Nice CallBack by Php sent to client Side by Ajax Call"
            ));
        }

You need to send a POST request for the $_POST array to have anything in it.

$.get(url, datos, function(resultado) {  
    $('#result').html(resultado);  
});

This sends a GET request (check $_GET). You want to use $.post here instead.

$.post(url, datos, function(resultado) {  
    $('#result').html(resultado);  
});