2011-03-21 2 views
1

'$ class'변수에! isset을 사용하여 값이 있는지 여부를 확인한 다음 mysql_query 함수를 기반으로합니다. 그러나 그것은 가지 않습니다. 뭐가 잘못 보이니?if mysql 문의 문의 문

<?php session_start(); 
    $heyyou = $_SESSION['usern']; 
    $points = $_SESSION['points']; 
    $school = $_SESSION['school']; 
    $class = $_POST['class']; 
    $prof = $_POST['prof']; 
    $date = $_POST['dater']; 
    $fname = $_FILES['fileToUpload']["name"]; 

    ?> 




      <div id='contenttext' class='contenttext'> 
     <?php 

@mysql_select_db($database) or die("Unable to select database"); 
$query = "INSERT INTO uploadedfiles (usename, filename, date, teacher, class) VALUES ('$heyyou', '$fname', '$date', '$prof', '$class')"; 

if (!isset($class)){ 
echo 'You need to pick a class for the content'; } 
else{ 
mysql_query($query); } 
    mysql_close(); 

    ?> 


<?php 
if (($_FILES["fileToUpload"]["type"] == "image/gif" || $_FILES["fileToUpload"]["type"] == "image/jpeg" || $_FILES["fileToUpload"]["type"] == "image/png") && $_FILES["fileToUpload"]["size"] < 10000000) 
    { 
    move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], 
    "upload/" . $_FILES["fileToUpload"]["name"]); 
    echo "Your file has successfully been uploaded, and is awaiting moderator approval for points." . "<html><br><a href='uploadfile.php'>Upload more.</a>"; 
    } 
else 
    { 
    echo "Files must be either JPEG, GIF, or PNG and less than 10,000 kb"; 
    } 
?> 

     </div> 
</body> 
</html> 
+0

무엇이 문제입니까? probs 귀하의 DB에 세부 사항을 게시하지 않는 것이 가장 좋습니다;) –

답변

0

아마도 $ 클래스가 설정 중이기 때문일 수 있습니다. if (empty($class)){

+0

나는 그것을 잘못 알고 일종의 참조하십시오. 새 기능을 사용해 주셔서 감사합니다 – Shawn

0

나는 어쩌면 잘못된 시도하지만 클래스는 예약어가 다른 이름과 $ 클래스를 시도입니다! = ""

http://www.php.net/manual/en/reserved.keywords.php

을 BTW DB를 conect 정보를 제거 우리가 나에게 좋은 그러나하십시오 사람들의 일부 이것을 읽는 것은 그렇지 않을 수도 있습니다. ;-)

+1

예약어로 상수 나 함수를 만들 수는 없지만 키워드와 같은 이름의 변수를 만들 수 있습니다. – Charles

+0

설명해 주셔서 감사합니다. – webLacky3rdClass

0

먼저 모든 변수를 초기화 한 다음 POST 값을 지정하십시오. 예 : 코드와

$class=''; 
$class = $_POST['class']; 
if (!isset($class)){ 
    echo 'You need to pick a class for the content'; 
} 
+0

그건 쓸모없는 단계입니다. 변수는 처음 할당 될 때 만들어집니다. 당신이하는 일은 빈 문자열을 쓰레기로 만드는 것뿐입니다. –

1

두 가지 주요 보안 문제 : 당신은 맹목적으로 사용자를 신뢰하고

  • 가되지 않습니다 :

    1. 당신은 SQL 인젝션 공격 (http://bobby-tables.com/ 참조) 활짝 열려있어 파일 업로드에 악성입니다. ['type']['name'] 필드는 완전히 사용자가 제어 할 수 있으며 업로드를 해킹하여 PHP 스크립트를 업로드하면서 gif라고 말하는 것은 쉽지 않습니다. 그런 다음 사용자 제공 파일 이름 (경로 정보를 포함 할 수 있음)을 사용하여이를 서버에 직접 덤프하십시오. 따라서 악의적 인 사용자가 서버에있는 모든 파일을 원하는 위치에 업로드 할 수 있습니다.

    마이너 포인트 # 3 : 데이터베이스 쿼리가 성공하면

    당신은 확인하지 않습니다. 쿼리가 성공했다고 가정하지 마십시오. SQL 문이 완벽하게 유효하더라도 어쨌든 실패 할 수있는 다른 이유가 너무 많습니다. 최소한 ... = mysql_query(...) or die(mysql_error())이라는 쿼리 호출을 최소한의 오류 처리기로 확인하십시오.

  • 0

    class는 예약어이기 때문에 $ class를 사용할 수 없습니다. 이 너무 작업 할 수 있습니다 때 그들은 그 안에 큰 따옴표 변수를 이해할 수

    $query = "INSERT INTO uploadedfiles (usename, filename, date, teacher, class) VALUES ($heyyou, $fname, $date, $prof, $class)"; 
    

    입니다. 또 다른 생각으로는 date가 MySQL에 의해 예약 된 키워드입니다. 무엇이 $ _POST [ 'class']인지 궁금합니다. 콘텐츠는 다음과 같습니다 : echo $ _POST [ 'class']; 아마도 html 요소에 이름을 지정하는 것을 잊었을 것입니다.

    0

    변수 $ class는 $ class = $ _POST [ 'class'] 때문에 항상 설정됩니다. 그래서 isset ($ class)는 클래스 게시 값에 관계없이 항상 true입니다. 아래 진술의 차이점을 확인하십시오.

    $class = ''; 
    if (isset($class)) { 
        echo 'a'; 
    } 
    
    if($class) { 
        echo 'b'; 
    } 
    
    the output is: a 
    
    
    //replace this: 
    if (!isset($class)){ 
        echo 'You need to pick a class for the content'; } 
    else{ 
        mysql_query($query); 
    } 
    
    //with this: 
    if (isset($class) && $class){ 
        mysql_query($query); 
    else{ 
        echo 'You need to pick a class for the content'; } 
    }