大家好我是php的新手。 当用户输入产品名称需要验证产品是否有效时,我一直在试用这个东西。 为此目的,我在输入文本时使用了onchange事件.onchange函数将调用javascript函数。从javascript函数我调用同一个文件中的php。所以当我输入产品名称时,不知何故php函数没有用。
这是我的代码:
<?php
include 'conf.php';//it contains the php database configuration
session_start();
$quantityRequired=0;
$productName_error="";
if(is_ajax()){
if(isset($_POST["productName"])){
$productName=$_POST["productName"];
$row=mysqli_query($conn,"SELECT * from OrderDetails where ProductName='".$productName."'");
if($row)
{
$result=mysqli_fetch_assoc($row);
$quantityRequired=$result["Quantity"];
}
else
{
$productName_error="The product name is not valid or product does not exist";
echo $productName_error;
}
}
}
function is_ajax() {
$flag=(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest');
return $flag;
}
?>
<html>
<head>
<title>Order Page </title>
<script type = "text/javascript"
src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
</head>
<body>
<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" method="POST">
<label for="userName">Username</label><br>
Product Name<input type="text" name="productName" id="productName" onchange="validateProduct()"><?php echo $productName_error?><br>
Quantity Required<input type="text" name="quantityRequired" id="quantityRequired"><br>
Availability<input type="text" name="availability">
<p id="demo"></p>
</form>
<script>
function validateProduct()
{
$.ajax({
type: "POST"
});
}
</script>
</body>
</html>
所以代码是当用户输入产品名称时。函数验证产品被调用。从验证产品,它将调用同一文件中的php。 is_ajax()
函数用于检查它是否是ajax请求。
答案 0 :(得分:1)
Ajax的PHP库
Jaxon是一个开源PHP库,可以轻松创建Ajax Web应用程序。它允许进入一个网页,直接对PHP类进行Ajax调用,然后更新其内容,而无需重新加载整个页面。
Jaxon实现了一整套PHP函数来定义网页的内容和属性。有几个插件可以扩展其功能并提供与各种PHP框架和CMS的集成。
Jaxon如何运作
使用Jaxon定义并注册PHP类。
$jaxon->register(Jaxon::CALLABLE_OBJECT, new MyClass);
使用Jaxon生成的javascript代码调用您的类。
<input type="button" onclick="JaxonMyClass.myMethod()" />
答案 1 :(得分:0)
var data1 = "Something";
$.ajax({
url: "script.php",
type: "POST",
data: { data1: data1 }
}).done(function(resp) {
console.log( resp )
}).fail(function(jqXHR, textStatus) {
alert("Request failed: " + textStatus + " - Please try again.")
})
这里有一个脚本,它将data1变量发送到php脚本。完成部分中的resp是您从php脚本发回的返回。
如果您想发送更多数据,只需添加{ data1: data1, data2: data2 }
,依此类推。
根据您的需要进行调整。
答案 2 :(得分:0)
我可能还有其他一些问题没有发现,但是第一件事是我的服务器端代码有条件地运行:
$.ajax({
type: "POST"
});
因为你没有在AJAX请求中发送任何值,所以从未满足这个条件:
$.ajax({
type: "POST",
data: { productName: $('#productName').val() }
});
发送您正在寻找的价值:
$.ajax({
url: 'yourUrl.php',
type: "POST",
dataType: 'html',
data: { productName: $('#productName').val() }
});
如果没有正确默认,您可能还需要指定其他几个选项。在许多情况下,显式代码通常比隐式更好:
$.ajax()
一般情况下,您可能需要查看{{1}}的文档,看看您能做什么,应该告诉它。您还需要查看浏览器的调试工具,以便更详细地了解测试这些内容时失败的原因和方式。
说到你应该做的事情,你应该阅读https://stackoverflow.com/a/19849420/4496364和this。您的代码目前对SQL注入攻击持开放态度,这基本上意味着您以代码执行用户发送给您的任何内容。