这里的PHP和MYSQL新手.....现在可以真正使用你的帮助了。我在我的脚本中实现了一个Submodal,最后让它将“User Notes”提交到数据库中。不幸的是,每次提交新文件时,提交的文本都会覆盖以前的提交。我被告知使用CONCAT_WS来防止这种情况发生......我已经在Dreamweaver上尝试了几个小时来实现这一目标,但它无法正常工作。这是该部分的代码......
出现此错误的新代码:
You have an error in your SQL syntax; check the manual that corresponds
to your MySQL server version for the right syntax to use near 'great'')
WHERE Id=35' at line 1
...代码
<?php
ini_set('display_errors', 'On');
error_reporting(E_ALL);
?>
<?php require_once('Connections/cms.php'); ?>
<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "")
{
if (PHP_VERSION < 6) {
$theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
}
$theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) :
mysql_escape_string($theValue);
switch ($theType) {
case "text":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "long":
case "int":
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
break;
case "double":
$theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
break;
case "date":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "defined":
$theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
break;
}
return $theValue;
}
}
$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
$editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}
if ((isset($_POST["MM_update"])) && ($_POST["MM_update"] == "lead_note_form")) {
$updateSQL = sprintf ("UPDATE Leads SET Notes = CONCAT_WS('\n', notes, '%s') WHERE Id=%d",
GetSQLValueString($_POST['note'], "text"),
GetSQLValueString($_POST['Id'], "int"));
mysql_select_db($database_cms, $cms);
$Result1 = mysql_query($updateSQL, $cms) or die(mysql_error());
$updateGoTo = "test6.php";
if (isset($_SERVER['QUERY_STRING'])) {
$updateGoTo .= (strpos($updateGoTo, '?')) ? "&" : "?";
$updateGoTo .= $_SERVER['QUERY_STRING'];
}
header(sprintf("Location: %s", $updateGoTo));
}
$colname_Recordset1 = "-1";
(isset($_GET['Id'])) {
$colname_Recordset1 = $_GET['Id'];
}
mysql_select_db($database_cms, $cms);
$query_Recordset1 = sprintf("SELECT Id, First_Name, Last_Name, Notes FROM Leads WHERE Id = %s",
GetSQLValueString($colname_Recordset1, "int"));
$Recordset1 = mysql_query($query_Recordset1, $cms) or die(mysql_error());
$row_Recordset1 = mysql_fetch_assoc($Recordset1);
$totalRows_Recordset1 = mysql_num_rows($Recordset1);
?>
HTML
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script language="JavaScript" src="jquery.js" type="text/javascript"></script>
<script>
function clickSubmit() {
$("form").submit();
}
</script>
</head>
<body>
<table><tr><td>
<div id="lead_box">
<form action="<?php echo $editFormAction; ?>" method="POST" name="lead_note_form" id="lead_note_form"
target="_top">
<input type="hidden" name="Id" id="Id" value="<?php echo $row_Recordset1['Id']; ?>" />
<table width="100%" border="0" cellpadding="0" cellspacing="5">
<tr>
<td colspan="2" bgcolor="#eeeeee"><p align="center" class="name"></p></td>
</tr>
<tr>
<td><textarea rows="15" style="width: 99%" readonly><?php echo $row_Recordset1['Notes']; ?>
</textarea></td>
</tr>
<tr>
<td valign="top"><p class="title">Add Note:</p></td>
<tr>
<td>
<textarea name="note" id="note" style="width: 99%" rows="5"></textarea>
</td>
</tr>
</table>
<input type="hidden" name="MM_update" value="lead_note_form" />
</form>
</div><!-- and of lead box -->
</td></tr>
<tr><td>
<div align="right">
<input type="submit" name="save" id="save" value="Save" onClick="clickSubmit()"/>
<input type="button" name="cancel" id="cancel" value="Cancel" onClick="window.parent.hidePopWin()"/>
</div>
</td></tr></table>
</body>
</html>
<?php
mysql_free_result($Recordset1);
?>
答案 0 :(得分:3)
我能看到的第一件事是你的sprintf()
有两个替换参数,但只有一个占位符。我在想你的意思
$updateSQL = sprintf ("UPDATE Leads SET Notes = CONCAT_WS('\n', Notes, %s) WHERE Id=%d",
GetSQLValueString($_POST['note'], "text"),
GetSQLValueString($_POST['Id'], "int"));
此外,您的GetSQLValueString()
函数会自动用引号包装“text”参数,因此您需要删除占位符周围的引号。
我还将ID占位符更改为%d
,因为我假设您期待一个数字。
您可以从启用错误报告开发中受益。这个错误(以及可能是另一个关于未定义的$Notes
变量的错误)会使调试变得更容易。
将其放在脚本的顶部(仅用于开发)
ini_set('display_errors', 'On');
error_reporting(E_ALL);
删除MySQL库并将代码移到PDO,你不会回头。
$stmt = $db->prepare('UPDATE Leads SET Notes = CONCAT_WS(:sep, Notes, :note) WHERE Id = :id');
$stmt->execute(array(
'sep' => PHP_EOL,
'note' => $_POST['note'],
'id' => $_POST['Id']
));
考虑将每个注释条目存储在一个单独的表中,该表具有与父“Lead”和创建时间戳的外键关系。这样,您只需按创建顺序检索所有子注释条目,只需插入新条目。
CREATE TABLE LeadNotes (
id INT NOT NULL AUTO_INCREMENT,
lead_id INT,
note TEXT,
created_dt TIMESTAMP,
PRIMARY KEY (id),
FOREIGN KEY (lead_id) REFERENCES Leads (Id)
ON DELETE CASCADE
) ENGINE=INNODB;