PHP + mysqli пытается настроить параметры сайта для авторизованного пользователя

0

Я изучаю php, и я использую учебник для создания небольшого сайта сообщества. У меня уже есть регистрация, логин и потерянный пароль, а также страница профиля, где пользователь может видеть свои данные, которые сохраняются в базе данных.

Теперь я пытаюсь создать страницу настроек, где пользователь может редактировать свою информацию, и я уменьшил ее, чтобы просто изменить пароль на данный момент для целей тестирования.

Итак, чтобы узнать, вошел ли пользователь в систему, у меня есть эта функция, которую я включил на странице настроек:

    <?php

include_once("db_conx.php");
// Files that inculde this file at the very top would NOT require 
// connection to database or session_start(), be careful.
// Initialize some vars
$user_ok = false;
$log_id = "";
$log_username = "";
$log_password = "";
// User Verify function
function evalLoggedUser($conx,$id,$u,$p){
    $sql = "SELECT ip FROM users WHERE id='$id' AND username='$u' AND password='$p' AND activated='1' LIMIT 1";
    $query = mysqli_query($conx, $sql);
    $numrows = mysqli_num_rows($query);
    if($numrows > 0){
        return true;
    }
}
if(isset($_SESSION["userid"]) && isset($_SESSION["username"]) && isset($_SESSION["password"])) {
    $log_id = preg_replace('#[^0-9]#', '', $_SESSION['userid']);
    $log_username = preg_replace('#[^a-z0-9]#i', '', $_SESSION['username']);
    $log_password = preg_replace('#[^a-z0-9]#i', '', $_SESSION['password']);
    // Verify the user
    $user_ok = evalLoggedUser($db_conx,$log_id,$log_username,$log_password);
} else if(isset($_COOKIE["id"]) && isset($_COOKIE["user"]) && isset($_COOKIE["pass"])){
    $_SESSION['userid'] = preg_replace('#[^0-9]#', '', $_COOKIE['id']);
    $_SESSION['username'] = preg_replace('#[^a-z0-9]#i', '', $_COOKIE['user']);
    $_SESSION['password'] = preg_replace('#[^a-z0-9]#i', '', $_COOKIE['pass']);
    $log_id = $_SESSION['userid'];
    $log_username = $_SESSION['username'];
    $log_password = $_SESSION['password'];
    // Verify the user
    $user_ok = evalLoggedUser($db_conx,$log_id,$log_username,$log_password);
    if($user_ok == true){
        // Update their lastlogin datetime field
        $sql = "UPDATE users SET lastlogin=now() WHERE id='$log_id' LIMIT 1";
        $query = mysqli_query($db_conx, $sql);
    }
}
?>

И это страница настроек:

    <?php

include 'php_includes/db_conx.php';
include 'php_includes/login_ex.php';
include_once("php_includes/check_login_status.php");

// Initialize any variables that the page might echo
$u = "";
$sex = "Male";
$userlevel = "";
$country = "";
$joindate = "";
$lastsession = "";
$password = "";
// Make sure the _GET username is set, and sanitize it
if(isset($_GET["u"])){
    $u = preg_replace('#[^a-z0-9]#i', '', $_GET['u']);
} else {
    header("location: index.php");
    exit(); 
}
// Select the member from the users table
$sql = "SELECT * FROM users WHERE username='$u' AND activated='1' LIMIT 1";
$user_query = mysqli_query($db_conx, $sql);
// Now make sure that user exists in the table
$numrows = mysqli_num_rows($user_query);
if($numrows < 1){
    echo "That user does not exist or is not yet activated, press back";
    exit(); 
}
// Check to see if the viewer is the account owner
$isOwner = "no";
if($u == $log_username && $user_ok == true){
    $isOwner = "yes";
}
// Fetch the user row from the query above
while ($row = mysqli_fetch_array($user_query, MYSQLI_ASSOC)) {
    $profile_id = $row["id"];
    $gender = $row["gender"];
    $country = $row["country"];
    $userlevel = $row["userlevel"];
    $signup = $row["signup"];
    $lastlogin = $row["lastlogin"];
    $joindate = strftime("%b %d, %Y", strtotime($signup));
    $lastsession = strftime("%b %d, %Y", strtotime($lastlogin));

    if($gender == "f"){
        $sex = "Female";
    }
}
?>
<!doctype html>
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="robots" content="index, follow">

        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <link href="css/bootstrap.css" rel="stylesheet" media="screen" type="text/css">
        <link href="css/custom.css" rel="stylesheet" type="text/css">
        <link href="css/bootstrap-min.css" rel="stylesheet" media="screen" type="text/css">
        <script src="js/main.js"></script>
        <title>KZ|Language exchange</title>
    </head>
    <body>
    <div id="custom-bootstrap-menu" class="navbar navbar-default navbar-fixed-top" role="navigation">
    <div class="container-fluid">
        <div class="navbar-header"><a class="navbar-brand" href="#">Brand</a>
            <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-menubuilder"><span class="sr-only">Toggle navigation</span><span class="icon-bar"></span><span class="icon-bar"></span><span class="icon-bar"></span>
            </button>
        </div>
        <div class="collapse navbar-collapse navbar-menubuilder">
            <ul class="nav navbar-nav navbar-left">
                <li><a href="index.php">Home</a>
                </li>
                <li><a href="user.php">Profile</a>
                </li>
                <li><a href="/about-us">About Us</a>
                </li>

            </ul>
            <ul class="nav navbar-nav navbar-right">

                <li><?php
        if ($isOwner == "yes") {?>

        <a class="navbar-brand" href="logout.php" style="border-left: 1px solid; padding-left: 10px;">Logout</a>
        <?php
        }
        ?>
                </li>
            </ul>
        </div>
    </div>
