我有一张提交给自己的表格。在提交时,生成并运行一个查询,如果($ result)然后我将$ success = 1用于提交电子邮件然后关闭表单的jQuery函数。 jQuery函数依赖于回显为$ 1的$ success值来触发。最近我有人提交表单,生成了电子邮件,但插入查询似乎没有在数据库中输入任何内容。
PHP代码:
require_once ('inc/dbconnect.php');
include ('inc/dataFormat.php');
if (isset($_POST['submit']) && $_POST['submit'] == 'Submit') {
$qins = sprintf('INSERT INTO becmtrack (siteName, siteNum, location, cluster, enodeName, upgDate, tech, techNum, becm, becmFail, ecm1, ecm2, ecm3, dateAlu, aluContact, aluContNum, trackNum, comment) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)', [VALUES ARE HERE]);
$rins = mysqli_query($dB, $qins) or die('Error in query => ' . $qins . '<br />' . mysqli_error($dB));
$success = ($rins) ? 1 : 0;
}
jQuery代码(在文档就绪函数内):
if ("<? echo $success; ?>" == 1) {
var mailBody = 'Site Name: <? echo $_POST['siteName2'];?>';
mailBody += '%0ASite Number: <? echo $_POST['siteNum'];?>';
mailBody += '%0ALocation Code: <? echo $_POST['location'];?>';
mailBody += '%0AeCEMs Removed: <? echo $_POST['ecm1'] . ', ' . $_POST['ecm2'] . ', ' . $_POST['ecm3'];?>';
<? if ($_POST['dateAlu'] != '') { ?>
mailBody += '%0ADate Cards Returned to Company: <? echo $_POST['dateAlu'];?>';
mailBody += '%0AALU Contact: <? echo $_POST['aluContact'];?>';
mailBody += '%0AContact Number: <? echo $_POST['aluContNum'];?>';
mailBody += '%0AShipping Tracking Number (if applicable): <? echo $_POST['trackNum'];?>';
<? } ?>
$('#reloadTrig',window.opener.document).trigger('click');
window.open('mailto:email.address@somecompany.com?subject=eNodeB%20bCEM%20Upgrade%20Completed&body='+mailBody);
if ('<? echo $_POST['addmore'];?>' != 'addmore') {
window.close();
}
}
是否有代码可以生成有效的结果而不将数据插入数据库?
答案 0 :(得分:0)
在插入后尝试调用 mysqli_commit 。
P.S。您不应该使用sprintf传递参数,这些参数不会逃脱它们。 你应该使用 mysqli_prepare ,或者只是在每个参数上调用 mysqli_real_escape_string 。
你可以创造功能:
function escapeArray($arr)
{
$ret = array();
foreach ($arr as $value)
$ret []=mysqli_real_escape_string($value);
return $ret;
}
答案 1 :(得分:0)
根据此文档,在大多数情况下,成功连接数据库后的查询都是正确的:
http://www.php.net/manual/en/mysqli.query.php
Returns FALSE on failure. For successful SELECT, SHOW, DESCRIBE or EXPLAIN queries mysqli_query() will return a mysqli_result object. For other successful queries mysqli_query() will return TRUE.
您需要检查是否确实插入了一行。
根据这里的文件(以及给定的例子)
http://php.net/manual/en/mysqli.commit.php
您可以通过mysqli_commit进行检查(在示例中,对于重复输入而言,这不是出于语法错误):
$all_query_ok ? $mysqli->commit() : $mysqli->rollback();
或通过mysqli_affected_rows(只有当插入语句真的插入一行时才会为true)
$result_query = @mysqli_query($query, $connect);
if (($result_query == false) &&
(mysqli_affected_rows($connect) == 0))