我几天前就开始工作了,但是一旦用户登录了他们的帐户,我似乎无法在屏幕上显示会话ID。我有两个PHP,我一直在努力,我已经使用在线检查器检查了两个错误,并且没有任何问题。因此,使用下面的内容,一旦用户登录,它将在网站的标题内显示其会话ID,但即使我正确登录(我已经检查过它'用我的数据库登录),它显示的所有内容"你没有登录!"。
Login.inc.php
<?php
include '../dbh.php';
$email = $_POST['email'];
$pwd = $_POST['pwd'];
$sql = "SELECT * FROM user WHERE email='$email' AND pwd='$pwd'";
$result = mysqli_query($conn, $sql);
if (!$row = mysqli_fetch_assoc($result)) {
echo "You are not signed in!";
} else {
$_SESSION['id'] = $row['id'];
}
header("Location: ../index.php");
?>
site_header.php
<head>
<?php
session_start();
?>
<link rel="stylesheet" type="text/css" href="vendors/css/normalize.css">
<link rel="stylesheet" type="text/css" href="vendors/css/grid.css">
<link rel="stylesheet" type="text/css" href="vendors/css/ionicons.min.css">
<link rel="stylesheet" type="text/css" href="css/style.css">
<link href="https://fonts.googleapis.com/css?family=Lato:400,300,100,300,200italic" rel="stylesheet" type="text/css">
<title>iBPBuyer</title>
</head>
<body>
<header>
<nav>
<ul>
<li><a href="index.php">HOME</a></li>
<li><a href="signup.php">SIGN UP</a></li>
<?php
echo "<form action='includes/login.inc.php' method='POST'>
<input type='email' name='email' placeholder='E-Mail'>
<input type='password' name='pwd' placeholder='Password'>
<button type='submit'>Login</button>
</form>";
?>
<?php
if(isset($_SESSION['id'])) {
echo $_SESSION['id'];
} else {
echo "You are not logged in!";
}
?>
</ul>
</nav>
</header>
答案 0 :(得分:1)
你不只是想回应一些东西。我建议使用经过验证的标志
<%= form_for(partner) do |f| %>
<% if partner.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(partner.errors.count, "erro(s)") %> não deixa(m) o cadastro ser efetuado:</h2>
<ul>
<% partner.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<% end %>
<h3>Dados Funcionais</h3>
<div class="dados-funcionais">
<div class="row">
<div class="field col-md-4">
<%= f.label :registry_number %>
<%= f.number_field :registry_number %>
</div>
<div class="field col-md-4">
<%= f.label :name %>
<%= f.text_field :name %>
</div>
<div class="field col-md-4">
<%= f.label :institution %>
<%= f.text_field :institution %>
</div>
</div>
<div class="row">
<div class="field col-md-4"><br>
<%= f.label :secretary %>
<%= f.collection_select(:secretary, Secretary.all, :name, :name, prompt: true) %>
</div> <br>
<div class="field col-md-4">
<%= f.label :position %>
<%= f.text_field :position %>
</div>
<div class="field col-md-4">
<%= f.label :base_salary %>
<%= f.text_field :base_salary %>
</div>
<div class="field organ-select">
<%= f.label :organ %>
<%= select("partner", "organ", options_for_select([["Prefeitura Municipal de Bertioga", "PMB"],["Câmara Municipal de Bertioga", "CMB"],["Bertprev", "BTP"]]), prompt: true) %>
</div>
</div>
</div>
<h3>Dados Pessoais</h3>
<div class="dados-pessoais">
<div class="row">
<div class="field col-md-4">
<%= f.label :RG %>
<%= f.text_field :rg, :placeholder => "__-___-___-_" %>
</div>
<div class="field col-md-4">
<%= f.label :CPF %>
<%= f.text_field :cpf, :placeholder => "___-___-___-__" %>
</div>
<div class="field col-md-4">
<%= f.label :email %>
<%= f.text_field :email %>
</div>
</div>
<div class="row linha">
<div class="field col-md-4">
<%= f.label :phone_number %>
<%= f.text_field :phone_number, :placeholder => "(__) _____-____" %>
</div>
<div class="field col-md-4">
<%= f.label :phone_number2 %>
<%= f.text_field :phone_number2, :placeholder => "(__) ____-____" %>
</div>
<div class="field col-md-4">
<%= f.label :birth_city %>
<%= f.text_field :birth_city %>
</div>
</div>
<div class="row linha">
<div class="field col-md-4 partner_birthday">
<%= f.label :birthday %>
<%= f.date_select :birthday, start_year: 1940 %>
</div>
<div class="field col-md-4">
<%= f.label :spouse %>
<%= f.text_field :spouse %>
</div>
</div>
</div>
<h3>Dados Residenciais</h3>
<div class="dados-residenciais">
<%= f.fields_for :address do |ff| %>
<div class="row">
<div class="field col-md-4">
<%= ff.label :street %>
<%= ff.text_field :street %>
</div>
<div class="field col-md-4">
<%= ff.label :number %>
<%= ff.text_field :number %>
</div>
<div class="field col-md-4">
<%= ff.label :neighborhood %>
<%= ff.text_field :neighborhood %>
</div>
</div>
<div class="row linha">
<div class="field partner_type_home col-md-4">
<%= ff.label :type_home %>
<%= select("address", "type_home", options_for_select([["Apartamento", "APTO"],["Casa", "CASA"]]), prompt: true) %>
</div>
<div class="field col-md-4">
<%= ff.label :city %>
<%= ff.text_field :city %>
</div>
<div class="field col-md-4">
<%= ff.label :state %>
<%= ff.text_field :state %>
</div>
<div class="field">
<%= ff.label :zipcode %>
<%= ff.text_field :zipcode %>
</div>
</div>
<% end %>
</div>
<h3>Dependentes</h3>
<div id="dependent-fields">
<span class="adicionar-dependente"><%=
link_to_add_association 'Adicionar Dependente', f, :dependents,
'data-association-insertion-node' => "#dependent-fields ul"
%></span>
<ul>
<%= f.fields_for :dependents do |dependent| %>
<%= render partial: 'dependent_fields', locals: {f: dependent} %>
<% end %>
</ul>
</div>
</div>
<div class="dates">
<div class="date1">
<%= f.label :union_admission %> <br>
<%= f.date_select :union_admission, start_year: 1940 %>
</div>
<div class="date2">
<%= f.label :start_date %> <br>
<%= f.date_select :start_date, start_year: 1940 %>
</div>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
然后在您的视图中,您可以执行此操作
class PartnersController < ApplicationController
before_action :set_partner, only: [:show, :edit, :update, :destroy]
# GET /partners
# GET /partners.json
def index
@partners = Partner.all
end
# GET /partners/1
# GET /partners/1.json
def show
end
# GET /partners/new
def new
@partner = Partner.new
@partner.build_address
@partner.dependents.build
end
def consultar
@partners = Partner.all
end
def excluir
@partners = Partner.all
end
# GET /partners/1/edit
def edit
@partner.build_address
@partner.dependents.build
end
# POST /partners
# POST /partners.json
def create
@partner = Partner.new(partner_params)
respond_to do |format|
if @partner.save
format.html { redirect_to @partner, notice: 'O associado foi cadastrado com sucesso.' }
format.json { render :show, status: :created, location: @partner }
else
format.html { render :new }
format.json { render json: @partner.errors, status: :unprocessable_entity }
end
end
end
# PATCH/PUT /partners/1
# PATCH/PUT /partners/1.json
def update
respond_to do |format|
if @partner.update(partner_params)
format.html { redirect_to @partner, notice: 'O cadastro do associado foi atualizado com sucesso.' }
format.json { render :show, status: :ok, location: @partner }
else
format.html { render :edit }
format.json { render json: @partner.errors, status: :unprocessable_entity }
end
end
end
# DELETE /partners/1
# DELETE /partners/1.json
def destroy
@partner.destroy
respond_to do |format|
format.html { redirect_to partners_url, notice: 'Partner was successfully destroyed.' }
format.json { head :no_content }
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_partner
@partner = Partner.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def partner_params
params.require(:partner).permit(:name, :registry_number, :institution, :organ, :secretary, :position, :base_salary, :rg, :cpf, :address_id, :email, :phone_number, :phone_number2, :birth_city, :birthday, :spouse, :union_admission, :start_date, :address_attributes => [:id, :street, :number, :type_home, :neighborhood, :city, :state, :zipcode, :partner_id], :dependents_attributes => [:id, :name, :partner_id, :_destroy])
end
end
答案 1 :(得分:0)
您需要header("Location: ../index.php");
发送或回复任何内容。
由于标头是与echo "You are not logged in"
一起发送的,因此它不会发送另一个标题来重定向。
解决方法是eb跳过echo,或使用Js重定向用户。
if (!$row = mysqli_fetch_assoc($result)) {
header("Location: ../index.php");
} else {
$_SESSION['id'] = $row['id'];
}
这会起作用
进一步向下,同样适用于session_start,因为它需要在标头中发送会话cookie。
这个头标记也引起了问题
<head>
<?php
session_start();
?>
检查你的错误日志,我打赌你已经发送了一个标题。
所以最后,在开始会话或使用header()之前,你不能发送或回显任何东西。另一个解决方法是使用输出缓冲区。见http://php.net/manual/en/function.ob-start.php