2015-04-26 5 views
-2

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

было бы здорово, если бы кто-нибудь помог мне через это:

Вот моя страница формы, основанная на форме для переопределения классов, которые полны.

<?php 
include_once 'includes/db_connect.php'; 
include_once 'includes/functions.php'; 
sec_session_start(); 
?> 
     <meta charset="UTF-8"> 
     <link rel="stylesheet" href="styles/main.css" /> 
     <?php if (login_check($mysqli) == true) : ?> 
      <p>Welcome <?php echo htmlentities($_SESSION['username']); ?>!</p> 
<form method="post" action="db.php" name="OverrideForm" id="OverrideForm" autocomplete="off"> 
    <fieldset> 
     <legend><b>Personal Details</b></legend> 
     <div> 
      <label for="name" accesskey="N">First Name</label>&nbsp;&nbsp;&nbsp;&nbsp;<?php echo htmlentities($_SESSION['mname']); ?> 
      <input name="name" type="text" id="name" required /> 
     </div> 
<br> 
     <div> 
      <label for="mname" accesskey="M">Middle Name</label> 
      <input name="mname" type="text" id="mname" required /> 
     </div> 
<br> 
     <div> 
      <label for="fname" accesskey="F">Last Name</label>&nbsp;&nbsp;&nbsp;&nbsp; 
      <input name="fname" type="text" id="fname" required /> 
     </div> 
<br> 
     <div> 
      <label for="sid" accesskey="i">Student ID</label>&nbsp;&nbsp;&nbsp;&nbsp; 
      <input name="sid" type="text" id="sid" pattern="^(S|s)[0-9]{8}$" required /> 
     </div> 
<br> 
<div> 
      <label for="email" accesskey="E">Email</label>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      <input name="email" type="email" id="email" pattern="^[A-Za-z0-9](([_\.\-]?[a-zA-Z0-9]+)*)@([A-Za-z0-9]+)(([\.\-]?[a-zA-Z0-9]+)*)\.([A-Za-z]{2,})$" required /> 
     </div> 
<br> 
     <div> 
      <label for="phone" accesskey="p">Phone No.</label>&nbsp;&nbsp;&nbsp;&nbsp; 
      <input name="phone" type="tel" id="phone" pattern="^[0-9]{8}$" required /> 
     </div> 
<br> 
<div> 
    <label for="sc" accesskey="s">Scolarship</label>&nbsp;&nbsp;&nbsp; 
    <input name = "sc" type="radio" value="1" checked="checked">Yes</input> 
    <input name="sc" type="radio" value="0">No</input> 
</div>  

    </fieldset> 
<br > 

    <fieldset> 
     <legend><b>Subject Details</b></legend> 

<div> 
      <label for="class" accesskey="c">Subject</label>&nbsp;&nbsp; 
      <input name="class" type="text" id="class" size="50" required /> 
     </div> 
<br>  
     <div> 
      <label for="section" accesskey="o">Section</label>&nbsp;&nbsp; 
      <input name="section" type="number" id="section" min="1" max="9" required /> 
     </div> 
<br>  

     <div> 
      <label for="semester" accesskey="S">Semester</label> 
      <select name="semester" id="semester" required="required"> 
       <option value="F15">Fall 2015</option> 
       <option value="S15">Summer 2015</option> 
       <option value="SP16">Spring 2016</option> 
      </select> 
     </div> 
    </fieldset> 
<br > 
    <fieldset> 
     <legend><b>Agreement</b></legend> 
<form action="#" onSubmit="if(document.getElementById('agree').checked) { return true; } else { alert('Please indicate that you have agreed on the terms'); return false; }"> 

<input type="checkbox" name="checkbox" value="check" id="agree" required />&nbsp;By checking this box, i am fully responsible for the data entered above. I am also providing my official online signature to be liable in however the site may use it &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for. 
<br> <i><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;* Date and time are recorded for various reasons.</font></i> 

<br><br> 
      <label for="date" accesskey="c">&nbsp;&nbsp&nbsp;&nbsp;&nbsp;Current Date & Time : </label> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> 
<meta name="Content-Script-Type" content="text/javascript"> 
<meta name="Content-Style-Type" content="text/css"> 
<script type="text/javascript"> 
document.write ('<span id="date-time">', new Date().toLocaleString(), '<\/span>') 
if (document.getElementById) onload = function() { 
    setInterval ("document.getElementById ('date-time').firstChild.data = new Date().toLocaleString()", 50) 
} 
</script> 
    </fieldset> 
