PHP - AJAX - 未通过POST

时间:2016-04-24 12:06:07

标签: php ajax forms

我在将表单的值发布到PHP脚本时遇到问题。表单包含名称,电子邮件,电话,消息+ 2下拉列表等常规字段。我使用AJAX根据第一种形式的选择为第二个列表生成值。

我在发帖前环顾四周,我大多发现使用JQuery for AJAX的问题,这就是我发布这个问题的原因。

问题只发生在我试图回显下拉列表的值时。

以下是完整的源代码:

HTML表单:

<form name="booking" action="assets/php/booking_form.php" onsubmit="return bookingValidate()" method="post">
    <div>
        <label>Some text</label>
        <select name="szolgaltatas" id="szolgaltatas" onchange="getIdopont(this.value)" data-placeholder="..." style="width:100%;" tabindex="5">
            <option value="">...</option>
            <option value="hajvagas">Option 1</option>
            <option value="hajfestes">Option 2</option>
            <option value="alkalmi">Option 3</option>
            <option value="szoli">Option 4</option>
        </select>
    </div>
    <div>
         <label>Some text</label>
         <select name="idopont" id="idopont" data-placeholder="some text" style="width: 100%;" class="" tabindex="5">
         </select>
    </div>
    <div>
        <label>Name</label>
        <input type="text" name="name" placeholder="some text">
    </div>
    <div>
        <label>Phone</label>
        <input type="text" name="phone" placeholder="some text">
    </div>
    <div>
        <label>Email</label>
        <input type="text" name="email" placeholder="some text">
    </div>
    <div>
        <label>Message</label>
        <textarea name="message" placeholder="some text"></textarea>
    </div>
</form>

适用于AJAX的Javascript:

function getIdopont(str) {
if (str == "") {
    document.getElementById("idopont").innerHTML = "";
    return;
} else { 
    if (window.XMLHttpRequest) {
        xmlhttp = new XMLHttpRequest();
    } else {
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange = function() {
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
            document.getElementById("idopont").innerHTML = xmlhttp.responseText;
        }
    };
    xmlhttp.open("GET","assets/php/getidopont.php?q="+str,true);
    xmlhttp.send();
}}

PHP for AJAX:

<?php
$q = utf8_encode($_GET['q']);

$con = mysqli_connect('localhost','user','password','dbname');
if (!$con) {
    die('Could not connect: ' . mysqli_error($con));
}

mysqli_select_db($con,'dbname');
$sql="SELECT * FROM foglalas WHERE foglalt = 'N' AND datum > SYSDATE() AND szolgaltatas = '".$q."'";
$result = mysqli_query($con, $sql);

while($row = mysqli_fetch_array($result)) {
    echo '<option value="' . $row['azon'] . '">' . utf8_encode($row['dolgozo_nev']) . ' - '. $row['datum'] . ' - ' . $row['idopont'] . ' </option>';
}
mysqli_close($con);
?>

用于表单处理的PHP:

<?php
    $szolgaltatas = $_POST['szolgaltatas-lista'];
    $azon = $_POST['idopont-lista'];
    $name = $_POST['name'];
    $phone = $_POST['phone'];
    $message = $_POST['message']; 
    $email_vendeg = $_POST['email'];

    echo "$szolgaltatas\n$azon\n$name\n$phone\n$email_vendeg\n$message";
?>

最后,当我回显值时,$ szolgaltatas和$ azon不包含任何值,其他变量没有这个问题,它们被正确显示。

任何人都可以告诉我导致此问题的原因并且有解决方案/解决方法吗? 谢谢!

2 个答案:

答案 0 :(得分:1)

我在脚本中没有看到任何地方重新定义添加“-lista”的两个变量。

他们应该只是:

$szolgaltatas = $_POST['szolgaltatas'];
$azon = $_POST['idopont'];

答案 1 :(得分:1)

在html页面中检查您的选择标记名称并将其正确放入$_POST["your tag name here "]

只需复制并粘贴您的所有输入并选择标记名称,这种习惯永远不会再次出现此类错误。