2017-08-12 8 views
-4

残念ながら私は初心者であるという問題に対する解決策を見つけられなかったし、なぜこの機能がうまくいかず、どうすれば使用するのか分からない。コードと問題plzz。 (PS:ちょうどGoogle翻訳用DSL)plzz password_verifyが動作しない

(//Really 20 hours i try. No solution...(page login)  if (isset($_POST['connexion'])) 
{ $pseudoconnect=htmlspecialchars($_POST['pseudoconnect']); 
$passwordconnect=htmlspecialchars($_POST['passwordconnect']); 
if (!empty('$pseudoconnect') AND !empty('$passwordconnect')) 
{ 
$pseudoconnectlenght=strlen($pseudoconnect) ; 
$passwordconnectlenght=strlen($passwordconnect) ; 
if ($pseudoconnectlenght<3 || $pseudoconnectlenght>10 || $passwordconnectlenght<3 || $passwordconnectlenght >10) 
{    
echo "remplis tous les infos exacte"; 
} 
else 
{      
$repnom = $connect->prepare("SELECT password FROM membres WHERE pseudo=? "); 
$repnom->execute(array($passwordconnect)); 
$userinfo= $repnom->fetch(); 
$_SESSION['password']= $userinfo['password']; 
if (password_verify($_POST['passwordconnect'], $userinfo['password'])) 
{ 
echo "valid"; 
} else { 
echo "pas valid";}}} 

(正しいページ登録作業)私はpassword_hashとその機能のwell..PSを使用します。ちょうどGoogle翻訳用DSL)

if (isset($_POST['envoyer'])) 
     { 


      if (!empty($_POST['pseudo']) AND !empty($_POST['password'])) 
      { 
        $pseudo=htmlspecialchars($_POST['pseudo']); 
        $password=htmlspecialchars($_POST['password']); 
        //$password=password_hash('password',PASSWORD_DEFAULT,['cost'=>12]); 

         $pseudolenght=strlen($pseudo); 
         $passwordlenght=strlen($password); 
         /*verifier les champs */ 
         if ($pseudolenght<4 ||$pseudolenght>10 || $passwordlenght<4 || $passwordlenght> 10) 
          { 

              echo "pass ou pseudo pas correct"; 
          }  
           else //enregistrement et verifier pseudo 
            { 

             $repetepseudo = $connect->prepare("SELECT * FROM membres WHERE pseudo=?"); 
             $repetepseudo->execute(array($pseudo)); 
             $existpseudo = $repetepseudo->rowCount(); 
             //verifier pseudo si déja existe 
               if ($existpseudo == 0) 
                { 
                 //hasher password 

                 $hash=password_hash($password,PASSWORD_DEFAULT,['cost'=>12]); 

                 $sql = "INSERT INTO membres (pseudo,password) VALUES (?,?)"; 
                 $query = $connect->prepare($sql); 
                 $query->execute(array($pseudo,$hash)); 





                  echo "enregistrement valide"; 
                  //header('location: html.php'); 

                } 

                 else 
                  { 
                   echo "déja utiliser"; 
                } 
                } 


                  } //if empty 
                    else { 

                       echo "remplir tous les champs "; 
                      } 





                           }//if isset eenvoyer 

答えて

0

私がテストを作成ファイルとデータベースを作成し、あなたの正確なPHPコードをテストし、うまくいきました。

私は例外なく1つを変更しました。あなたのSQLステートメントで "SELECT password from membres WHERE pseudo =?"というWHERE 'pseudo'を選択していますが、クエリを実行するときにはexecute()でarray($ passwordconnect)を使用しています。あなたはarray($ pseudoconnect)を使うつもりはありませんか?確かにユーザー名を探していますが、現在は($ pseudoconnect)ではなくパスワード($ passwordconnect)で検索しています。

それでも問題が解決しない場合、私はどちらかと結論付けることができます:

1)のいずれかまたはあなたの$ _POSTsの両方がサーバーに到着していません。ユーザー名とパスワードは、その後、彼らはすることになっているものでない場合は

$pseudoconnect=htmlspecialchars($_POST['pseudoconnect']); 
$passwordconnect=htmlspecialchars($_POST['passwordconnect']); 
var_dump($pseudoconnect); 
var_dump($passwordconnect); 

:このような最初の2つの$ _POSTラインPHPファイルを空に(戻ってそれまでのことは必ず!)とのvar_dump() PHPファイルに$ _POST-ingしていないという問題があります。

または2.)あなたのSQLクエリが間違っています。たぶんあなたは何かスペルミスをしているか、あなたの声明に多少の間違いをしています。ここでも、var_dump()を使用すると、このツールはPHPの生涯で非常に便利です。 var_dump($ userinfo)soのように:

$userinfo= $repnom->fetch(); 
var_dump($userinfo); 

何も表示されない場合は、SQLクエリのすべての小さなものをダブルチェックしてください。

+0

私は擬似コネクト(jone)passwordconnect(jone)の表示(jone jone not valid)と入力してください。 、2番目の2-)表示文字列(4) "jone"文字列(5) "jone" bool(false)pas valid ... sqlの問題ですか? – zikoo

+0

$ repnom-> execute(array($ passwordconnect));を '$ repnom-> execute(array($ pseudoconnect));に変更してください。 –

関連する問題