Не могу определить, куда $_SESSION [‘x’] отправляется для хранения данных регистрационной формы в сеансе

#php

#php

Вопрос:

Я схожу с ума, пытаясь узнать, как использовать сеансы для хранения значений пользовательских полей в моем registration_form.php таким образом, я могу вызывать данные на других страницах. Я прочитал всевозможные веб-сайты, но, похоже, никто не объясняет, куда именно я должен поместить код для сбора данных. У меня есть два пользовательских регистрационных поля, которые я добавил в скрипт (bio и displayname). Я попытался вставить этот код в регистрационную форму вверху и внизу, а также в register.php (оба сценария ниже).

Куда отправляется код для сохранения этих полей в сеансе? Я знаю, что ниже это неправильно, потому что на данный момент я пытался разместить это везде, всеми возможными способами….

//registration_form.php

 <?php session_start();
$_SESSION['displayname'] = $displayname;
$_SESSION['bio'] = $bio;
$author = $_SESSION['displayname'];
$bio = $_SESSION['bio'];
?>
<HTML>
<head>
<title>Practice</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- Bootstrap -->
<link href="css/bootstrap.min.css" rel="stylesheet" media="screen">
<link href="css/style.css" rel="stylesheet" media="screen">
</head>
<body>
<script src="js/jquery.js"></script>
<script src="js/bootstrap.min.js"></script>
<script type="text/javascript" src="js/jquery.validate.js"></script>
<div class="logo">
<h2><?php include('db.php'); echo $logotxt; ?></h2>

</div>
<form class="form-horizontal" id="register_form" method="post">
<h2>Register</h2>

<div class="line"></div>
<div class="control-group">
<input type="text" id="inputEmail" name="email" placeholder="Email">
</div>
<div class="control-group">
<input type="text" id="inputuserid" name="username" placeholder="Username">
</div>
<div class="control-group">
<input type="text" id="displayname" name="displayname" placeholder="Display name">
</div>
<div class="control-group">
<textarea name="bio" class="textfield" id="bio" cols="25" rows="7" placeholder="Bio
(optional). Tell us about yourself."></textarea>

</div>         

<button type="submit" class="btn btn-large btn-primary btn-sign-in" data-loading-
text="Loading...">Register</button>
<a href="index.php" class="btn btn-large btn-register">Sign in</a>
<div class="messagebox">
<div id="alert-message"></div>
</div>
</form>

<?php 

// starting the session
session_start();

if (isset($_POST['Submit'])) { 
$_SESSION['displayname'] = $displayname;
$_SESSION['bio'] = $bio;
} 
?> 
  

//register.php

 <?php
include("db.php");

$con=mysql_connect($server, $db_user, $db_pwd) //connect to the database server
or die ("Could not connect to mysql because ".mysql_error());

mysql_select_db($db_name)  //select the database
or die ("Could not select to mysql because ".mysql_error());

//prevent sql injection
$username=mysql_real_escape_string($_POST["username"]);
$displayname=mysql_real_escape_string($_POST["displayname"]);
$password=mysql_real_escape_string($_POST["password"]);
$email=mysql_real_escape_string($_POST["email"]);
$bio=mysql_real_escape_string($_POST["bio"]);

//check if user exist already
$query="select * from ".$table_name." where username='$username'";
$result=mysql_query($query,$con) or die('error');
if (mysql_num_rows($result))
{
die($msg_reg_user);
}
//check if user exist already
$query="select * from ".$table_name." where email='$email'";
$result=mysql_query($query,$con) or die('error');
if (mysql_num_rows($result))
{
die($msg_reg_email);

}

session_start();
$_SESSION['displayname'] = $displayname;
$_SESSION['bio'] = $bio;

$activ_key = sha1(mt_rand(10000,2222).time().$email);
$hashed_password = crypt($password); 
$query="insert into ".$table_name."(username,displayname,password,email,activ_key,bio)
values ('$username','$displayname','$hashed_password','$email','$activ_key','$bio')";

if (!mysql_query($query,$con))
{
die('Error: ' . mysql_error());
}
  

Комментарии:

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

2. держитесь подальше от w3schools, у них опасно плохой код.

3. Да … но не смог найти свою ситуацию, которая у меня есть. Я выяснил, что это происходит в login.php скрипт — не registration.php скрипт. По-прежнему не работает — теперь у меня это так: $ query=»select * from «.$table_name.» где username =’$username’ и password = ‘$hashed_password’ и activ_status в(1)»; $result=mysql_query ($ query, $ con) или die (‘ошибка’); if(mysql_num_rows($ result)) { $_SESSION[‘login’] = true; $_SESSION[‘username’]=$username; $_SESSION[‘bio’]=$bio; $_SESSION[‘displayname’]=$displayname; echo json_encode( array(‘result’=>1)); }

4. @Dagon тогда порекомендуйте ему хорошее место для начала..

5. Да, Dagon… Я потратил последние 2 часа на попытки w3 schools. Я знаю, что это очень просто, но я впервые использую sessions, и это просто не сработает, независимо от того, что я пробовал до сих пор.

Ответ №1:

Я не уверен, что вы пытаетесь здесь, но не следует ли ваше действие формы в regisration_form.php быть установленным в register.php?

 <form class="form-horizontal" id="register_form" method="post" action="register.php">
  

Затем ваша форма будет отправлена в register.php. Способ, которым вы настроили сеанс в register.php в принципе правильно. Чтобы получить доступ к значению сеанса на других страницах, выполните:

 $displayname= $_SESSION['displayname']; 
$bio=$_SESSION['bio']; 
  

Комментарии:

1. Привет, Ананта, именно так появился код, который я приобрел. Я попытался изменить действие на register.php и метод post, и я получаю точно такой же результат, как и при полном исключении action. То есть, это работает в обоих направлениях для всего, кроме передачи моих пользовательских переменных. И, кроме того, разве переменные сеанса не должны храниться в форме входа после входа пользователя в систему каждый раз, а не в форме регистрации, которая является одноразовой?

2. Привет, затем форма, вероятно, отправляется Ajax. Должен быть написан javascript, который принимает только адрес электронной почты и имя пользователя из вашей формы и отправляет в register.php. Проверьте наличие JS-кода и добавьте код для чтения ваших пользовательских полей.

3. Правильно … Ajax. Я не знал, что это повлияло на сеансы php. Если мне нужно манипулировать JS для хранения сессий, то у меня действительно проблемы, поскольку я очень мало знаю о javascript. Думаю, я начну читать.