0

我有一个提交给自己的表单。在提交时,会生成并运行一个查询,如果 ($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();
    }
}

该代码是否可以在不将数据插入数据库的情况下生成有效结果?

4

2 回答 2

0

在插入后尝试调用mysqli_commit

PS你不应该使用 sprintf 来传递参数,这不会逃避它们。您应该为此使用mysqli_prepare,或者只在每个参数周围调用mysqli_real_escape_string 。

您可以制作功能:

function escapeArray($arr)
{
  $ret = array();
  foreach ($arr as $value)
     $ret []=mysqli_real_escape_string($value);
  return $ret;
}
于 2013-04-17T21:29:26.803 回答
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 (如果插入语句真的插入一行,这将是正确的)

$result_query = @mysqli_query($query, $connect);
            if (($result_query == false) &&
               (mysqli_affected_rows($connect) == 0)) 
于 2013-04-17T21:35:44.233 回答