Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Sessão PHP e problemas de postagem na página de login


Editar: Ok, então você cometeu um erro de digitação nos campos do formulário. Você ainda está misturando as APIs do MySQL, veja mais abaixo sobre a função de mixagem usando mysql_real_escape_string() .

Veja name="myusername" e sua atribuição POST, juntamente com a sua senha.

Eles não combinam.

Alterar name="myusername" para name="username"

e name="mypassword" para name="password"

conforme
$myusername=$_POST["username"];
$mypassword=$_POST["password"];

Tendo usado relatório de erros , teria sinalizado um índice indefinido e um aviso de cabeçalhos já enviado; Veja abaixo.

Você também tem espaços antes de <?php o que causaria uma saída antes do cabeçalho. Remova eles.

Além disso, você está misturando APIs MySQL com mysql_error() . mysql_error() deve ler como mysqli_error($con) e este abaixo:
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);

que deve ler como
$myusername = mysqli_real_escape_string($con,$myusername);
$mypassword = mysqli_real_escape_string($con,$mypassword);

ou
$myusername = mysqli_real_escape_string($con,$_POST['username']);
$mypassword = mysqli_real_escape_string($con,$_POST['password']);
  • mysqli_ e mysql_ funções não se misturam.

Em relação à segurança

Percebi que você pode estar armazenando senhas em texto simples. Se este for o caso, é altamente desencorajado.

Eu recomendo que você use CRYPT_BLOWFISH ou password_hash() do PHP 5.5 função. Para PHP <5.5, use o password_hash() compatibility pack .

Além disso, em relação à injeção de SQL, use mysqli com declarações preparadas , ou PDO com declarações preparadas , são muito mais seguros .

Notas de rodapé

É melhor adicionar exit; após cada cabeçalho.
header("location:login_success.php");
exit;

e para todos os cabeçalhos.

Editar:

Remover
$myusername=$_POST["username"];
$mypassword=$_POST["password"];
echo $myusername . "<br>";  
echo $mypassword . "<br>";

depois substitua por:
$myusername = stripslashes($_POST["username"]);
$mypassword = stripslashes($_POST["password"]);
$myusername = mysqli_real_escape_string($con,$_POST['username']);
$mypassword = mysqli_real_escape_string($con,$_POST['password']);

Editar nº 2 :

Foi com isso que testei seu código e obtive sucesso, portanto, não sei o que há de errado com seu código atual.

FORMULÁRIO HTML
<form action="main_login.php" method="post" style="text-align:right;">
    Username:   
    <input type="text" name="username" value="" size=20  style="display:inline-block;margin-left:10px"required>
    <br> 
    Password:  
    <input type="text" name="password" value="" size=20 style="margin-left:12px"required> 
    <br>  
    <input type="submit" value="Log In" style="margin-left:75px"=> 
</form>

MySQL
<?php

    $DB_HOST = 'xxx';
    $DB_USER = 'xxx';
    $DB_PASS = 'xxx';
    $DB_NAME = 'xxx';

    $conn = new mysqli($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME);
    if($conn->connect_errno > 0) {
      die('Connection failed [' . $conn->connect_error . ']');
    }

    $myusername = stripslashes($_POST["username"]);
    $mypassword = stripslashes($_POST["password"]);
    $myusername = mysqli_real_escape_string($conn,$_POST['username']);
    $mypassword = mysqli_real_escape_string($conn,$_POST['password']);


    echo $myusername; // echos
    echo "<br>";
    echo $mypassword; // echos


    $sql="SELECT * FROM register WHERE username='$myusername' and password='$mypassword'";
    $result=mysqli_query($conn,$sql);

    $count=mysqli_num_rows($result);

    if($count==1){
        echo "Yep";
    }
    else{
        echo "nope";
    }

N.B.: Você também deve limpar suas sessões (destruir sessões ), pode haver algo no servidor armazenando em cache antigos nomes de usuário e senhas.

Verifique também se não há espaços em suas colunas, se os tipos estão corretos e se os comprimentos são longos o suficiente para conter os dados. Normalmente VARCHAR(255) é mais que suficiente, mas é sugerido ao usar senhas com hash geradas por password_hash() , uma função que você deve usar ao armazenar senhas.

Veja também:

na pilha.