0

私はMYSQLとPHPにまったく慣れていないので、非常に基本的なことをする必要があります。アカウントからパスワードを選択する必要がありますusername = $_POST['username']...これを理解できませんでしたresource id(2)。入力したアカウントに必要なパスワードの代わりにパスワードを取得し続けます。そのmysqlをmysqlクエリ関数に渡し、戻り値を変数$realpasswordに保存する必要があります。ありがとう!

編集:このコードは、実際のパスワードの代わりにリソースID(2)を返しましたコード:

<?php
$con = mysql_connect('server', 'user', 'pass'); 
if (!$con) 
{ 
    die('Could not connect: ' . mysql_error()); 
} 
echo '<br/> '; 

// Create table
mysql_select_db("dbname", $con);

//Variables

//save the entered values

$enteredusername = $_POST['username'];
$hashedpassword = sha1($_POST['password']);

$sql = "SELECT password from accounts where username = '$enteredusername'";

$new = mysql_query($sql,$con);

echo "$new";


if (!mysql_query($sql,$con))
{
  die('Error: ' . mysql_error());
}



mysql_close($con);

?> 
4

6 に答える 6

1

プリペアドステートメントと一緒にPDOを使用すると、はるかに優れたものになります。

これは、MySQLサーバーに接続する方法です。

$db = new PDO('mysql:host=example.com;port=3306;dbname=your_database', $mysql_user, $mysql_pass);

そして、これはあなたが適切に行を選択する方法です(を使用してbindParam):

$stmt = $db->prepare('SELECT password FROM accounts WHERE username = ?;');
$stmt->bindParam(1, $enteredusername);
$stmt->execute();
$result = $stmt->fetch(PDO::FETCH_ASSOC);
$password = $result['password'];

また、パラメータをバインドすると、すぐにクエリ文字列に入れるのではなく、SQLインジェクションから保護されます(この場合、入力をフィルタリングしない可能性が非常に高くなります)。

于 2013-02-18T18:48:27.000 に答える
0

これを試して

   <?php
  $con = mysql_connect('server', 'user', 'pass'); 
 if (!$con) 
 { 
 die('Could not connect: ' . mysql_error()); 
 } 
 echo '<br/> '; 

// Create table
 mysql_select_db("dbname", $con);

 //Variables

 //save the entered values

 $enteredusername = mysql_real_escape_string($_POST['username']);
 $hashedpassword = sha1($_POST['password']);

 $sql = "SELECT password from accounts where username = '$enteredusername'";

 $new = mysql_query($sql,$con);

 $row = mysql_fetch_array($new) ;
 echo $row['password'];

 if (!$new)
{
 die('Error: ' . mysql_error());
}



 mysql_close($con);

?> 
于 2013-02-18T18:48:26.190 に答える
0

あなたのコードはこんな感じだと思います

$realpassword = mysql_query("SELECT password 
     from accounts where username = '$_POST[username]'");
echo $realpassword;

Resourceこれにより、データベース内のレコードを指すために使用されるが返されます。次に行う必要があるのは、リソースが指している行をフェッチすることです。したがって、これを行います(MySQLは現在非推奨であるため、MySQLの代わりに構造MySQLiを使用することに注意してください)。

$connection = mysqli_connect("localhost", "your_mysql_username", 
    "your_mysql_password", "your_mysql_database") 
    or die("There was an error");
foreach($_POST as $key=>$val) //this code will sanitize your inputs.
    $_POST[$key] = mysqli_real_escape_string($connection, $val);
$result = mysqli_query($connection, "what_ever_my_query_is") 
    or die("There was an error");
//since you should only get one row here, I'm not going to loop over the result.
//However, if you are getting more than one rows, you might have to loop.
$dataRow = mysqli_fetch_array($result);
$realpassword = $dataRow['password'];
echo $realpassword;

したがって、これによりパスワードの取得が処理されます。しかし、その後、より固有の問題が発生します。入力をサニタイズしておらず、ハッシュ化されたパスワードをデータベースに保存していない可能性もあります。PHPとMySQLを使い始めている場合は、これらのことを実際に調べる必要があります。

編集:ログインシステムの作成のみを検討している場合は、データベースからパスワードを取得する必要はありません。その場合、クエリは非常に簡単です。

$pass = sha1($_POST['Password']);
$selQ = "select * from accounts 
    where username = '$_POST[Username]' 
    and password = '$pass'";
$result = mysqli_query($connection, $selQ);
if(mysqli_num_rows($result) == 1) {
    //log the user in
}
else {
    //authentication failed
}

論理的に言えば、ユーザーがログインできる唯一の方法は、ユーザー名とパスワードの両方が一致する場合です。したがって、ユーザー名とパスワードの行は1行だけになります。それがまさに私たちがここでチェックしていることです。

于 2013-02-18T18:49:22.857 に答える
0

この質問を見ると、プログラミングに非常に慣れていないことがわかります。このリンクhttp://php.net/manual/en/function.mysql-fetch-assoc.phpを参照してください。

以下の各行にコメントを追加しています

$sql = "SELECT id as userid, fullname, userstatus
        FROM   sometable
        WHERE  userstatus = 1"; // This is query

$result = mysql_query($sql); // This is how to execute query

if (!$result) { //if the query is not successfully executed
    echo "Could not successfully run query ($sql) from DB: " . mysql_error();
    exit;
}

if (mysql_num_rows($result) == 0) { // if the query is successfully executed, check how many rows it returned
    echo "No rows found, nothing to print so am exiting";
    exit;
} 

while ($row = mysql_fetch_assoc($result)) { //fetch the data from table as rows
    echo $row["userid"]; //echoing each column
    echo $row["fullname"];
    echo $row["userstatus"];
}

それが役に立てば幸い

于 2013-02-18T18:47:26.857 に答える
-1
<?php
$query = "SELECT password_field_name FROM UsersTableName WHERE username_field_name =".$_POST['username'];
$result = mysql_query($query);
$row = mysql_fetch_array($result);
echo $row['password_field_name'];
?>
于 2013-02-18T18:37:50.490 に答える
-1
$username = $_POST['username'];                                       
$login_query = "SELECT password FROM users_info WHERE users_info.username ='$username'";        
$password = mysql_result($result,0,'password');       
于 2013-02-18T18:39:06.473 に答える