2013-06-26 2 views
0

이 등록 양식은 저에게 만들어졌지만 제가하고 싶은 일을하지 않습니다.PHP 양식 - mysql에 이미 전자 메일 데이터가 포함되어 있는지 확인하십시오.

mysql 데이터베이스에 연결하여 양식에서 제공 한 정보를 저장하고 싶습니다. md5에 $password을 해시하고 "gebruikers"테이블에 저장하려고합니다. 제발 "젠장, 당신이 무엇을하고 있는지 전혀 모른다"라고 대답하지 마십시오. 또는 그와 비슷한 것입니다. 나는 예제를 찾고 튜토리얼을 따라 PHP를 배우고있다. 위의 몇 줄을 찔렀 기 때문에 mysql 삽입 코드가 제대로 채워지지 않았다는 점에 유의하십시오.

내 질문은 : mysql 테이블에 이미 $email이 포함되어 있는지 확인하고 싶습니다. mysql 테이블에 이미있는 경우 PHP 페이지에 다른 위치에 놓을 수있는 오류 메시지를 표시하려고합니다. 주어진 이메일 주소가 유일하다면, $password이 md5로 해시되고 mysql 데이터베이스에 저장해야하는 것보다 다른 양식 항목과 같습니다.

어떻게하면됩니까?

     <?php 
          // Fetching all the form details 
          $email = $_POST["email"]; 
          $password = $_POST["password"]; 
          $voornaam = $_POST["voornaam"]; 
          $tussenvoegsel = $_POST["tussenvoegsel"]; 
          $achternaam = $_POST["achternaam"]; 
          $dag = $_POST["dag"]; 
          $maand = $_POST["maand"]; 
          $jaar = $_POST["voornaam"]; 
          $straat = $_POST["straat"]; 
          $postcode = $_POST["postcode"]; 
          $woonplaats = $_POST["woonplaats"]; 
          $cniveau = $_POST["cniveau"]; 
          $oniveau = $_POST["oniveau"]; 
          $voornaam = $_POST["voornaam"]; 
          $aboutme = $_POST["aboutme"]; 

          //Here's where I don't know how to continue 
          $check = mysql_query("SELECT * FROM `gebruikers` WHERE `email` = '$email'"); 
          if($check === FALSE) { 
          //there is a user already registered 
          echo("$email is al in gebruik. <a href='login.php'>Inloggen</a>?"); 
          } else { 
          //There isn't a username 
          //mysql_query("INSERT INTO `user` (`id` ,`username` ,`password`) VALUES (NULL , '{$_POST['email']}', MD5('{$_POST['password']}'))"); 
          echo("You have been registered!"); 
          } 

P.S는 : 나는 나의 문법 실수/오타를 무시하세요, 영어를 모국어로하지 않다.

+0

알아 두십시오. 귀하의 코드는 SQ1 주사에 취약합니다. PDO 또는 mysqli_ *를 사용하십시오. – christopher

+0

빠른 응답을 보내 주셔서 감사합니다. 그렇다면 SQL 삽입을 우회하기 위해 mysqli로 mysql을 변경해야합니까? –

답변

2

우선, 당신은 중대한 실수를 저질 렀습니다. SQL 주입 보안 구멍이 있습니다. 다음을 읽어주십시오 : http://php.net/manual/en/security.database.sql-injection.php 둘째, mysql이 더 이상 사용되지 않으므로 mysql 대신 mysqli를 사용해야합니다.

오류는 SQL이 쿼리가 유효하지 않은 경우에만 false를 반환하고 결과가없는 경우가 아닙니다. 따라서 결과가 있는지를 확인하는 올바른 방법은 사용하는 것입니다. http://php.net/manual/en/mysqli-result.num-rows.php

+0

알았어, 나는 이미 몇 시간 전에 해본 적이있다. 경고와 같은 것을 표시했다. mysql_num_rows()는 매개 변수 1이 리소스, boolean이 주어진 것으로 기대한다. –

+0

그런 다음 SQL 쿼리가 올바르지 않으면 mysql_error를 시도한다.() – Lorenz

0
$result = mysql_query("SELECT * FROM `gebruikers` WHERE `email` = '$email' LIMIT 1"); 

if(mysql_fetch_array($result) !== false) 
{ 
    ... 
} else { 
    .... 
} 

또한 SQL 주입 방지에 대해 읽어야합니다.

+0

오. DB 연결을 어디에도 설정하지 않았기 때문일 수 있습니다. http://php.net/manual/en/function.mysql-connect.php –

+0

아니, 그랬어. 나는 여기에 내 세부 사항을 게시하지 않았다. –

+0

SQL 문에서 오류가 발생했습니다. –

0

아마 mysql_connect 문을 설정하는 것을 잊었을 것입니다.

그러나 Aragon0이 말한 것처럼 PHP의 최신 버전에서는 mysql이 더 이상 사용되지 않으므로 mysqli_ 기능을 사용하는 것이 좋습니다.

게다가, mysqli 문은 예를 들어, 당신은 대신 분리 된 문 (mysql_connectmysql_select_db 모두)를 사용하는, 호스트에 연결하여 동시에 데이터베이스를 선택하는 하나의 문 (mysqli_connect)를 사용, MySQL의 것보다 간단합니다.

아, 사용하기 위해 추가 서비스 패키지가 필요하지 않습니다. :)

+0

게다가 모든 mysql_ 함수는 mysqli_에서 같은 방법으로 이름이 붙여 지는데, 둘 사이의 차이는 매개 변수가 삽입되는 방법입니다. 병렬 버전에서 제거되는 프로그램이 거의 없습니다. PHP api에서 살펴보십시오. http://www.php.net/manual/en/mysqli.query.php –

관련 문제