【发布时间】:2015-05-04 08:20:15
【问题描述】:
PHP 5.4(我的主机推荐) MySQL 5 我没有日志。
我有一个一周前运行良好的脚本。我已经对其进行了绝对零的更改。这是一个简单的新闻系统脚本。
它用于允许保存 html 文本,例如粗体、斜体、下划线等。编辑新闻时,它会以与保存时相同的方式显示。唯一改变的是
。它会在保存到数据库之前添加,但在显示时会删除。
这是保存信息的脚本部分。我取出了任何对该问题无效的信息。只显示包含问题的内容。
<?php require('check.php');
require_once('settings.php');
if (isset($_POST['update'])) {
$id = htmlspecialchars(strip_tags($_POST['id']));
$month = htmlspecialchars(strip_tags($_POST['month']));
$date = htmlspecialchars(strip_tags($_POST['date']));
$year = htmlspecialchars(strip_tags($_POST['year']));
$time = htmlspecialchars(strip_tags($_POST['time']));
$entry = $_POST['entry'];
$avatar = $_POST['avatar'];
$title = htmlspecialchars(strip_tags($_POST['title']));
/* $entry = nl2br($entry); */
$entry = preg_replace("/\r\n|\r/", "<br />", $entry);
if (!get_magic_quotes_gpc()) {
$title = addslashes($title);
$entry = addslashes($entry);
}
$timestamp = strtotime ($month . " " . $date . " " . $year . " " . $time);
$result = mysqli_query($GLOBALS["___mysqli_ston"], "UPDATE my_blog SET timestamp='$timestamp', title='$title', entry='$entry', avatar='$avatar' WHERE id='$id' LIMIT 1") or print ("Can't update entry.<br />" . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)));
header("Location: ../entry.php?id=" . $id);
}
if (isset($_POST['delete'])) {
$id = (int)$_POST['id'];
$result = mysqli_query($GLOBALS["___mysqli_ston"], "DELETE FROM my_blog WHERE id='$id'") or print ("<p class=\"error\"Can't delete entry.<br />" . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . "</p>");
if ($result != false) {
print "<p class=\"success\">The entry has been successfully deleted from the database.</p>";
exit;
}
}
if (!isset($_GET['id']) || empty($_GET['id']) || !is_numeric($_GET['id'])) {
die("Invalid entry ID.");
}
else {
$id = (int)$_GET['id'];
}
require_once("header.php");
$result = mysqli_query($GLOBALS["___mysqli_ston"], "SELECT * FROM my_blog WHERE id='$id'") or print ("Can't select entry.<br />" . $sql . "<br />" . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)));
while ($row = mysqli_fetch_array($result)) {
$old_timestamp = $row['timestamp'];
$old_title = stripslashes($row['title']);
$old_entry = nl2br($row['entry']);
$old_avatar = stripslashes($row['avatar']);
$old_password = $row['password'];
$old_title = str_replace('"','\'',$old_title);
$old_entry = str_replace('\r\n', '<br />', $old_entry);
$old_month = date("F",$old_timestamp);
$old_date = date("d",$old_timestamp);
$old_year = date("Y",$old_timestamp);
$old_time = date("H:i",$old_timestamp);
}
?>
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<p><input class="form-control" type="hidden" name="id" value="<?php echo $id; ?>" />
<b><label for="month">Date:</label></b>
<table width=100%>
<tr>
<td width="25%"><input class="form-control" type="text" name="date" id="date" size="2" value="<?php echo $old_date; ?>" /></td>
<td width="50%"><select class="form-control" name="month" id="month">
<option value="<?php echo $old_month; ?>"><?php echo $old_month; ?></option>
<option value="January">January</option>
<option value="February">February</option>
<option value="March">March</option>
<option value="April">April</option>
<option value="May">May</option>
<option value="June">June</option>
<option value="July">July</option>
<option value="August">August</option>
<option value="September">September</option>
<option value="October">October</option>
<option value="November">November</option>
<option value="December">December</option>
</select></td>
<td width="25%"><select class="form-control" name="year" id="year">
<option value="<?php echo $old_year; ?>"><?php echo $old_year; ?></option>
<option value="2013">2013</option>
<option value="2014">2014</option>
<option value="2015">2015</option>
<option value="2016">2016</option>
<option value="2017">2017</option>
<option value="2018">2018</option>
<option value="2019">2019</option>
<option value="2020">2020</option>
</select></td>
</tr>
<tr>
<td><b><label for="time">Time:</label></b></td>
<td><b><label for="title">Title:</label></b></td>
<td><b><label for="avatar">Icon:</label></b></td>
</tr>
<tr>
<td><input class="form-control" type="text" name="time" id="time" size="5" value="<?php echo $old_time; ?>" /></td>
<td><input class="form-control" type="text" name="title" id="title" value="<?php echo $old_title; ?>" size="40" /></td>
<td><input class="form-control" type="text" name="avatar" id="avatar" size="40" maxlength="100" value="<?php echo $old_avatar; ?>" /></td>
</tr>
</table>
<p><textarea class="form-control" cols="80" rows="20" name="entry" id="entry"><?php echo $old_entry; ?></textarea></p>
<p><button type="submit" name="update" id="update" class="btn btn-default">Update!</button></p>
</form>
<p><strong>Before deleting, be absolutely sure - there is no confirmation nor is there any way to reverse deletion!</strong><br />
<small>(You may be shown your entry again after deleting - do not worry, it HAS been deleted. Check the main page of the blog if you are still unsure.</small></p>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<input type="hidden" name="id" id="id" value="<?php echo $id; ?>" />
<button type="submit" name="delete" id="delete" class="btn btn-default">Yes, I am absolutely and positively sure I want to delete this entry.</button>
</form>
<?php
require_once("footer.php");
((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res);
?>
我试图查看这是否是主机问题,但显然许多主机上使用此特定脚本的许多人都遇到了这个问题。对每个人来说,这一切都是在同一时间开始的。但没有人知道发生了什么。每个人都至少在 PHP 5.4 上运行。
真正奇怪的是,一些正在运行的东西如何停止工作并正在寻找一些关于可能是什么问题的见解。谷歌没有任何帮助,我在堆栈溢出时找不到任何东西。
请注意,我已尝试更改保存信息的方式。我知道使用 nl2br() 实际上不应该用于将信息保存到数据库中,仅用于显示来自数据库的信息。但脚本不是我写的,脚本的原始开发者也不再保留它。
我已将所有内容都转换为 mysqli_,但问题没有任何改变。
settings.php
<?php
$users = array($user => md5($pass));
$salt = substr(md5(date("F")), 8);
$cards_seperate_directory = FALSE;
$connect = mysql_connect("$db_server", "$db_user", "$db_password")
or die( DATABASE_CONNECT_ERROR . mysql_error() );
mysql_select_db("$db_database", $connect)
or die( DATABASE_CONNECT_ERROR . mysql_error() );
function CleanUp($data) {
$data = trim(htmlentities(strip_tags($data)));
return $data;
}
function escape_sql($sql) {
if (get_magic_quotes_gpc()) $sql = stripslashes($sql);
return mysql_real_escape_string($sql);
}
?>
【问题讨论】:
-
您能否发布更多代码以显示所有变量的设置位置?查看 $timestamp、$title、$avatar 和 $id 会很有用。
-
1. HTML 不能将任何内容存储到数据库中,因为它是一种标记语言,而不是一种编程语言; 2. 如果没有人没有改变任何东西,它仍然可以工作——因此,一定有人改变了一些东西; 3. “不工作”并不是一个足够的问题描述来帮助你
-
听起来 PHP 升级了,
mysql_*函数消失了。有什么错误吗?检查日志?在您打开<?php标记error_reporting(E_ALL); ini_set('display_errors', 1);后立即在文件顶部添加错误报告 -
使用
mysql_real_escape_string而不是addslashes。 -
tips:查询前不要使用nl2br,实际需要html时使用。这样,您仍然可以在您的网站上公开非 html 版本。另外,请查看 mysqli,因为 mysql 已被贬低。