在ajax不起作用的情况下在sql中插入数据


Insert data in sql with ajax not working

我试图使用ajax和php在sql表中插入数据,但它不起作用。我的ajax给我的结果就像它能工作一样,但当我看表时,里面没有。在没有ajax的情况下工作很好,所以我想我的php工作得还可以。

这是代码:

HTML:

<form action="servico.php?p=cadUsr" method="POST" id="frmCadUsr">
    Nome: <input type="text" maxlength="255" name="txtNome" id="txtNome"/>
    Idade: <input type="text" maxlength="3" name="txtIdade" id="txtIdade"/>
    <input type="submit" value="Enviar"/>
</form>

PHP:

    $passo = (isset($_GET['p'])) ? $_GET['p'] : "";

    switch($passo){
        case "cadUsr":
            cadUsr();
        break;
        default:
            getRetorno();
        break;
    }
    function getRetorno(){
        echo "Este texto foi escrito via PHP";
    }
    function cadUsr(){
    require("dbCon.php");
    require("mdl_usuario.php");
        $usr = $_POST["txtNome"];
        $idade = $_POST["txtIdade"];
        $resultado = usuario_cadastrar($con,$usr,$idade);
            if($resultado){
                echo "Cadastro efetuado com sucesso";
            } else {
                echo "O cadastro falhou";
            }
    }
?>

OBS:我需要将带有url参数的表单的操作传递为cadUsr,所以它调用php中的函数。

AJAX:

window.onload = function(){
        var xmlhttp;
        var frm = document.querySelector("#frmCadUsr");
        var url = frm.getAttribute("action");
        var nm = document.querySelector("#txtNome").value;
        var idade = document.querySelector("#txtIdade").value;
        frm.addEventListener("submit",function(e){
            e.preventDefault();
            try{
                if(window.XMLHttpRequest){
                    xmlhttp = new XMLHttpRequest();
                }
                xmlhttp.open("POST",url,true);
                xmlhttp.send("txtNome=" + nm + "&txtIdade="+idade + "&p=cadUsr");
                xmlhttp.onreadystatechange = function(){
                    if(xmlhttp.readyState == 4 && xmlhttp.status == 200){
                        //alert("Deu certo");
                        console.log(xmlhttp.responseText);
                    }
                }
            } catch(err){
                alert("Ocorreu um erro.<br />"+ err);
            }
        });

}

插入数据的PHP函数:

function usuario_cadastrar($conexao,$nome,$idade){

        if($nome == "" && $idade == ""){
            return false;
        }


        $sql = sprintf("insert into usuario (nome,idade) values ('%s',%s)",$nome,$idade);
        $resultado = mysqli_query($conexao,$sql);
            return $resultado;
    }

我认为问题出在这里servico.php?p=cadUsr。您可以使用查询字符串从表单中复制action-属性。如果你从中删除查询字符串,我认为它会起作用。

主要的问题被侯赛因称为:

此:

$passo = (isset($_GET['p'])) ? $_GET['p'] : "";

不会起作用。您正在做一篇文章,无法获取GET变量。

您在value上调用value,这将导致undefined,并且不会在数据库中放入任何数据。

 xmlhttp.send("txtNome=" + nm + "&txtIdade="+idade + "&p=cadUsr");

因此,删除value并将cadUsr变量添加到send函数中的querystring中。将PHP更新为:

$passo = (isset($_POST['p'])) ? $_POST['p'] : "";

它会起作用的!

您可以通过将console.log(xmlhttp.responseText);添加到readystatesuccess函数中来查看回调代码。

发送邮件时,您还需要将请求标头content-type设置为x-www-form-urlencoded。