我知道它是重复的,但我在尝试获取从链接传递的数据时遇到此错误。我不知道如何解决它。
这是我的代码:
add_package.php
echo "<td><a href='delete.php?name3=" . $row['package_type']."&id3=".$row['p_id']."'>Delete</a></td>";
echo "<td><a href='edit_package.php?name3=" . $row['package_type']."&id3=".$row['p_id']."'>Update</a></td>";
这里删除链接工作正常,但是当我点击更新时,它会转到edit_package页面,我收到一个未定义的错误..
edit_package.php的代码:
<?php
include('db.php');
$id4 = $_GET['id3'];//update the page
$name4 = $_GET['name3'];//helps to update the package
echo $id4;
echo $name4;//getting values here correctly..
if(isset($_POST['submit']) )
{
$package=$_POST['package'];
if (ctype_alnum($package) && !empty($id4) && !empty($name4))
{
$sql13="select package_type,id from tbl_package where package_type='".$package."'";
$retvali=mysql_query($sql13,$conn);
$num_rows1 = mysql_num_rows($retvali);
if ($num_rows1 == 0 || $num_rows1=="")
{
$sql = "Update tbl_package set package_type='".$package."' where package_type='".$name4."' and p_id='".$id4."'";
$retval = mysql_query( $sql, $conn );
?><script>alert("Updated Successsfully");window.location ='http://localhost/demo/add_package.php';
</script><?php
}
else
{
?><script>alert("Already Exists");window.location ='http://localhost/demo/add_package.php';
</script><?php
}
}
else
{
?><script>alert("enter only letters and numbers")</script><?php
}
}
?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<form id="form-validation" action="edit_package.php" method="post" class="form-horizontal" enctype="multipart/form-data" novalidate="novalidate">
<div class="col-md-6">
<div class="block" style="height:500px;">
<div class="block-title">
<h2><strong>State the Package For Tour</strong></h2>
</div>
<fieldset>
<div class="form-group">
<label class="col-md-4 control-label" for="val_username">Update Package <span class="text-danger">*</span></label>
<div class="col-md-6">
<div class="input-group">
<input type="text" id="package" name="package" class="form-control" required >
<span class="input-group-addon"><i class="fa fa-user"></i></span>
</div>
</div>
</div>
<div class="form-group form-actions">
<div class="col-md-8 col-md-offset-4">
<input type="submit" class="btn btn-info btn-primary " value="Update" name="submit">
</div>
</div>
</fieldset>
</form>
当我按下更新按钮时,我得到一个未定义的错误,我不知道为什么?..提前谢谢 我正在为其附加图片。
答案 0 :(得分:3)
尝试更改<form>
的操作网址以包含您的GET变量:
<form id="form-validation" action="edit_package.php?id3=<?php echo $_GET['id3']; ?>&name3=<?php echo $_GET['name3']; ?>" method="post" class="form-horizontal" enctype="multipart/form-data" novalidate="novalidate">
请注意:这非常不安全!在使用之前,您需要清理所有用户输入。我上面的例子,不尊重安全性,只是为了证明我的观点。 GET和POST数据是用户变量。恶意用户可能会在URL中放入错误的代码(即?name3=<badcode>
),并且它会打印在页面上,以及源代码中,它们很容易弹出。此外,在SQL查询中,您需要转义数据或使用预准备语句。
您不应该使用mysql函数,切换到MySQLi或PDO。 MySQL已经被杀了一段时间了..
这些只是要求你被黑客入侵:
$sql13="select package_type,id from tbl_package where package_type='".$package."'";
和..
$sql = "Update tbl_package set package_type='".$package."' where package_type='".$name4."' and p_id='".$id4."'";
您很容易受到SQL注入攻击,很容易让恶意攻击者在您的数据库中添加/编辑/查看/删除数据。
问题是,您的SQL查询中有$package
(来自POST的原始数据)和$id4
以及$name4
(来自GET的原始数据)。
你会对它们使用mysql_real_escape_string()
,但无论如何你应该使用mysqli
或PDO
......
示例:
$name4 = mysql_real_escape_string($_GET['name3']);
令人困惑,我不知道GET变量叫做name3,但你为它赋予了变量$name4..
随后出现的任何人(甚至你)都会在你的代码中丢失
试试这段代码。我在您的PHP代码中交换了您的GET POST,并将您的URL中的GET变量作为表单中的隐藏字段传递。
<?php
include('db.php');
if(isset($_POST['submit']) )
{
$package = mysql_real_escape_string($_POST['package']);
$id4 = mysql_real_escape_string($_POST['id3']); // why is variable named id4 but its id3??
$name4 = mysql_real_escape_string($_POST['name3']); // why is variable $name4 but its name3??
if (ctype_alnum($package) && !empty($id4) && !empty($name4))
{
$sql13 = "SELECT package_type,id FROM tbl_package WHERE package_type='$package' LIMIT 1";
$retvali = mysql_query($sql13, $conn);
$num_rows1 = mysql_num_rows($retvali);
if ($num_rows1 == 0 || $num_rows1=="")
{
$sql = "Update tbl_package set package_type='$package' WHERE package_type = '$name4' AND p_id='$id4'";
$retval = mysql_query( $sql, $conn );
echo '<script>alert("Updated Successsfully");window.location = "http://localhost/demo/add_package.php";</script>';
} else {
echo '<script>alert("Already Exists"); window.location = "http://localhost/demo/add_package.php";</script>';
}
} else {
echo '<script>alert("enter only letters and numbers");</script>';
}
}
?>
<form action="edit_package.php" method="post" enctype="multipart/form-data" novalidate="novalidate">
<input type="hidden" name="id3" value="<?php echo htmlspecialchars($_GET['id3'], ENT_QUOTES | ENT_HTML5); ?>" />
<input type="hidden" name="name3" value="<?php echo htmlspecialchars($_GET['name3'], ENT_QUOTES | ENT_HTML5); ?>" />
Update Package: <input type="text" id="package" name="package" class="form-control" required >
<input type="submit" class="btn btn-info btn-primary " value="Update" name="submit">
</form>
我从表单中删除了您的HTML格式。你有div标签没有匹配..我看不到你的整个代码,但看起来你有一堆混乱的div(即:没有关闭他们在哪里应该)。我还将mysql_real_escape_string()添加到传递的变量中,并将htmlspecialchars()添加到GET变量中,在表单的隐藏字段中回显。这是一个开始。
如果您编写的代码更清晰,您可能能够更好地理解代码并排除错误。不试图打击你:)正确的缩进,间距和格式化很长一段路。在这样的时候,它会使你的眼睛和自己更容易......
我离开了您的<script>
代码,因为我认为您有理由想要弹出一个消息框..我只会使用header('Location: /path/to/where.php');
并通过会话变量或其他内容传递您的错误消息,例如一系列错误,您可以获得,清除并在页面上显示错误。