我的网站有一个安全区域,我可以添加/更新/删除数据库条目。我正在尝试将脚本从mysql更新到mysqli。一切都有效,除了“更新”部分。当我填写新信息并单击“更新”时,它会给我这个错误:
警告:mysqli_real_escape_string()期望参数1为mysqli, 给出的字符串 第19行/home3/tarb89/public_html/aususrpg.net/charbase/updated.php
我不确定这里有什么问题;我是一个完整的新手,所以我道歉。
这是我的update.php代码:
<?php
// Create connection
$con=mysqli_connect("xxx","xxx","xxx","xxx");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$id = $_GET['id'];
$result = mysqli_query($con,"SELECT * FROM characters WHERE id = '$id'");
$my_array = array($c_z);
extract($my_array);
?>
<form id="FormName" action="../charbase/updated.php" method="post" name="FormName">
<table width="448" border="0" cellspacing="2" cellpadding="0">
<tr>
<td width="150" align="right"><label for="name">Name: </label></td>
<td><input name="name" maxlength="255" type="text" value="<?php echo stripslashes($name) ?>"></td>
</tr>
<tr>
<td colspan="2" align="center">
<input name="" type="submit" value="Update">
<input name="id" type="hidden" value="<?php echo $id ?>">
</td>
</tr>
</table>
</form>
我对update.php页面的另一个问题是当它显示表时,输入应显示已在数据库中列出的信息;目前,它显示名称字段,但输入部分为空。它应该显示数据库中已有的名称数据(然后我可以将其替换为我想要更新的任何内容。)
这是updated.php代码:
<?php
// Create connection
$con=mysqli_connect("xxx","xxx","xxx","xxx");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$id = $_POST['id'];
$name = mysqli_real_escape_string(trim($_POST["name"]), $con);
$rsUpdate = mysqli_query($con,"UPDATE characters SET name='$name'
WHERE id='$id'");
if($rsUpdate) { echo "Successfully updated"; } else { die('Invalid query: '.mysql_error()); }
?>
<a href="index.php">Back to index</a>
非常感谢任何帮助。这件事让我疯狂。
不同的问题:请参阅上面的update.php代码。
当我点击名为“更新信息”的数据库条目旁边的链接时,我需要更新.php?id = charactersid
目前,它显示一个空输入表单。我可以输入信息并点击“更新”,它会正确更新。
但是,当我被带到update.php页面时,我希望它显示输入表单,除了值应该等于数据库中已有的值。
例如:
目前显示的内容:
名称:[空输入框]
我希望它显示:
名称:[数据库中列出的当前名称]
因此输入的值应该是该字符的信息;因此,当我想要更新时,我可以看到已经列为该角色的信息,并更改/删除/添加我需要的任何内容。
这更有意义吗?
答案 0 :(得分:6)
你正以相反的方式使用它:
string mysqli_real_escape_string ( mysqli $link , string $escapestr )
所以它应该是:
$name = mysqli_real_escape_string($con, trim($_POST["name"]));
来源:http://php.net/mysqli_real_escape_string
由于您使用的是MySQLi,我建议您跳转到预备语句而不是real_escape,如下所示:
<?php
// Your database info
$db_host = 'host';
$db_user = 'user';
$db_pass = 'pass';
$db_name = 'database';
// POST data
$id = $_POST['id'];
$name = trim($_POST["name"]);
$con = mysqli_connect($db_host, $db_user, $db_pass, $db_name);
if ($con->connect_error)
{
die('Connect Error (' . mysqli_connect_errno() . ') '. mysqli_connect_error());
}
$sql = "UPDATE characters SET name = ? WHERE id = ?";
if (!$result = $con->prepare($sql))
{
die('Query failed: (' . $con->errno . ') ' . $con->error);
}
if (!$result->bind_param('si', $name, $id))
{
die('Binding parameters failed: (' . $result->errno . ') ' . $result->error);
}
if (!$result->execute())
{
die('Execute failed: (' . $result->errno . ') ' . $result->error);
}
$result->close();
$con->close();
echo "Successfully updated";
?>
<a href="index.php">Back to index</a>
选择角色名称:
<?php
// Your database info
$db_host = 'host';
$db_user = 'user';
$db_pass = 'pass';
$db_name = 'database';
// POST data
$id = $_POST['id'];
$con = mysqli_connect($db_host, $db_user, $db_pass, $db_name);
if ($con->connect_error)
{
die('Connect Error (' . mysqli_connect_errno() . ') '. mysqli_connect_error());
}
$sql = "SELECT name FROM characters WHERE id = ?";
if (!$result = $con->prepare($sql))
{
die('Query failed: (' . $con->errno . ') ' . $con->error);
}
if (!$result->bind_param('i', $id))
{
die('Binding parameters failed: (' . $result->errno . ') ' . $result->error);
}
if (!$result->execute())
{
die('Execute failed: (' . $result->errno . ') ' . $result->error);
}
$result->store_result();
if ($result->num_rows == 0)
{
die('No character found...');
}
$result->bind_result($name);
$result->fetch();
$result->close();
$con->close();
echo $name;