2012-01-16 15 views
0

私は私の質問のための助けを見つけることができたかどうかを確認するために未定義のエラーの質問を見たが、私の問題のためにそれを解決することはできません。私は、ユーザーにログインしようとすると、 は、だから私は、未定義のインデックスを言うエラーが出る:私は挿入されたデータをユーザーにデータベースとテーブルを呼び出した理由Imは私のlogin.php]ページにこのメッセージを取得PHPのログインエラー - 通知:未定義のインデックス:

ないことを確認し

これは私がデータベース

conn.php

<?php 
    session_start(); 
    $dbhost = "127.0.0.1"; // my database 
    $dbname = "fxdme"; 
    $dbuser = "root"; 
    $dbpass = ""; 

    $mysqli = mysqli_connect($dbhost, $dbuser, $dbpass,$dbname) or die("MySQL Error: " .  mysqli_error("Cant Connect")); 

    ?> 

ログインスクリプト

に接続するために使用するものです10

login.php

<?php include 'template/header.php';?> 

<form action="login.php" method="POST"> 
    User Name: <input type="text" name="username" /> 
    Password: <input type="password" name="password"/> 
    <input class="submit" name="submit" type="submit" value="Log In"/> 
</form>  


<?php 

$result=$mysqli->query('SELECT * FROM users WHERE username = "' . 
$_POST['username'] . '" AND password = "' . $_POST['password'] . '"'); 

//set session user 
$row = $result->fetch_assoc(); 
$_SESSION['user_id'] = $row['id']; 

if ($_SESSION['user_id']) {  
    echo "You are logged in, $session_username. <a href='logout.php'>Log out</a>"; } 
else { 
    echo " cant log in"; 
} 
?> 

//インデックスページ

私のインデックスページ のindex.php

//in the template header is where Im calling my conn file 
<?php include 'template/header.php'; ?> 

<?php 
if (isset($_GET['invalid'])) {   
    echo "<tr><td colspan='2' align='right'>Invalid login.</td></tr>";  
} 
?> 

イムは、エラーを修正取得しようとしているので、私は、SQLインジェクションを心配していませんよ現時点では。私はちょうどログインし、後で他のものについて心配したいと思っています。

+1

$row = $result->fetch_assoc(); 

あります場合は、DBを照会する前に、ページ上のPOSTをチェックしていますか?例:(if(isset($ _ POST ["login"]))) – amd

+0

どのようなインデックスが未定義ですか? –

+0

スローされた正確なエラーのコピーを投稿します。 – JRSofty

答えて

4

ユーザ名が投稿変数にない場合、$_POST["username"]は無効なインデックスを返します。

私は通常、私はあなたのクエリステートメントの前にそう

最初のデータの検証と正規化を行うことができますので

$username=(isset($_POST) && isset($_POST["username"]) ? $_POST["username"] : ""; 
$password=(isset($_POST) && isset($_POST["password"]) ? $_POST["password"] : ""; 

その後、私のポスト変数を保持$ユーザ名と$を使用する変数のセットを作成

パスワードを入力します。前のステートメントを、変数名を渡してチェックする関数呼び出しに変えることができます。 ' union select * from users --

+0

と始まるところです。 OPはハッシュされていないパスワードを格納しています。 +1 –

+2

メモ:$ _POST配列が設定されているかどうかを確認する必要はありません。誰かが設定を解除しない限り($ _ POST)、常に設定されます。この場合、isset($ _ POST ['key'])をチェックすると警告なしでfalseが返されます。 – iBiryukov

+0

isset(array(key))が警告するかしないかを指定して、誰かがこの関数を他の配列に使用した場合には安全性の高いバージョンを置くだけで100%確実ではありませんでした。 –

0

のユーザ名で$_GETでフェッチするURLにクエリ文字列を作るためにあなたのコードには何もありませんし

function getPostVar($name) { 
    return (isset($_POST) && isset($_POST[$name]) ? $_POST[$name] : ""; 
} 

$username=getPostVar("username"); 
$password=getPostVar("password"); 

明らかにあなたのコードは、SQLインジェクションのために熟しています。あなたは何も持っていないときにどのようにインデックスを持つことができますか?

ユーザーがシステムにログインできない場合は、header('location:index.php?invalid=1');を使用する必要があります。

+0

これはバグですが、issetを使用しているため、特定のバグは報告されません –

-1

あなたと同じ問題ではないかもしれませんが、私はmysqliに変換するときと同じエラーがあり、私のフェッチのステートメントはあなたと同じように見えます。

お試しください。

$row = $result->fetch_array(MYSQLI_ASSOC)); 
関連する問題