Примечание: неопределенный индекс: идентификатор пользователя в C: \ xampp \ htdocs \ locallocal \ admin \ userUpdate.php в строке 5

0
<?php
include 'header.php';
include("../php/functions.php");
if(!isset($_SESSION)) session_start();
if(isset($_POST['userID']))$userID = $_POST['userID'];
$username=sanitiseInput ($_POST['username']);
$firstname=sanitiseInput ($_POST['firstname']);
$surname=$_POST['surname'];
$emailadd=$_POST['emailadd'];

$dayob=$_POST['dayob'];
$monthob=$_POST['monthob'];
$yearob=$_POST['yearob'];
$dob=$yearob."-".$monthob."-".$dayob;
$user_type = $_POST['user_type'];
$tnc=(isset($_POST['tnc'])?1:0);

// check user is old enough, in this example users must be 16

$latestbirthday=mktime(0, 0, 0,date("m"),date("d"),date("Y")-16); // the last value controls min age
//$birthday=mktime(0, 0, 0, substr($dob,5,2), substr($dob,8,2), substr($dob,0,4));
$birthday=mktime(0, 0, 0, $monthob, $dayob, $yearob);

$validage=(($birthday-$latestbirthday)>0?false:true);

$conn = createConnection();

// Check submitted and calculated variables before storing
if($tnc && isset($firstname) && isset($surname) && $validage) {
    if ($_POST['userpass']!="" && $_POST['secondpass']!="" || $_POST['userpass']!=null && $_POST['secondpass']!=null){
        $userpass=$_POST['userpass'];
        $secondpass=$_POST['secondpass'];       
        $salt=getSalt(16);
        $cryptpass=makeHash($userpass,$salt,50);
        // Update user
        $query=mysqli_query($conn,"update users set username='$username', firstname='$firstname', surname='$surname', emailadd='$emailadd', dob='$dob', usertype='$user_type', tnc='$tnc', salt='$salt', userpass='$cryptpass' where userid='$userID'") or die(mysql_error());

    }else{
        // Update user
        $query=mysqli_query($conn,"update users set username='$username', firstname='$firstname', surname='$surname', emailadd='$emailadd', dob='$dob', usertype='$user_type', tnc='$tnc' where userid='$userID'") or die(mysql_error());
        var_dump($query);
        die();      
    }
    // check user updated, if so display message
    if($query){
    echo '<p style="color:red;">User has been successfully updated.</p>';
    echo '<p>You can return to the <a href="edit_user.php">Edit User Page</a></p>'; 
    } else { 
        //feedback there was a problem adding the user
        echo "<p>There was a problem adding your details.</p>";
        echo '<p>You need to return to the <a href="edit_user.php">Edit User Page</a> and try again</p>'; 
        }
}else { 
        //Updation failed either due to disabled javascript or other attempt to bypass validation
?>
        <header>
            <h1>Updation failed</h1>
        </header>
        <?php 
        if($userpass!=$secondpass){ echo "<p>The passwords do not match.</p>"; }
        if(!filter_var($emailadd, FILTER_VALIDATE_EMAIL)){ echo "<p>The email address is invalid.</p>"; }
        ?>
        <p>You need to return to the <a href="edit_user.php">Edit User Page</a> and try again</p>       
<?php 
}

include 'footer.php';
$db->close();
?>

Я пытаюсь обновить пользователя от администратора до обычного пользователя. Когда я обновляю, я получил эту ошибку. Уведомление: неопределенная переменная: userID в C:\xampp\htdocs\locallocal\admin\userUpdate.php в строке 40 bool (true). Поскольку я новый ученик php, так мало объяснений поможет. Заранее спасибо.

Это детали пользователя, которые я хочу обновить.

<?php 
include 'header.php';

