MySQL Query Within JavaScript
MySQL Query Within JavaScript
我正在编写一个表单,其中使用JavaScript来添加另一个行项。目的是将行项目添加到发票中。当在我的表单中使用文本框时,我已经成功地使其工作正常,但我卡住了如何使其与下拉框一起工作,该下拉框调用mysql以获取下拉框数据。
这是我的。
<?php
include $_SERVER['DOCUMENT_ROOT']."/connect.php";
include $_SERVER['DOCUMENT_ROOT']."/includes/header.php";
?>
<script type="text/javascript">
var counter = 1;
function addInput(divName){
var newdiv = document.createElement('div');
newdiv.innerHTML = "Entry " + (counter + 1) + " <br><select name='myInputs[]'><?php $result = mysql_query("SELECT * FROM salesitem"); while($row = mysql_fetch_array($result)) { echo "<option value='"".$row['name']."'">".$row['name']."</option>";} ?></select>";
document.getElementById(divName).appendChild(newdiv);
}
</script>
<form method="POST">
<div id="dynamicInput">
Entry 1<br><select name="myInputs[]"><?php $result = mysql_query("SELECT * FROM salesitem"); while($row = mysql_fetch_array($result)) { echo "<option value='"".$row['name']."'">".$row['name']."</option>";} ?></select>
</div>
<input type="button" value="Add another text input" onClick="addInput('dynamicInput');">
</form>
这里有一些关于正在发生的事情的信息。现在,上面的JavaScript代码显示了其中的MySQL查询。这就破坏了添加行项的功能。如果我只是删除查询,但留下另一个php,添加行项又开始工作,但当然下拉列表中没有数据。
在表单本身中,它从数据库中获取第一行项,而不使用javascript,这是正常工作的。
我觉得我离目标越来越近了,但不知道下一步该怎么走。
提前感谢。
编辑:多亏了尼克,我才成功了。代码如下:
<?php
include $_SERVER['DOCUMENT_ROOT']."/connect.php";
include $_SERVER['DOCUMENT_ROOT']."/includes/header.php";
?>
<script type="text/javascript">
var counter = 1;
function addInput(div){
xmlhttp=new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200){
var newdiv = document.createElement('div');
newdiv.innerHTML = "Entry " + (++counter) + " <br><select name='myInputs[]'>" + xmlhttp.responseText + "</select>";
}
document.getElementById(div).appendChild(newdiv);
}
xmlhttp.open("GET", "update_text.php", false);
xmlhttp.send();
}
</script>
<form method="POST">
<div id="dynamicInput">
Entry 1<br><select name="myInputs[]"><?php $result = mysql_query("SELECT * FROM salesitem"); while($row = mysql_fetch_array($result)) { echo "<option value='"".$row['name']."'">".$row['name']."</option>";} ?></select>
</div>
<input type="button" value="Add" onClick="addInput('dynamicInput');">
</form>
update_text.php
<?php
include $_SERVER['DOCUMENT_ROOT']."/connect.php";
$result = mysql_query("SELECT * FROM salesitem");
while($row = mysql_fetch_array($result)) {
echo "<option value='"".$row['name']."'">".$row['name']."</option>";
}
?>
这里是我的php帖子进入数据库,这是不工作的javascript添加行项目,只有从表单创建的原始条目。(除了下拉菜单,我还有其他字段)。
<?php
include $_SERVER['DOCUMENT_ROOT']."/connect.php";
$company = mysql_real_escape_string($_POST['company']);
foreach($_POST['item'] as $i => $item)
{
$item = mysql_real_escape_string($item);
$quantity = mysql_real_escape_string($_POST['quantity'][$i]);
mysql_query("INSERT INTO invoice (company, item, quantity) VALUES ('$company', '".$item."', '".$quantity."') ") or die(mysql_error());
}
echo "<br><font color='"green'"><b>Invoice added</b></font>";
?>
谢谢,如果我能把它整理得更好,请告诉我。
遗憾的是,由于PHP的特性,您尝试这样做的方式不起作用。
当一个客户端从服务器请求你的页面时,所有的php都被执行。
javascript函数中的php块实际上只是php的静态结果。
您需要使用XMLHttpRequests/Ajax从服务器请求新数据。
这里有一个快速(可能相当糟糕)的例子!
修改你的javascript函数:
var counter = 1;
function addInput(div) {
xmlhttp=new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
var d = document.getElementById(div);
d.innerHTML=d.innerHTML +"<div>Entry " + (++counter) + " <br><select name='myInputs[]'>" + xmlhttp.responseText + "</select></div>";
}
}
xmlhttp.open("GET", "updated_list.php", false);
xmlhttp.send();
}
服务器上的新php文件:(updated_list.php)
<?php
// you'll need to include stuff to connect to your database here
$result = mysql_query("SELECT * FROM salesitem");
while($row = mysql_fetch_array($result)) {
echo "<option value='"".$row['name']."'">".$row['name']."</option>";
}
?>
我确实说过这是一个不好的例子:)我原来的代码覆盖了你的div的内容,而不是添加到它,我更新了。这只是一个示例,您应该仔细阅读AJAX以及如何从服务器请求数据。
加载页面后,不能在javascript函数中使用服务器代码。服务器端代码就像它的名字一样——在服务器上运行的代码。因此,在页面完成加载后,它"返回"到客户端,现在只有客户端代码(javascript)可以运行。所以你的行
newdiv.innerHTML = "Entry " + (counter + 1) + " <br><select name='myInputs[]'><?php $result = mysql_query("SELECT * FROM salesitem"); while($row = mysql_fetch_array($result)) { echo "<option value='"".$row['name']."'">".$row['name']."</option>";} ?></select>";
是一个小错误
你可以做的是将数据从数据库返回到javascript(使用json将是最好的选择),然后使用来自服务器的原始数据动态地构建选择框,现在是javascript数据。
假设你的数据是
var data = [{name:'n1'},{name:'n2'},{name:'n3'}];
您可以使用javascript运行这些数据并构建您的组合:
var newSelect = document.createElement('select');
for(var i=0;i<data.length;i++){
var name = data[i].name;
newSelect.options[newSelect.options.length] = new Option(name,name);
}
这是一个经典的例子为 AJAX(异步Javascript和XML)的基本概念是,当一个动作执行(例如,单击一个按钮显示内容),一些Javascript调用PHP(异步), PHP运行时,返回一个XML文件(尽管这可以是任何你想要的文件格式,现在一些人更喜欢使用JSON,因为它是更容易解析),和这个XML/JSON的内容显示出来,也使用Javascript。
虽然上面的例子是显示内容,但没有理由认为任何需要在服务器上运行的操作(例如向数据库插入数据)也不能异步完成。
SO不是一个为人们编写代码的地方——所以现在我给了你一个提示,从哪里开始,作为对读者(/问题提问者!)的练习,看看一些AJAX教程,确保你理解了这个概念,写一些代码,如果仍然不能让它工作,再回来!
祝你好运
- 为什么不't Javascript对我的输入值进行了一些重新检查
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- 将函数的上下文应用于javascript变量
- 使用php或javascript从facebook相册URL中删除多余的部分
- 正在添加'X'按钮,在文本字段旁边使用javascript
- 如何在JavaScript中将字符串转换为函数引用
- 模糊事件的Javascript测试
- Javascript -add onlick within a function
- array within a switch javascript
- CFML within Javascript
- Javascript window.location within php returned by json
- JavaScript Scope within factories in AngularJS
- Javascript Regex adding an attribute within <img> and
- JQuery / Javascript & Split within split?
- PHP within JavaScript
- PHP within Javascript?
- MySQL Query Within JavaScript
- javascript attachEvent within loop
- Javascript Function For Loop within function
- </script> within a JavaScript string in a <script&g