<br> 
    <input type="submit" class="submit" id="submit" value="Submit" />&nbsp;&nbsp;&nbsp;<input type="reset" value="Reset"><br> 
</form> 
</form> 

     <?php else : ?> 
      <p> 
       <span class="error">You are not authorized to access this page.</span> Please <a href="index.php">login</a>. 
      </p> 
     <?php endif; ?> 

Это моя структура db в таблице с именем «student».

enter image description here

Я не знаю, как начать через это, как я немного запутался.

В основном я хочу получать определенные данные из каждой записи в таблице в зависимости от зарегистрированного имени пользователя или электронной почты.

functions.php

 <?php 
include_once 'psl-config.php'; 

function sec_session_start() { 
    $session_name = 'sec_session_id'; // Set a custom session name 
    $secure = SECURE; 
    // This stops JavaScript being able to access the session id. 
    $httponly = true; 
    // Forces sessions to only use cookies. 
    if (ini_set('session.use_only_cookies', 1) === FALSE) { 
     header("Location: ../error.php?err=Could not initiate a safe session (ini_set)"); 
     exit(); 
    } 
    // Gets current cookies params. 
    $cookieParams = session_get_cookie_params(); 
    session_set_cookie_params($cookieParams["lifetime"], 
     $cookieParams["path"], 
     $cookieParams["domain"], 
     $secure, 
     $httponly); 
    // Sets the session name to the one set above. 
    session_name($session_name); 
    session_start();   // Start the PHP session 
    session_regenerate_id(true); // regenerated the session, delete the old one. 
} 
function login($email, $password, $mysqli) { 
    // Using prepared statements means that SQL injection is not possible. 
    if ($stmt = $mysqli->prepare("SELECT id, username, password, salt 
     FROM student 
     WHERE email = ? 
     LIMIT 1")) { 
     $stmt->bind_param('s', $email); // Bind "$email" to parameter. 
     $stmt->execute(); // Execute the prepared query. 
     $stmt->store_result(); 

     // get variables from result. 
     $stmt->bind_result($user_id, $username, $db_password, $salt); 
     $stmt->fetch(); 

     // hash the password with the unique salt. 
     $password = hash('sha512', $password . $salt); 
     if ($stmt->num_rows == 1) { 
      // If the user exists we check if the account is locked 
      // from too many login attempts 

      if (checkbrute($user_id, $mysqli) == true) { 
       // Account is locked 
       // Send an email to user saying their account is locked 
       return false; 
      } else { 
       // Check if the password in the database matches 
       // the password the user submitted. 
       if ($db_password == $password) { 
        // Password is correct! 
        // Get the user-agent string of the user. 
        $user_browser = $_SERVER['HTTP_USER_AGENT']; 
        // XSS protection as we might print this value 
        $user_id = preg_replace("/[^0-9]+/", "", $user_id); 
        $_SESSION['user_id'] = $user_id; 
        // XSS protection as we might print this value 
        $username = preg_replace("/[^a-zA-Z0-9_\-]+/", 
                   "", 
                   $username); 
        $_SESSION['username'] = $username; 
        $_SESSION['login_string'] = hash('sha512', 
           $password . $user_browser); 
        // Login successful. 
        return true; 
       } else { 
        // Password is not correct 
        // We record this attempt in the database 
        $now = time(); 
        $mysqli->query("INSERT INTO login_attempts(user_id, time) 
            VALUES ('$user_id', '$now')"); 
        return false; 
       } 
      } 
     } else { 
      // No user exists. 
      return false; 
     } 
    } 
} 

function checkbrute($user_id, $mysqli) { 
    // Get timestamp of current time 
    $now = time(); 

    // All login attempts are counted from the past 2 hours. 
    $valid_attempts = $now - (2 * 60 * 60); 

    if ($stmt = $mysqli->prepare("SELECT time 
          FROM login_attempts 
          WHERE user_id = ? 
          AND time > '$valid_attempts'")) { 
     $stmt->bind_param('i', $user_id); 

     // Execute the prepared query. 
     $stmt->execute(); 
     $stmt->store_result(); 

     // If there have been more than 5 failed logins 
     if ($stmt->num_rows > 5) { 
      return true; 
     } else { 
      return false; 
     } 
    } 
} 

function login_check($mysqli) { 
    // Check if all session variables are set 
    if (isset($_SESSION['user_id'], 
         $_SESSION['username'], 
         $_SESSION['login_string'])) { 

     $user_id = $_SESSION['user_id']; 
     $login_string = $_SESSION['login_string']; 
     $username = $_SESSION['username']; 

     // Get the user-agent string of the user. 
     $user_browser = $_SERVER['HTTP_USER_AGENT']; 

     if ($stmt = $mysqli->prepare("SELECT password 
             FROM student 
             WHERE id = ? LIMIT 1")) { 
      // Bind "$user_id" to parameter. 
      $stmt->bind_param('i', $user_id); 
      $stmt->execute(); // Execute the prepared query. 
      $stmt->store_result(); 

      if ($stmt->num_rows == 1) { 
       // If the user exists get variables from result. 
       $stmt->bind_result($password); 
       $stmt->fetch(); 
       $login_check = hash('sha512', $password . $user_browser); 

       if ($login_check == $login_string) { 
        // Logged In!!!! 
        return true; 
       } else { 
        // Not logged in 
        return false; 
       } 
      } else { 
       // Not logged in 
       return false; 
      } 
     } else { 
      // Not logged in 
      return false; 
     } 
    } else { 
     // Not logged in 
     return false; 
    } 
} 

function esc_url($url) { 

    if ('' == $url) { 
     return $url; 
    } 

    $url = preg_replace('|[^a-z0-9-~+_.?#=!&;,/:%@$\|*\'()\\x80-\\xff]|i', '', $url); 

    $strip = array('%0d', '%0a', '%0D', '%0A'); 
    $url = (string) $url; 

    $count = 1; 
    while ($count) { 
     $url = str_replace($strip, '', $url, $count); 
    } 

    $url = str_replace(';//', '://', $url); 

    $url = htmlentities($url); 

    $url = str_replace('&amp;', '&#038;', $url); 
    $url = str_replace("'", '&#039;', $url); 

    if ($url[0] !== '/') { 
     // We're only interested in relative links from $_SERVER['PHP_SELF'] 
     return ''; 
    } else { 
     return $url; 
    } 
} 
+1

Я не вижу здесь SQL. Но в основном вы используете предложение 'where' на' select' https://dev.mysql.com/doc/refman/5.0/en/select.html –

+2

Не звучать пренебрежительно, но похоже, что вам нужно пройдите несколько учебных пособий о том, как использовать MySQL с PHP. В основном вы спрашиваете: «Как написать сайт, который использует базу данных?» Это * бит * широкий для вопроса о переполнении стека. Мы будем рады помочь, если вы столкнетесь с какими-либо конкретными проблемами при разработке этого, но на самом деле мы не предоставляем полные учебники по этому вопросу. – David

+0

что вы хотите, сделайте это ясно –

ответ

1

первую очередь, его лучше держать идентификатор пользователя в качестве переменной сессии для случая, несколько пользователей имеют такое же имя. вы можете сделать это, взяв его из базы данных, когда пользователь входит в систему. Предполагая, что все эти данные существуют в базе данных. логика при переходе на страницу формы: захватить данные из базы данных в соответствии с идентификатором пользователя , установите эти данные в значение каждого элемента. У меня уже есть «сценарий подключения к базе данных». в верхней части страницы после подключения к БД:

$strSQL = "SELECT * FROM student WHERE id=$_SESSION['id']"; 
$rs = mysql_query($strSQL); 
$row = mysql_fetch_array($rs); 

и для каждого из элементов формы, например:

<input name="name" type="text" id="name" required value="<?php echo $row['name']; ?>"/> 
<input name="email"...value="<?php echo $row['email']; ?>..." 

текст в [*] должно совпадать с именем столбец базы данных. Надеюсь, я каким-то образом помог и испортил синтаксис.

+0

Спасибо !!! но у меня есть одна проблема, что он никогда не работает при выполнении id = $ _ SESSION ['id'] он работает только тогда, когда он равен $ _SESSION ['username'] – Sam

+0

Могу ли я добавить свои функции.php, который проверяет наличие logedd у пользователей и, возможно, там вы можете помочь мне узнать, почему он никогда не работает при попытке получить данные из сеанса, кроме имени пользователя. – Sam

+0

добавил код, было бы здорово, если бы вы посмотрели на него! Ценить это! – Sam

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