if(isset($_SESSION['usertype']) && $_SESSION['usertype']>2){
?>

<h1>Update User</h1>

<?php

if(isset($_REQUEST['id'])){

include('../config.php');

$id=$_REQUEST['id'];

//this query will select the user data which is to be used to fill up the form

$query=mysqli_query($conn,"select userid, username, firstname, surname, dob, emailadd, usertype,
                                    EXTRACT(YEAR FROM dob) AS dobYear,
                                    EXTRACT(MONTH FROM dob) AS dobMonth,
                                    EXTRACT(DAY FROM dob) AS dobDay
                                    from users where userid='$id'") or die(mysqli_error($conn));

$num=mysqli_num_rows($query);

//just a little validation, if a record was found, the form will be shown

//it means that there an information to be edited

if($num>0){

$row=mysqli_fetch_assoc($query);

//extract($row);
print_r($row);

$uId =  $row['userid'];
$username =  $row['username'];
$firstname =  $row['firstname'];
$surname =  $row['surname'];
$email = $row['emailadd'];
$dobYear = $row['dobYear'];
$dobMonth = $row['dobMonth'];
$dobDay = $row['dobDay'];
$usertype= $row['usertype'];
?>

<form id="updateuser" name="updateuser" method="post" action="userUpdate.php">

<input type='hidden' name="dobYear" id='dobYear' value="<?php echo $dobYear ?>" />
<input type='hidden' name='dobMonth' id='dobMonth' value='<?php echo $dobMonth ?>' />
<input type='hidden' name='dobDay' id='dobDay' value='<?php echo $dobDay ?>' />

<label for="username">Username : </label><input type="text" id="username" name="username" value="<?php echo $username ?>" required size="15" /><span id="usernameFb"></span><br />
<label for="firstname">First name : </label><input type="text" id="firstname" name="firstname" value="<?php echo $firstname ?>" required size="15" /><span id="firstnameFb"></span><br />
<label for="surname">Surname : </label><input type="text" id="surname" name="surname" value="<?php echo $surname ?>" required size="15" /><span id="surnameFb"></span><br />
<label for="emailadd">Email Address : </label><input type="email" id="emailadd" name="emailadd" value="<?php echo $email ?>" required size="30" /><span id="emailFb"></span><br />

<p></p>
<fieldset style="width:45%; border-radius:5px; border: 1px solid #DEDEDE; background:#EFEFEF">
            <legend>Date of Birth</legend>
            <label class="datelabel" for="dayob" style="display:inline;">Day</label>
            <select name="dayob" id="dayob">
            </select>

            <label class="datelabel" for="monthob" style="display:inline;">Month</label>
            <select name="monthob" id="monthob">
                <option value="1" <?php echo ($dobMonth==1)?'selected="selected"':"" ?>>January</option>
                <option value="2" <?php echo ($dobMonth==2)?'selected="selected"':"" ?>>February</option>
                <option value="3" <?php echo ($dobMonth==3)?'selected="selected"':"" ?>>March</option>
                <option value="4" <?php echo ($dobMonth==4)?'selected="selected"':"" ?>>April</option>
                <option value="5" <?php echo ($dobMonth==5)?'selected="selected"':"" ?>>May</option>
                <option value="6" <?php echo ($dobMonth==6)?'selected="selected"':"" ?>>June</option>
                <option value="7" <?php echo ($dobMonth==7)?'selected="selected"':"" ?>>July</option>
                <option value="8" <?php echo ($dobMonth==8)?'selected="selected"':"" ?>>August</option>
                <option value="9" <?php echo ($dobMonth==9)?'selected="selected"':"" ?>>September</option>
                <option value="10" <?php echo ($dobMonth==10)?'selected="selected"':"" ?>>October</option>
                <option value="11" <?php echo ($dobMonth==11)?'selected="selected"':"" ?>>November</option>
                <option value="12" <?php echo ($dobMonth==12)?'selected="selected"':"" ?>>December</option>
            </select>
            <label class="datelabel" for="yearob" style="display:inline;">Year</label>
            <select name="yearob" id="yearob">
            <?php /* <option value="<?php echo $dobYear?>" selected="selected"></option>*/?>
            </select><span id="ageFb"></span>
        </fieldset>

<label for="userpass">Password : </label><input type="password" id="userpass" name="userpass" size="15" /><span id="userpassFb"></span><br />
<label for="passstrresult" style="display:inline-block;">Strength</label><div id="passstrresult" style="height:20px;display:inline-block;margin-left:15px;"></div>
<label for="secondpass">Password : </label><input type="password" id="secondpass" name="secondpass" size="15" /><span id="secondpassFb"></span><br />

<label for="user_type" style="display:inline-block;">Select User Type :</label>
            <select name="user_type" id="user_type">
                <option value="1" <?php echo (isset($usertype)&&($usertype==1))?'selected="selected"':"" ?>>Suspend</option>
                <option value="2" <?php echo (isset($usertype)&&($usertype==2))?'selected="selected"':"" ?>>Registered</option>
                <option value="3" <?php echo (isset($usertype)&&($usertype>2))?'selected="selected"':"" ?>>Admin</option>
            </select>
<label for="tnc">I agree to the Terms and Conditions</label><input type="checkbox" name="tnc" id="tnc" required /><span id="tncFb"></span><br />

    <!-- so that we could identify what record is to be updated -->

    <input type='hidden' name='id' value='<?php echo $uId ?>' />    
    <p>        
    <input class="submit" id="update" name="update" type="submit" value="Update">
    </p>    
</form>

<?php

}else{

echo "<div>User not found.</div>";

}

}
else{

echo "<div> You are not authorized to view this page";

}


}else{
    echo "<h1>Update User</h1><br>";
    echo "Sorry, Only ''Admin'' can access to this Page...";
} ?>

<!-- js -->
<script src="../js/functions.js"></script>
<script src="../js/update_user.js"></script>

<script>
document.onreadystatechange = function(){
    if(document.readyState=="complete") {
        prepareUpdation();

        //Set the Day value of user Day of Birth
        var valsearch = document.getElementById("dobDay").value;
        var s = document.getElementById("dayob");       
        // Loop through all the items in drop down list
        for (i = 0; i< s.options.length; i++){          
        if (s.options[i].value === valsearch){          
        // Item is found. Set its property and exit
        s.options[i].selected = true;
        break;
        }
        }

        //Set the year value of user Year of Birth
        var valsearch = document.getElementById("dobYear").value;
        var s = document.getElementById("yearob");      
        // Loop through all the items in drop down list
        for (i = 0; i< s.options.length; i++){          
        if (s.options[i].value === valsearch){          
        // Item is found. Set its property and exit
        s.options[i].selected = true;
        break;
        }
        }
    }       

};
</script>
<?php 
include 'footer.php';
?>
  • 0
    Вы сделали переменную $userID , но вы никогда не назначали $userID = $_POST['userID'] .
  • 0
    Я назначил $ userID = $ _POST ['userID'] в строке 5.
Показать ещё 2 комментария
Теги:

1 ответ

0
Лучший ответ

Заголовок вашего вопроса гласит, что индекса в ассоциативном массиве нет. Это означает, что в массиве $ _POST нет поля 'userID', который заполняется данными из формы, когда форма отправляется через POST.

if(isset($_POST['userID']))$userID = $_POST['userID'];

Из-за недостающего поля isset ($ _ POST ['userID']) является ложным, а переменная $ userID не будет инициализирована.

Это привело к ошибке, указанной ниже вашего кода. Код принимает переменную $ userID, когда такой переменной нет.

Проверьте свои переданные данные, если это содержит идентификатор пользователя поля var_dumping $ _POST прямо в 4-й строке.

Обновление: в форме написано:

$uId =  $row['userid'];
.
.
.
<input type='hidden' name='id' value='<?php echo $uId ?>' />

Поэтому вам нужно искать поле типа $ _POST ['id']

  • 0
    Большое спасибо за ваше объяснение. Можете ли вы взглянуть на мой код формы. Это было бы очень полезно, поскольку, я думаю, я передаю все детали, которые требовались. И еще раз спасибо, что объяснили мне.
  • 0
    Кстати, ваш код открыт для SQL-инъекций, так как не очищает идентификатор в запросе select, вам следует избегать написания SQL-операторов вручную и вместо этого использовать framework или pdo.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню