2010-12-19 7 views
-2

.php 파일의 데이터를 mysql에 삽입하는 데 문제가 있습니다. 문제가 무엇인지 모릅니다. 두 개의 주요 .php 파일이 있습니다. 첫 번째는 홈페이지 :등록 페이지 (php)에서 mysql에 데이터를 삽입 할 수 없습니다.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"  "http://www.w3.org/TR/html4/frameset.dtd"> 
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" id="jmtoday" class=" no_js"> 
    <html> 
    <head> 
    <link href='icon.jpg' rel='icon' type='image/jpg'/> 
    <meta http-equiv="Content-type" content="text/html; charset=utf-8" /> 
    <meta http-equiv="Content-language" content="en" /> 
    <LINK REL=StyleSheet HREF="Mainstyles.css" TYPE="text/css"></link> 
    <Title>Welcome to JM Today</title> 
    </head> 
    <body> 
    <div class="container"> 
    <div class="header"><a class="logo" HREF="Homepage.html"><img src="Logo.png" alt="[JM Today]" ></a></div> 
    <div class="navbar"> 
    <ul class="navbar"><li class="navbar"><a class="navbar" HREF="Homepage.html">Homepage</a> </li> 
    <li class="navbar"><a class="navbar" HREF="Classes.html">Classes</a></li> 
    <li class="navbar"><a class="navbar" HREF="Calendar.html">Calendar</a></li> 
    <li class="navbar"><a href="Tutoring.html" class="navbar">Tutoring</a></li> 
    <li class="navbar"><a href="News.html" class="navbar" >News</a></li> 
    <li class="navbar"><a href="Aboutus.html" class="navbar">About Us</a></li></div> 
    <div class="left"></div> 
    <div class="content"><h2 class="homepage">For Students. By Students.</h2><p>Welcome to  JM Today, where you could find anything about your school, your classmates, and everything else. Online.<br/><br/><br/><br/><br/><br/></p></div> 
<div class="signup"><h2 class="homepage">Sign Up Now</h2><h3 class="homepage">It's free, as you expected.</h3> 
    <form name="registration_form" method="post" action="register.php" onsubmit="return Validate();"><input type=hidden name=todo value=post> 
    <table> 
<tr><td class="label">First Name:</td><td><input type="text" name="fname"></td></tr> 
<tr><td class="label">Last Name:</td><td><input type="text" name="lname"></td></tr> 
<tr><td class="label">E-Mail Address:</td><td><input type="text" name="email"></td> </tr> 
<tr><td class="label">Username:</td><td><input type="text" name="username"></td></tr> 
<tr><td class="label">Password:</td><td><input type="password" name="password"></td></tr> 
<tr><td class="label">Password Confirmation:</td><td><input type="password" name="password_confirmation"></td></tr> 
<tr><td class="label"><input type="submit" value="Register"></td></tr> 
</form> 
</table> 
<script language = "Javascript"> 

    function Validate() 
    { 
     if (document.registration_form.fname.value == '') 
     { 
      alert('Please fill in your first name!'); 
      return false; 
     } 
     if (document.registration_form.lname.value == '') 
     { 
      alert('Please fill in your last name!'); 
      return false; 
     } 
     if (document.registration_form.email.value == '') 
     { 
      alert('Please fill in your email address!'); 
      return false; 
     } 
     if (document.registration_form.username.value == '') 
     { 
      alert('Please fill in your desired username!'); 
      return false; 
     } 
     if (document.registration_form.password.value == '') 
     { 
      alert('Please fill in your desired password!'); 
      return false; 
     } 
     if (document.registration_form.password_confirmation.value == '') 
     { 
      alert('Please fill in your password again for confirmation!'); 
      return false; 
     } 
     if (document.registration_form.password.value != 
     document.registration_form.password_confirmation.value) 
     { 
      alert("The two passwords are not identical! "+ 
      "Please enter the same password again for confirmation"); 
      return false; 
     } 

     return true; 
    } 
    </script> 

    </div> 
    </div> 

    <div class="footer"><p class="copyright">JMToday &copy; 2010</p><p class="right">A Samir Ghobril Production</p></div> 
    </body> 

그리고 당신은 내가 그것을 대단히 감사하겠습니다 좀 도와주세요 수 있다면 두 번째는 register.php

