2015-05-30 4 views
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, поэтому GET больше не установлены. '

chris85

+1

Ваша логика ошибочна .. $ _GET ['id3'] и $ _GET ['name3'] не установлены, что _exactly_, что означает эта ошибка. Вы не можете использовать $ _GET ['name3'] или любую другую переменную GET, если она * не * передана в URL-адресе, например: 'file.php? Name3 = something'. - Ваша форма отправляет данные POST в edit_package.php, какие * нет * GET-переменные присутствуют ... –

+0

ошибка Показывает, что вы ошибаетесь –

ответ

3

Попробуйте изменить <form> «ю.ш. URL действия, чтобы включить ваши 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"> 

ОБРАТИТЕ ВНИМАНИЕ: Это чрезвычайно небезопасно! Перед использованием его необходимо очистить ВСЕ. Мой пример выше, не относится к безопасности, и просто должен продемонстрировать свою точку зрения. 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 , может легко позволить злоумышленнику добавлять/редактировать/просматривать/удалять данные в вашей базе данных.

Проблема заключается в том, что у вас есть $package (это необработанные данные из POST) и $id4 и $name4 (это необработанные данные из GET) в вашем SQL-запросе.

Вы бы использовать mysql_real_escape_string() на них, но вы должны использовать mysqli или PDO любом случае ...

Пример:

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

Это сбивает с толку, я не знаю, что переменная GET называется name3, но вы назначаете ему переменную $name4.. Тот, кто приходит (даже вы) позже, будет потерян в вашем коде.

Обновлено:

Пробуйте этот код. Я поменял ваш GET на POST в вашем php-коде и передал переменные GET из вашего URL как скрытые поля в вашей форме.

<?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'); и пропустил ваше сообщение об ошибке через переменную сеанса или что-то вроде массива ошибок, которые вы получаете, очищаете и показываете на странице ошибки.

Смежные вопросы