Неопределенный индекс при извлечении переменной из $ _GET в URL - PullRequest
0 голосов
/ 26 мая 2018

Хорошо, у меня почти закончен сценарий, но у меня возникла проблема, связанная с тем, что я получаю ошибку неопределенного индекса, когда пытаюсь отправить страницу с индексом 'site', который используется в обоих $ _GET для полученияэто из URL и отправки.

<?php 
// including the database connection file
include_once("config.php");
$sitenumber = "";
$videolink = "";
$daynight = "";
$maxtents = "";
$maxpersons = "";
$geography = "";
$view = "";
$forestcover = "";
$waterfront = "";
$firepit = "";
$description = "";
$reslink = ""; 

if(isset($_POST['update']) && isset($_GET['site']))
{    
$sitenumber = $_POST['sitenumber'];
$videolink = $_POST['videolink'];
$daynight = $_POST['daynight'];
$maxtents = $_POST['maxtents'];
$maxpersons = $_POST['maxpersons'];
$geography = $_POST['geography'];
$view = $_POST['view'];
$forestcover = $_POST['forestcover'];
$waterfront = $_POST['waterfront'];
$firepit = $_POST['firepit'];
$description = $_POST['description'];
$reslink = $_POST['reslink'];   

// checking empty fields
if(empty($sitenumber) || empty($videolink) || empty($daynight) || 
empty($maxtents) || empty($maxpersons) || empty($geography) || 
    empty($view) || empty($forestcover) || empty($waterfront) || 
empty($firepit) || empty($description) || empty($reslink)) {                
    if(empty($sitenumber)) {
        echo "<font color='red'>Site Number field is empty.</font><br/>";
    }

    if(empty($videolink)) {
        echo "<font color='red'>YouTube Link field is empty.</font><br/>";
    }

    if(empty($daynight)) {
        echo "<font color='red'>Day or overnight field is empty.</font> 
<br/>";
    }        

    if(empty($maxtents)) {
        echo "<font color='red'>Maximum Tents field is empty.</font><br/>";
    }

    if(empty($maxpersons)) {
        echo "<font color='red'>Maximum Persons field is empty.</font> 
<br/>";
    }        

    if(empty($geography)) {
        echo "<font color='red'>Geography field is empty.</font><br/>";
    }

    if(empty($view)) {
        echo "<font color='red'>View field is empty.</font><br/>";
    }        

    if(empty($forestcover)) {
        echo "<font color='red'>Forest Cover field is empty.</font><br/>";
    }

    if(empty($waterfront)) {
        echo "<font color='red'>Waterfront Access field is empty.</font> 
<br/>";
    }  

    if(empty($firepit)) {
        echo "<font color='red'>Firepit field is empty.</font><br/>";
    }        

    if(empty($description)) {
        echo "<font color='red'>Description field is empty.</font><br/>";
    }

    if(empty($reslink)) {
        echo "<font color='red'>Reservation Link Access field is empty. 
</font><br/>";
    }       
} else {    
    //updating the table
    $result = mysqli_query($mysqli, "UPDATE sites SET 

sitenumber='".$sitenumber."',videolink='".$videolink."'
,daynight='".$daynight."',
maxtents='".$maxtents."'
,maxpersons='".$maxpersons."'
,geography='".$geography."', 

view='".$view."',forestcover='".$forestcover."',
waterfront='".$waterfront."', 

firepit='".$firepit."',description='".$description."',reslink='".$reslink."' 
WHERE sitenumber='".$sitenumber."'");

    //redirectig to the display page. In our case, it is index.php
    header("Location: index.php");
  }
}
        echo mysqli_error($mysqli);
?>
<?php
//getting id from url

$sitenumber = $_GET['site']; //Undefined index here

//selecting data associated with this particular id
$result = mysqli_query($mysqli, "SELECT * FROM sites WHERE 
sitenumber='".$sitenumber."'");

while($res = mysqli_fetch_array($result))
{
$sitenumber = $res['sitenumber'];
$videolink = $res['videolink'];
$daynight = $res['daynight'];
$maxtents = $res['maxtents'];
$maxpersons = $res['maxpersons'];
$geography = $res['geography'];
$view = $res['view'];
$forestcover = $res['forestcover'];
$waterfront = $res['waterfront'];
$firepit = $res['firepit'];
$description = $res['description'];
$reslink = $res['reslink'];
}
            echo mysqli_error($mysqli);
?>
<html>
<head>    
<title>Edit Data</title>
</head>

<body>
<a href="index.php">Home</a>
<br/><br/>

<form name="form1" method="post" action="edit.php">
    <table border="0">
    <tr> 
            <td>Site Number</td>
            <td><input type="number" name="sitenumber" value=<?php echo 
$sitenumber;?>></td>
        </tr>
        <tr> 
            <td>YouTube Link</td>
            <td><input type="url" name="videolink" value="<?php echo 
$videolink;?>"></td>
        </tr>
        <tr> 
            <td>Day or Overnight</td>
            <td><select name="daynight" value="<?php echo $daynight;?>">
            <option value="Day">Day</option>
            <option value="Overnight">Overnight</option></td>

        </tr>
                    <tr> 
            <td>Maximum Tents</td>
            <td><input type="number" name="maxtents" value="<?php echo 
 $maxtents;?>"></td>
        </tr>
                    <tr> 
            <td>Maximum Persons</td>
            <td><input type="number" name="maxpersons" value="<?php echo 
 $maxpersons;?>"></td>
        </tr>
                    <tr> 
            <td>Geography</td>
            <td><input type="text" name="geography" value="<?php echo 
 $geography;?>"></td>
        </tr>
                    <tr> 
            <td>View</td>
            <td><input type="text" name="view" value="<?php echo $view;?>"> 
 </td>
        </tr>
                    <tr> 
            <td>Forest Cover</td>
            <td><input type="text" name="forestcover" value="<?php echo 
 $forestcover;?>"></td>
        </tr
                    <tr> 
            <td>Waterfront Access</td>
            <td><select name="waterfront" value="<?php echo $waterfront;?>">
            <option value="Yes">Yes</option>
            <option value="No">No</option></td>
        </tr>
                    <tr> 
            <td>Firepit Availability</td>
            <td><select name="firepit" value="<?php echo $firepit;?>">
            <option value="Yes">Yes</option>
            <option value="No">No</option></td>
        </tr>
                    <tr> 
            <td>Site Description</td>
            <td><input type="text" name="description" value="<?php echo 
 $description;?>"></td>
        </tr>
                    <tr> 
            <td>Reservation Link</td>
           <td><input type="url" name="reslink" value="<?php echo $reslink;? 
 >"></td>
        </tr>
            <td><input type="hidden" name="site" value="<?php echo 

 $_GET['site'];?>"></td>  //Undefined here

            <td><input type="submit" name="update" value="Update"></td>

        </tr>
    </table>
</form>
</body>
</html>

Пока вы, ребята, были удивительны с моими другими ошибками, я надеюсь, что вы можете указать мне правильное направление.И я знаю, я должен использовать подготовленные заявления, но я только учусь делать их сейчас, когда мне сказали, что они есть.Я исправлю это в свое время.Сейчас мне просто нужно, чтобы эта страница обновления работала.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 26 мая 2018

Проблема в том, что GET ['site'] может быть отключен на этих позициях.У вас есть хорошая проверка, чтобы увидеть, установлен ли $ _GET ['site'] в первой части кода, но та часть, в которой вы абсолютно уверены, что $ _GET ['site'] фактически установлен, заканчивается непосредственно перед концом PHPтег.После этого $ _GET ['site'] никогда больше не проверяется, если он существует.

Есть два способа решения этой конкретной проблемы:
Либо вы устанавливаете значение по умолчанию $sitenumber и используете sitenumberво всех местах вашего кода, где вам нужен $ _GET ['site']
Или вы также помещаете вторую часть внутри оператора if, что означает, что вам нужно будет скопировать текущий HTML-код и вставить его без $_GET ['site'] и все, что от него зависит

Надеюсь, понятно, что вам просто нужно установить значение по умолчанию.Самый простой способ - использовать оператор null coalesce , который будет означать, что вам нужно будет внести два небольших изменения.
Первое и наиболее очевидное: изменить $sitenumber = $_GET['site']; //Undefined index here на $sitenumber = $_GET['site'] ?? "your default value" ;
Второе изменение от <td><input type="hidden" name="site" value="<?php echo $_GET['site'];?>"></td> до <td><input type="hidden" name="site" value="<?php echo $sitenumber?>"></td>

0 голосов
/ 26 мая 2018

Что такое $ sitenumber = $ _GET ['site'];// Здесь должен быть неопределенный индекс, когда он еще не настроен?Какое значение по умолчанию?

$sitenumber = $_GET['site'] ?? 'DEFAULT VALUE';

так же, как

$sitenumber = isset($_GET['site']) ? $_GET['site'] : 'DEFAULT VALUE';

Похоже, что вы могли бы хотеть:

$sitenumber = $_GET['site'] ?? $sitenumber;

Так как вы определяете эту переменную сверху.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...