0
레코드가 존재하는지 확인하고 싶으면 A 페이지로 이동하고 그렇지 않으면 B 페이지로 이동하십시오. 레코드가 있는지 여부와 관계없이 항상 페이지 A로 이동합니다. 귀하의 SELECT EXISTS(...)
중첩 된 IF 조건이 작동하지 않는 이유는 무엇입니까?
<?php
$ini = parse_ini_file("../phpconfig.ini");
$conn = mysqli_connect($ini['hostaddress'], $ini['username'], $ini['password'], $ini['databasename']);
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$options = ['cost' => 10,];
$number = mysqli_real_escape_string($conn, $_POST['number']);
$password = password_hash((mysqli_real_escape_string($conn, $_POST['password'])), PASSWORD_BCRYPT, $options);
$sql = "INSERT INTO usertemp (Employee_Number, Password)
VALUES ('$number', '$password')";
if (mysqli_query($conn, $sql)) {
$sql2 = "SELECT EXISTS(SELECT 1 FROM employee WHERE Number = '$number')";
$row2 = mysqli_query($conn, $sql2);
if (mysqli_num_rows($row2) > 0) {
//Has record in Employee table
header("location: display_createaccount_a.php");
} else {
//No record in Employee table
header("location: display_createaccount_b.php");
}
} else {
echo "Error: " . $sql . "<br>" . mysqli_error($conn);
}
mysqli_close($conn);
?>
password_hash() 함수의 salt 옵션은 개발자가 자체적으로 (일반적으로 안전하지 않은) 염을 생성하지 않도록하기 위해 더 이상 사용되지 않습니다. 이 함수 자체는 개발자가 소금을 제공하지 않을 때 암호 학적으로 안전한 소금을 생성합니다. 따라서 사용자 지정 소금 생성은 더 이상 필요하지 않습니다. PHP는, somepoint에서 그 버전으로 업그레이 드해야합니다 더 나은 가이드 라인을 따라 시작 –
*** [탈출하지 않도록하십시오] (http://stackoverflow.com/q/36628418/1011527) ** * 또는 해싱하기 전에 다른 클렌징 메커니즘을 사용하십시오. 이렇게하면 암호가 변경되어 불필요한 추가 코딩이 발생합니다. –
[Little Bobby] (http://bobby-tables.com/)에서 *** [귀하의 스크립트는 SQL 주입 공격의 위험에 있습니다.] (http://stackoverflow.com/questions/60174/how-can- i-prevent-sql-injection-in-php) *** [MySQLi] (http://php.net/manual)에 대한 [prepared] (http://en.wikipedia.org/wiki/Prepared_statement) 진술에 대해 배우십시오. /en/mysqli.quickstart.prepared-statements.php). 심지어 [이스케이프 문자열] (http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real-escape-string) 안전하지 않습니다! [그것을 믿지 않아?] (http://stackoverflow.com/q/38297105/1011527) –