</div>



<div class="container">

    <div class="row-fluid">

        <div class="col-md-9">


  <h3><?php echo $u; ?></h3>
  <p>Is the viewer the page owner, logged in and verified? <b><?php echo $isOwner; ?></b></p>
  <p>Gender: <?php echo $sex; ?></p>
  <p>Country: <?php echo $country; ?></p>
  <p>User Level: <?php echo $userlevel; ?></p>
  <p>Join Date: <?php echo $joindate; ?></p>
  <p>Last Session: <?php echo $lastsession; ?></p>
  <p>Password: <?php echo $password; ?></p>

  <?php var_dump($_SESSION); 
  var_dump($_SESSION['username']);

  ?>
  <?php
  // i need to make sure that $isOwner = "yes"; so only logged in users see the form and can change the password
  if (isset($_POST['submit'])) {
    $password = $_POST["password"];
    var_dump($password);
    $sql = "UPDATE users SET password='$password' WHERE username='$u'";


  }
  ?>

<h3>Create new password</h3>
  <form action="user.php" method="post">
    <div>Password</div>
    <input type="text" class="form-control" id="password" name="password">

    <br /><br />
    <input type="submit" name="submit" value="Submit"> 
    <p id="status" ></p>
  </form>


        </div>

    <div class="col-md-3">
        <div class="loginbox">
            <?php
                if ($isOwner == "yes") {?>
                <h3>Welcome <?php echo $u; ?>!</h3>

                <?php
                if ($isOwner == "yes") {?>

                <p>Last online: <?php echo $lastsession;?> </p>
                <br /><br />
                <?php
                }
                ?>
                <button class="btn btn-default" href="logout.php">Log Out</button>
                <?php
                }
                ?>

                </div>
            </div>
        </div>

</div>


<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
<script src="js/bootstrap.min.js"></script>
<script src="js/main.js"></script>
<script src="js/ajax.js"></script>

    </body>

<?php

include 'php_includes/footer.php';

?>
</html>

По какой-то причине ничего не меняется в db, когда я нажимаю submit, его так странно, что я полностью из идей...

Но мои знания настолько ограничены, что я не вижу, где ошибка, и я застрял.

Кто-нибудь есть идея о том, как я мог бы сделать эту работу?

Заранее спасибо!

EQ

  • 0
    В чем именно ошибка? Что вы пытаетесь сделать, а что не работает?
  • 0
    я пытаюсь заменить текущий сохраненный пароль (в базе данных) новым паролем из формы для пользователя, который вошел в систему. Но я не знаю, как получить идентификатор пользователя и имя пользователя из функции проверки входа в систему, и я получаю примечание, подобное следующему: Примечание: неопределенная переменная: id в C: \ xampp \ htdocs \ KZ \ settings.php в строке 8 Примечание: неопределенная переменная: u в C: \ xampp \ htdocs \ KZ \ settings.php в строке 8
Показать ещё 4 комментария
Теги:
sql-update
mysqli

1 ответ

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

Почему вы используете запрос выбора для пользователей, где вы проверяете идентификатор, имя пользователя и пароль. Я предполагаю, что у каждого пользователя есть свой идентификатор, чтобы вы могли просто проверить идентификатор. Не помещайте пароль в сеанс.

изменить на:

<form action="" method="post">
  • 0
    Комментарии не для расширенного обсуждения; этот разговор был перенесен в чат .
  • 0
    Хорошо, я изменил это, но я не получаю вывод.
Показать ещё 1 комментарий

Ещё вопросы

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