!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd"> 
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" id="jmtoday" class=" no_js"> 
    <html> 
    <head> 
    <link href='icon.jpg' rel='icon' type='image/jpg'/> 
    <meta http-equiv="Content-type" content="text/html; charset=utf-8" /> 
    <meta http-equiv="Content-language" content="en" /> 
    <LINK REL=StyleSheet HREF="Mainstyles.css" TYPE="text/css"></link> 
    <Title>Sign up to JM Today</title> 
    </head> 
    <body> 
    <?php 
    $dbservertype='mysql'; 
    $servername='localhost'; 
    $dbusername='root'; 
    $dbpassword='****'; 
    $dbname='jmtdy'; 
    connecttodb($servername,$dbname,$dbusername,$dbpassword); 
    function connecttodb($servername,$dbname,$dbuser,$dbpassword) 
    { 
    global $link; 
    $link=mysql_connect ("$servername","$dbuser","$dbpassword"); 
    if(!$link){die("Could not connect to MySQL");} 
    mysql_select_db("$dbname",$link) or die ("could not open db".mysql_error()); 
    } 
    ?> 

    <?php 

    $username=$_POST['username']; 
    $password=$_POST['password']; 
    $password2=$_POST['password_confirmation']; 
    $todo=$_POST['todo']; 
    $email=$_POST['email']; 
    $fname=$_POST['fname']; 
    $lname=$_POST['lname']; 



    if(isset($todo) and $todo=="post"){ 

    $status = "OK"; 
    $msg=""; 


if(!isset($username) OR strlen($userid) <3){ 
$msg=$msg."Username should be equal to or more than 3 characters long<BR/>"; 
$status= "NOTOK";}  

    if(mysql_num_rows(mysql_query("SELECT username FROM users WHERE username = '$username'"))){ 
    $msg=$msg."Username already exists. Please try another one<BR/>"; 
    $status= "NOTOK";}  


    if (strlen($password) < 3){ 
    $msg=$msg."Password must be more than 3 charactors long<BR/>"; 
    $status= "NOTOK";}  

    if ($password <> $password2){ 
    $msg=$msg."Passwords are not identical.<BR/>"; 
    $status= "NOTOK";}  


    if($status<>"OK"){ 
    echo "$msg<br/><input type='button' value='Retry' onClick='history.go(-1)'>"; 
    }else{ 
    if(mysql_query("insert into users(username,password,email,fname,lname)  values('$username','$password','$email','$fname','$lname')")){ 
    echo "Welcome, You have successfully signed up";} 
    else{ echo "Database Problem, please contact Site admin"; 

    } 

    } 
    } 
    ?> 
    </body> 
    </html> 

입니다. [편집] 좋아, 코드를 수정하고이 오류 메시지가 나타납니다. 사용자 'www-data'@ 'localhost'에 대한 액세스가 거부되었습니다 (비밀번호 사용 : 아니요). 이게 도움이 되나요?

+0

어떻게됩니까? 작동하지 않는 것은 무엇입니까? –

+1

당신은 정말로 ** root **를 로그인으로 사용하지 않으며 입력을 철회하지 마십시오. –

+0

오류를 받으셨습니까? 뭐가 나왔어? mysql_query() 또는 die (mysql_error())를 실행하여 발생하는 모든 mysql 에러를 출력한다. – Breezer

답변

0

쿼리에 삽입하는 데이터를 제대로 이스케이프 처리하지 않았기 때문에 쿼리 중 하나가 죽어 가고있는 것 같습니다.

$username = "Miles O'Brien" 
$query = "SELECT username FROM users WHERE username = '$username'"; 

$ 쿼리는 다음이된다 :

SELECT username FROM users WHERE username = 'Miles O'Brien' 
                ^^^^^^-- "bad data" 

'Brien의'부분은 당신이 사용자 이름 필드에 비교하는 문자열 값의 외부 끝 사람이 같은 이름을 채우고 때 발생하는 고려 구문 분석 오류가 발생합니다. 즉, 쿼리 하나 하나가 SQL 인젝션 해킹이 발생하기를 기다리고 있습니다. querys 문자열로 때우는에 대한 데이터 "안전"하게

$username = mysql_real_escape_string($_POST['username']); 

: 완전한 최소한의에서

, 당신은 같은 것을 할 필요가있다.

+0

좋아, 네가 물었던 것이었지만 여전히 효과가 없었다. –

+0

오류를 확인 했습니까? 'mysql_query()'는 부 풀리면 FALSE를 반환합니다. '$ stmt = mysql_query (...) or die (mysql_error())'는 모든 질의 호출마다 있어야한다. –

+0

모든 쿼리 호출 후에 dir (mysql_error())를 추가했습니다. 그리고 아직도 아무것도. 파일을 저장하고 페이지를 새로 고친 다음 다시 가입을 시도합니다. 나는 아직도 빈 페이지를 얻는다. 나는이 모든 웹 디자인에 익숙해서 뭔가를 놓칠지도 모른다. 도와주세요. –

2

응답을 올리면 도움이되었을 수 있습니다. 나는 6 개 문자를 사용하지만 내 테스트에

나는이

Username should be equal to or more than 3 characters long 

을 얻었다. 코드를 보면 분명합니다.

$username=$_POST['username']; 

[...] 

if(!isset($username) OR strlen($userid) <3){ 
    $msg=$msg."Username should be equal to or more than 3 characters long<BR/>"; 
    $status= "NOTOK"; 
}  

$ username 대신 잘못된 변수 $ userid를 사용했을뿐입니다. 그것을 정정하고 스크립트가 작동해야합니다.

