4

こんにちは、SQL サーバーに使用するために php でログインおよびセッション スクリプトを作成しようとしていますが、それを機能させることができません。しかし、コードの何が問題なのか、私は憤慨してphpとsqlサーバーを使い始めたばかりで、自分の問題を理解するための知識を得ていません。悲しいことに、SQLサーバーとPHPを使用する多くの優れたチュートリアルサイトがあるとは限らないため、共有していただけますか. この段階では、どんな助けも大歓迎です。私の主な問題は、html フォームに投稿された情報がデータベースに存在するかどうかを確認していないことです。(私はjs検証を取り出しましたが、それは必要なものを縫い合わせていませんが、それは機能します)

ログイン.html

<form name="log" action="log_action.php" method="post">
Username: <input class="form" type="text" name="uNm"><br />
Password: <input class="form" type="password" name="uPw"><br />
<input name="submit" type="submit" value="Submit">
</form>

log_action.php

session_start();
$serverName = "(local)";
$connectionInfo = array("Database"=>"mydatabase","UID"=>"myusername", "PWD"=>"mypassword");
$conn = sqlsrv_connect( $serverName, $connectionInfo);
if( $conn === false){
    echo "Error in connection.\n";
    die( print_r( sqlsrv_errors(), true));
}
$username = $_REQUEST['uNm'];
$password  = $_REQUEST['uPw'];
$tsql = "SELECT * FROM li WHERE uNm='$username' AND uPw='$password'";
$stmt = sqlsrv_query( $conn, $tsql, array(), array( "Scrollable" => SQLSRV_CURSOR_KEYSET ));
if($stmt == true){
    $_SESSION['valid_user'] = true;
    $_SESSION['uNm'] = $username;
    header('Location: index.php');
    die();
}else{
    header('Location: error.html');
    die();
}

index.php

<?php
session_start();
if($_SESSION['valid_user']!=true){
    header('Location: error.html');
    die();
}
?>

皆さんがもたらすことができるかもしれないどんな助けにも感謝します

4

2 に答える 2

3

問題は、クエリの結果を実際に確認しないことです。

if($stmt == true){

クエリがエラーなしで実行されたことのみをチェックします。クエリによって返された結果については何も言いません。

したがって、クエリの結果を実際に調べるには、 sqlsrv_fetch関数 (または関連する関数のいずれか)を使用する必要があります。

特定のケースでは、結果セットにsqlsrv_has_rowsの行があるかどうかを確認するだけで十分です。

于 2013-02-04T01:04:16.933 に答える
2

あなたの答えが間違っていたらごめんなさい。私は初心者ですが、何か貢献できることがあると思います。このコードが機能するかどうかを確認してください。

<?php

#starts a new session
session_start();

#includes a database connection
include 'connection.php';

#catches user/password submitted by html form
$user = $_POST['user'];
$password = $_POST['password'];

#checks if the html form is filled
if(empty($_POST['user']) || empty($_POST['password'])){
    echo "Fill all the fields!";
}else{

#searches for user and password in the database
$query = "SELECT * FROM [DATABASE_NAME].[dbo].[users] WHERE user='{$user}' AND"
         ."password='{$password}' AND active='1'";
$result = sqlsrv_query($conn, $query);  //$conn is your connection in 'connection.php'

#checks if the search was made
if($result === false){
     die( print_r( sqlsrv_errors(), true));
}

#checks if the search brought some row and if it is one only row
if(sqlsrv_has_rows($result) != 1){
       echo "User/password not found";
}else{

#creates sessions
    while($row = sqlsrv_fetch_array($result)){
       $_SESSION['id'] = $row['id'];
       $_SESSION['name'] = $row['name'];
       $_SESSION['user'] = $row['user'];
       $_SESSION['level'] = $row['level'];
    }
#redirects user
    header("Location: restrict.php");
}
}

?>
必要に応じて、sqlsrv_fetch と sqlsrv_get_field() を組み合わせて同じことを行うことができます。次のように:

<?php
session_start();

[... CONNECTION ...]

[...  your POST request ...]

[... check your forms ...]

 Here is the past that is kinda particular
 [... YOUR QUERY ...]

$result = sqlsrv_query( $conn, $query);

if(!sqlsrv_fetch($result)){
  die(print_r(sqlsrv_erros()),true);
}else{
  $_SESSION['id'] = sqlsrv_get_field($result, 0);
  [... and so on ...]
}
?>
The sqlsrv_fetch() only holds a row and sqlsrv_get_field reads the content of that row. One grabs the other punches. Once you only is retrieving data from the database if the row that contains user AND password exists, sqlsrv_fetch() will only stay with the row that does have the parameters passed by form, if they exist in the database.
お勧めしませんが、sqlsrv_num_rows() を使用して行数を確認できますが、sqlsrv_query にいくつかのパラメーターを設定する必要があります。 " => SQLSRV_CURSOR_KEYSET )) またはそのような sth。

機会を下さりありがとうございます!!!:D

幸運を!

于 2014-12-30T06:19:28.513 に答える