Php mySQL通过结果,但插入未发生

Php mySQL通过结果,但插入未发生,php,jquery,mysql,insert,Php,Jquery,Mysql,Insert,我有一张表格,它会自动提交。提交时,将生成并运行一个查询,如果($result),则我将$success=1用于提交电子邮件然后关闭表单的jQuery函数。jQuery函数取决于要触发的$success值是否为“1”。最近我让人提交了表单,生成了电子邮件,但插入查询似乎没有在数据库中输入任何内容 PHP代码: require_once ('inc/dbconnect.php'); include ('inc/dataFormat.php'); if (isset($_POST['submit'

我有一张表格,它会自动提交。提交时,将生成并运行一个查询,如果($result),则我将$success=1用于提交电子邮件然后关闭表单的jQuery函数。jQuery函数取决于要触发的$success值是否为“1”。最近我让人提交了表单,生成了电子邮件,但插入查询似乎没有在数据库中输入任何内容

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;

}
require_once('inc/dbconnect.php');
包括('inc/dataFormat.php');
如果(isset($\u POST['submit'])和&$\u POST['submit']=='submit'){
$qins=sprintf('插入到becmtrack(站点名称、站点编号、位置、群集、enodeName、upgDate、tech、techNum、becm、becmFail、ecm1、ecm2、ecm3、dateAlu、aluContact、aluContNum、trackNum、注释)值(%s、%s、%s、%s、%s、%s、%s、%s、%s、%s、%s),[s]),值在此处];
$rins=mysqli_query($dB,$qins)或die('Error in query=>'.$qins.
'.mysqli_Error($dB)); $success=($rins)?1:0; }
jQuery代码(在文档就绪函数中):

如果(“==1){
var mailBody='站点名称:';
邮件正文+=“%0ASite编号:”;
邮件正文+=“%0地址代码:”;
邮件正文+=“%0AeCEMs已删除:”;
邮件正文+='%0已返回公司的信用卡:';
邮件正文+=“%0AALU联系人:”;
邮件正文+=“%0A联系人号码:”;
邮件正文+=“%0A映射跟踪编号(如果适用):”;
$('reloadTrig',window.opener.document).trigger('click');
打开('mailto:email)。address@somecompany.com?主题=eNodeB%20bCEM%20升级%20已完成&正文='+邮件正文);
如果(“”!=“添加更多”){
window.close();
}
}

有没有什么方法可以让这段代码在不将数据插入数据库的情况下生成有效的结果?

尝试在插入后调用mysqli\u commit

p.S.您不应该使用sprintf来传递参数,因为它无法逃避这些参数。 为此,您应该使用mysqli\u prepare,或者只需对每个参数调用mysqli\u real\u escape\u string

您可以创建以下功能:

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();
    }
}
function escapeArray($arr)
{
  $ret = array();
  foreach ($arr as $value)
     $ret []=mysqli_real_escape_string($value);
  return $ret;
}

根据以下文档,成功连接到数据库后的查询在大多数情况下都是正确的:

失败时返回FALSE。为了成功地选择、显示、描述或解释查询,mysqli_query()将返回一个mysqli_结果对象。对于其他成功的查询,mysqli\u query()将返回TRUE。


您需要检查是否确实存在插入的行

根据此处的文档(以及给定的示例)

您可以通过mysqli_commit进行检查(在本例中,重复条目失败,而不是语法错误):

$all\u query\u可以吗$mysqli->commit():$mysqli->rollback()

或者通过mysqli_受影响的_行(仅当insert语句确实插入了一行时才为真)


您使用的是
mysqli
,但未能使用以避免出现大量错误。像
mysql\u query
那样使用它是危险和鲁莽的。你应该用它来逃跑
sprintf
不应用于构造这样的查询。请参见下文,所有sprintf参数都是通过清理函数转义的。占位符是一种非常标准、可靠、值得信赖的方法。你在这里得到的是非常规的,可能会导致严重的安全问题。功能很好,但我认为它需要根据值类型进行更多的清理。例如
if(is_int($value){$ret[]=(int)$value;}
我所有的sprintf参数都通过了一个清理功能。由于篇幅太长,它们没有包含在文章中,我也不认为这是相关的。如果没有插入,我仍然无法通过结果测试。检查受影响的行是一个很好的附加测试。将其作为一个附加测试添加是否有意义所有测试,保持原始测试完好无损?
$result_query = @mysqli_query($query, $connect);
            if (($result_query == false) &&
               (mysqli_affected_rows($connect) == 0))