하지만 그렇게하기 전에, 코드 문제 더 거기에 몇 가지 :

  1. SQL에서 직접 PHP 변수를 사용하지 마십시오! mysql_real_escape_string으로 캡슐화하거나 mysqli_prepare()과 같은 것을 사용하거나 스크립트가 SQL 인젝션 공격에 대해 열려 있고 " '"와 같은 문자로 많은 문제가 발생합니다
  2. 스크립트에 데이터베이스 사용자로 root를 사용하지 마십시오. SQL 처리에 구멍이있는 경우 효과를 최소화 할 수있는 권한을 적게 만듭니다.

  3. 코드를 정리하십시오! 들여 쓰기는 이유가 있고 당신 (그리고 다른 사람들) 코드를 읽는데 도움이됩니다. 그것을 게시하고 도움을 요청하기 전에 적어도 그것을하십시오. 약간의 운이 있으면 혼자서 오류를 발견했을 것입니다.

  4. HTML을 확인하십시오. 거기에 무효가 많이 있습니다 ...

+0

나는 그것을 시도했지만 여전히 작동하지 않았다. 아직 빈 페이지가 나타납니다. –

+0

빈 페이지가 있습니까? 마우스 오른쪽 버튼을 클릭> 소스보기 – marekventur

+0

register.php 맨 위 – marekventur

-1

좋아요, 나는 registration.php 코드를 편집했습니다. 그것을보십시오. 오류가 발생했습니다 : 사용자 'www-data'@ 'localhost'에 대한 액세스가 거부되었습니다 (비밀번호 사용 : NO). 나는 그것이 내 SQL 사용자 이름/암호 또는 일종의 뭔가를 인식하지 못한다는 것을 의미합니다 같아요. 어쨌든, 여기 내 PHP 파일입니다 :

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" id="jmtoday" class=" no_js"> 
<head> 
<link href='icon.jpg' rel='icon' type='image/jpg'/> 
<meta http-equiv="Content-type" content="text/html; charset=utf-8" /> 
<meta http-equiv="Content-language" content="en" /> 
<LINK REL=StyleSheet HREF="Mainstyles.css" TYPE="text/css"></link> 
<Title>Sign up to JM Today</title> 
</head> 
<body> 
<?php 
    $dbservertype='mysql'; 
    $servername='localhost'; 
    $dbusername='samaniac'; 
    $dbpassword='*****'; 
    $dbname='jmtdy'; 
    function connecttodb($servername,$dbname,$dbuser,$dbpassword) 
    { 
     global $link; 
     $link=mysql_connect("$servername","$dbuser","$dbpassword"); 
     if(!$link){ 
      die("Could not connect to MySQL"); 
       } 
    connecttodb($servername,$dbname,$dbusername,$dbpassword);   
mysql_select_db("$dbusername",$link) or die ("could not open db".mysql_error()); 
} 
?> 


<?php 

    $username=mysql_real_escape_string($_POST['username']); 
    $password=mysql_real_escape_string($_POST['password']); 
    $password2=mysql_real_escape_string($_POST['password_confirmation']); 
    $todo=mysql_real_escape_string($_POST['todo']); 
    $email=mysql_real_escape_string($_POST['email']); 
    $fname=mysql_real_escape_string($_POST['fname']); 
    $lname=mysql_real_escape_string($_POST['lname']); 



if(isset($todo) and $todo=="post"){ 

    $status = "OK"; 
    $msg=""; 
    } 

if(!isset($username) OR strlen($username) <3){ 
    $msg=$msg."Username should be equal to or more than 3 characters long<BR/>"; 
    $status= "NOTOK"; 
    }     

if(mysql_num_rows(mysql_query("SELECT username FROM users WHERE username = '$username'")or die (mysql_error()))){ 
$msg=$msg."Username already exists. Please try another one<BR/>"; 
$status= "NOTOK";}     


if (strlen($password) < 3){ 
    $msg=$msg."Password must be more than 3 charactors long<BR/>"; 
    $status= "NOTOK"; 
    }     

if ($password <> $password2){ 
    $msg=$msg."Passwords are not identical.<BR/>"; 
    $status= "NOTOK"; 
    }     


if($status<>"OK"){ 
    echo "$msg<br/><input type='button' value='Retry' onClick='history.go(-1)'>"; 
} 
    else { 
if(mysql_query("insert into users(username,password,email,fname,lname) values('$username','$password','$email','$fname','$lname')")or die (mysql_error())){ 
    echo "Welcome, You have successfully signed up"; 
    } 
else { 
echo "Database Problem, please contact Site admin"; 
} 

} 
?> 
</body> 
</html> 
0

힌트는

Access denied for user 'www-data'@'localhost'

는 MySQL 데이터베이스에 대한 액세스처럼 보인다는 www가 사용자로 수행되고있는 라인에 아닌 사용자 samaniac

당신은 어딘가 페이지에

$link = mysql_connect('localhost', 'samaniac', 'your password here'); 
if (!$link) { 
    die('Could not connect: ' . mysql_error()); 
} 
echo 'Connected successfully'; 
mysql_close($link); 

를 다음 시도하고 당신이 무엇을 얻을 말해 줄 수 ...

관련 문제