【发布时间】:2012-03-05 16:39:50
【问题描述】:
使用 Codeigniter,我试图在用户单击提交按钮后运行 php 脚本。我遵循了很多教程,并提出了以下代码:
如果查看实际页面有帮助,您可以在此处访问:http://rickymason.net/townbuilder 来宾/来宾登录(当前需要)
在我看来(structures.php),我有:
<div id="structures">
<h1>Build</h1>
<form name="buildForm" id="buildForm" method="POST">
<select name="buildID" class="buildClass">
<option value="0" selected="selected" data-skip="1">Build a Structure</option>
<?php foreach ($structures as $structure_info): ?>
<option name='<?php echo $structure_info['str_name'] ?>' value='<?php echo $structure_info['str_id'] ?>' data-icon='<?php echo $structure_info['str_imageloc'] ?>' data-html-text='<?php echo $structure_info['str_name'] ?><i>
<?php echo $structure_info['timebuildmins'] ?> minutes<br><?php echo $structure_info['buy_gold'] ?> gold</i>'><?php echo $structure_info['str_name'] ?></option>
<?php endforeach ?>
</select>
<div id="buildSubmit">
<input class="button" type="submit" value="Submit"/>
</div>
</form>
</div>
<div id="output"> Result here</div>
这将创建我的选择表单并在 html 中创建它。然后我创建了一个 .js 文件来运行 ajax:
$("#submit").submit(function(e){
e.preventDefault();
$.ajax({
type: "POST",
url: '../php/build.php',
data: "",
dataType: 'json',
success: function(data)
{
alert("success!");
}
});
});
我尽量保持简单,仅用于测试目的。 Javascript 对我来说是新事物,出于某种原因,我发现它非常令人困惑。据我所知,这个脚本应该在按下提交按钮后激活。然后它运行 build.php 脚本,如果它通过 json 返回一个回显,它会提示成功。正确的?
我的 build.php 脚本如下:
<?php
$query = "INSERT INTO user_structure (str_id, user_id) VALUES ('7', '7')";
mysql_query($query) or die ('Error updating database');
echo "success";
?>
再次,非常简单...
不幸的是,当我单击提交时,页面似乎“刷新”但没有任何反应。我不希望页面上发生任何事情,但是数据库也没有收到任何值。
我在控制器或模型中没有 build.php 或 build.js 文件,它们位于应用程序目录之外,可以在 CI uri/url 结构之外访问。
截至目前,我只是想通过单击提交来成功运行 php 脚本。我的最终目标是获取为表单创建的 str_id 值,然后将该变量和 user_id 传递到 build.php 文件中,创建数据库条目,然后刷新页面以显示更新的数据库信息。
显然,它不起作用!任何帮助将不胜感激。
【问题讨论】:
-
echo "success";不返回 JSON 字符串。此外,您不会阻止提交表单。此外,您真的需要所有这些打开/关闭 php 标签来构建您的选择框吗? -
首先,你没有任何 ID = "submit" 的东西,jQuery 应该选择什么?
-
谢谢,我在发布代码之前删除了 id='submit'。我这样做是因为我模仿的一个特定示例没有它,因为我相信他们正在调用表单名称。感谢您指出这一点。
标签: php javascript mysql ajax codeigniter