2014-09-27 2 views
0

PHP와 MySQL 환경에서 처음으로 작업 중입니다 ... 그리고 내 연결에 또 다른 문제가 있습니다. 둘 사이에 연결을 만들 수 없습니다. 로그인 페이지의 코드를 작성하려고합니다. 데이터베이스 이름과 그 모든 것들이 정확합니다. 다음은 내 코드입니다 ..연결 상태가 좋음 PHP와 MySQL

<?php 

    $con = NULL; 
    if (empty($_POST['username']) || empty($_POST['password'])) { 
     $error="Username or Password is invalid"; 
    } 
    else { 
    global $con; 
    $con=mysqli_connect("localhost","root","","student"); 


    if (mysqli_connect_errno()) { 
     echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
    } 
    else { 

     $sql = "select * from login where password='" . $_POST['password'] . "' AND username='" . $_POST['username'] . "'"; 

     echo $sql; 

     $query=mysqli_query($sql,$con); 


     $rows=mysqli_num_rows($query); 


     echo $rows; 

     if ($rows==1) { 
      $_SESSION['login_user'] = $_POST['username']; 
      //Initializing Session 
      header("location: /pages/profile.php"); //Redirecting to other page 
     } else { 
      $error = "Username or Password is invalid"; 
     } 
    } 
    //SQL query to fetch information of registered users and finds user match. 
//Closing Connection 
mysql_close($con); 
} 

?> 

오류 :

Warning: mysqli_query() expects parameter 1 to be mysqli, string given in C:\xampp\htdocs\pages\login.php on line 21 

Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, null given in C:\xampp\htdocs\pages\login.php on line 24 

Warning: mysql_close() expects parameter 1 to be resource, object given in C:\xampp\htdocs\pages\login.php on line 39 
+1

이 코드를 해킹하는 데 5 초가 걸립니다. 준비된 진술을 배워야합니다. 그것도 규칙적인 것처럼 쉽고 해킹하기가 더 어렵습니다! – alexander7567

+1

1.이 스크립트에서'$ con'을'global'으로 선언 할 필요가 없습니다. 2.'$ _POST [ "password"]'를''또는 1 = 1;''로 설정하고 무슨 일이 일어나는 지보십시오. – Rob

답변

3

첫 번째 경고가 당신에게 알려주는 정확히 무엇을 잘못 :

경고 :) (mysqli_query하기에 매개 변수 1을 기대한다 C : \ xampp \ htdocs \ pages \ login.php 21 행에있는 mysqli가됩니다.

여기에 당신은 당신의 변수를 정의 :

$con=mysqli_connect("localhost","root","","student"); 
// ... 
$sql = "select * from login where password='" . $_POST['password'] . "' AND username='" . $_POST['username'] . "'"; 

그래서 $conmysqli 객체이며 $sql은 문자열입니다.

$query=mysqli_query($sql,$con); 

하는 당신은 그것에게 문자열 다음 연결을 전달하는 : 그럼 당신은 함수를 호출합니다. 오류는 첫 번째 개체가 연결이어야합니다. 이처럼 :

$query=mysqli_query($con,$sql); 
또한

중요 ... 난 당신이 시작 단계 단지 개념을 배우고 알고 있습니다. 그러나 실제 시스템에서 사용되거나 사용자의 데이터를 책임질 코드를 작성하기 전에이 코드를 이해하고으로 확인하십시오. 귀하의 코드는 입니다. SQL 삽입 공격에 대한 열림은입니다. 기본적으로 모든 사용자는 데이터베이스에 액세스 할 수 있으며 서버에 액세스 할 수 있습니다. reading this으로 시작하십시오. 당신이 그것을 인식하지 않을 수 있습니다 경우에도이 코드가 현재 무엇을

, 그것은 코드 등의 사용자 입력을 실행합니다. 분명히 어떤 사용자라도 서버에서 원하는 임의의 코드를 실행할 수 없도록하고 싶지만 현재 사용자가 허용하는 코드입니다. 다시 한 번, 당신은 새로운 사람이므로 이해할 수있는 실수입니다. 나는 너를 비난하려고하지 않고 너에게 이것을 중요하게 생각하게 만들 뿐이다. 특히 웹 사이트가 사용자 데이터를 포함하기 시작할 때

+0

고맙습니다. 도움을 청합니다. 나는이 모든 것을 마음 속에 간직 할 것입니다. :) – MukulAgr

+0

하지만 다른 2 가지 오류는 ..? – MukulAgr

+0

@MukulAgr : 분명히 그들은 첫 번째 오류의 결과로 따라옵니다. 첫 번째 오류가 유효한 결과 집합을 가져 오지 않으므로 결과 집합을 필요로하는 이후 코드 행에는 하나도 지정되지 않습니다. – David