php
2015-05-30 57 views 1 likes 
1

我知道它是一个重复的,但我试图从链接传递的数据获取此错误..我不知道如何解决它。尝试获取从链接返回的值时未定义的索引错误?

这里是我的代码:

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> 

当我按下更新按钮我得到一个未定义的错误,我不知道为什么?..谢谢提前 我连接到它的图像.. enter image description here

From this link the data has to be passed to the edit_package file...I'm getting those two values but when i click the update button its getting an error

+1

您的表单正在发送POST,所以GETs不再设置。 ''form id =“form-validation”action =“edit_package.php”method =“post”' – chris85

+1

你的逻辑全都是错误的.. $ _GET ['id3']和$ _GET ['name3']没有设置,这是_exactly_错误的含义。你不能使用$ _GET ['name3']或任何其他的GET变量,如果* not *在URL中传递,如:'file.php?name3 = something'。 - 你的表单发送POST数据到edit_package.php,其中*没有* GET变量存在... –

+0

错误显示你什么是错的 –

回答

3

尝试改变<form>的行动网址,包括您的GET varaibles:

<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"> 

请注意:这是非常不安全!在使用之前,您需要对ALL进行消毒。我上面的例子,尊重安全性,只是为了证明我的观点。 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(),但你应该使用mysqliPDO反正...

例子:

$name4 = mysql_real_escape_string($_GET['name3']); 

这是令人困惑,我不知道是什么的GET变量称为name3,但你为它分配变量$name4..稍后有人(甚至你)会出现在你的代码中。

更新:

试试这个代码。我在你的php代码中将GET的POST换成了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');和通你的错误信息通过一个会话变量或者其他东西,比如一系列错误,你会得到,清除并在页面上显示错误。

相关问题