2014-02-21 6 views
0

사용자가 양식에 입력 한 정보를 DB에 게시하는 스 니펫 (snippet) 코드가 있습니다. DB에 데이터를 제출하는 PHP의 마지막 행 뒤에 나는 다음과 같은 내용이 있습니다.양식 제출이 작동하지 않아 PHP 헤더가 리디렉션됩니다.

header("location:http://www.site.com/page.htm"); 

이것은 아무 것도하지 않습니다. 그것은 여전히 ​​모든 사용자 정보를 DB에 게시하지만 페이지가 삭제되고 그 내용이 그대로 유지됩니다. 리디렉션 없음. 여기

전체 조각입니다 :

<?php 
if(isset($_POST['register'])){ 
    $username = ($_POST['username']); 
    $password = ($_POST['password']); 
    $email = ($_POST['email']); 
    $email2 = ($_POST['email2']); 
    $password2 = ($_POST['password2']); 
    $commname = ($_POST['commname']); 
    $outpostname = ($_POST['outpost']); 
    $special = ($_POST['specialty']); 

    if($username == "" || $password == "" || $email == "" || $password2 == "" || $email2 == "" || $commname == "" || $outpostname == "" || $special == "no"){ 
     echo "Please supply all required fields!"; 
    }elseif(strlen($username) > 20){ 
     echo "Username must be less than 20 characters!"; 
    }elseif(strlen($email) > 100){ 
     echo "E-mail must be less than 100 characters!"; 
    }elseif(strlen($email2) > 100){ 
     echo "E-mail verify must be less than 100 characters!"; 
    }elseif(strlen($commname) > 20){ 
     echo "Your Commander's name must be less than 20 characters!"; 
    }elseif(strlen($outpostname) > 20){ 
     echo "Your Outpost's name must be less than 20 characters!"; 
    }else{ 
     $register1 = mysqli_query($myConnection,"SELECT `id` FROM `user` WHERE `username`='$username'") or die(mysqli_error($myConnection)); 
     $register2 = mysqli_query($myConnection,"SELECT `id` FROM `user` WHERE `email`='$email'") or die(mysqli_error($myConnection)); 
     if(mysqli_num_rows($register1) > 0){ 
      echo "That username is already in use!"; 
     }elseif(mysqli_num_rows($register2) > 0){ 
      echo "That e-mail address is already in use!"; 
     }else{ 
      $spec = ($_POST['specialty']); 
      $comnam = ($_POST['commname']); 
      $postnam = ($_POST['outpost']);              
      $rand_col = rand(1,5); /*Number of Colonies that exist in the game*/ 
      $ins1 = mysqli_query($myConnection,"INSERT INTO `stats` (`username`,`credits`,`food`,`land`,`energy`,`turns`,`turns_max`,`gas`,`ore`,`population`,`buildeff`,`offpts`,`defpts`,`score`,`specialty`) VALUES ('$username',2000,2000,100,2000,30,30,2000,2000,500,100,0,0,0,'$spec')") or die(mysqli_error($myConnection)); 
      $ins2 = mysqli_query($myConnection,"INSERT INTO `unit` (`username`,`trainee`,`juggernaut`,`infantry`,`marauder`,`terminator`,`reconsq`,`prisoner`,`destroyer`,`colossus`) VALUES ('$username',100,0,50,0,0,0,0,0,0)") or die(mysqli_error($myConnection)); 
      $ins3 = mysqli_query($myConnection,"INSERT INTO `user` (`colonynum`,`username`,`password`,`email`,`specialty`,`commname`,`outpostname`) VALUES ('$rand_col','$username','".md5($password)."','$email','$spec','$comnam','$postnam')") or die(mysqli_error($myConnection)); 
      $ins4 = mysqli_query($myConnection,"INSERT INTO `structure` (`username`,`agridome`,`spaceport`,`barrack`,`researchfac`,`laserbat`,`factory`,`infirmary`,`trainingfac`) VALUES ('$username',1,0,5,0,0,0,1,1)") or die(mysqli_error($myConnection)); 
      header("location:http://www.site.com/page.php"); 
     } 
    } 
} 
?> 

그래 내가 어떤 SQL 주입 보호를 사용해야하지만, 단지 작업을 아직 것은 .. 즉 나중에 올 것이다 것을 위선적 인 말투, 알고)

+0

는 HTTP 헤더 대소 문자를 구분합니다 : – David

+0

대문자를 입력했는데 위치와 URL 사이에 공백이 없어야했습니다. –

+0

리디렉션 전에 아무것도 출력되지 않는 것을 확인 했습니까? – JBES

답변

1

변경

header("location: http://www.site.com/page.php"); 

header("location:http://www.site.com/page.php"); 

또한, u가 헤더 명령 앞에 한 문자가 출력되는 경우 (예 : HTTP 요청 본문) 실패합니다. PHP 오류보고를 켜서 이런 경우인지 확인하십시오.

출력 문자는 <?php과 페이지 시작 부분 사이의 흰색 문자 일 수도 있습니다.

등 : ====== 페이지는이 라인 ======= 아래 시작

<?php 

헤더가없는 경우를 주목 <?php

+2

이것은 문제가되지 않습니다. – Daedalus

+0

OP가 이미이 작업을 수행했다고 말했습니다. 의견을보세요. –

+0

그는 공백없이 시도했습니다 ... –

1

전에 흰색 문자가 있습니다 그 이유는 헤더가 보내지기 전에 스크립트가 결과를 생성했기 때문입니다 (예 : 확인되지 않은 GET 매개 변수 때문에 오류 메시지). 정보가 포함 된 웹 서버의 오류 로그를 확인하십시오. 정확히 실패하는 경우.

+0

나는 downvote를 여기에서 얻지 않는다; 이것은 다른 대답과 마찬가지로 정답입니다. 헤더 호출 전에 출력을 보낼 수 없습니다. – Daedalus

+0

그림보기, 누군가이 질문을 좋아하지 않습니다 ... –

1

다른 유형의 출력 (오류 메시지, HTML, 자바 스크립트 등)을 보내기 전에 모든 헤더를 브라우저에 보내야합니다.

header()을 호출하기 전에 스크립트에서 많은 일이 발생하며 그 중 하나 이상의 코드 행이 출력을 생성합니다. 그런 일이 발생하면 더 이상 헤더 정보를 보낼 수 없습니다.

그것을 출력을 생성하는 결정 및 제거 문제를 해결, 또는 echo 문, mysqli* 문, 또는 출력을 생성 할 수있는 다른 라인 전에 스크립트의 상단에 header() 전화 가까이 이동합니다.

$url = '/page.php'; 
echo '<META HTTP-EQUIV=Refresh CONTENT="0; URL='.$url.'">'; 
+0

양식이 제출되면 리디렉션하는 자바 스크립트 작업이 필요합니까? 모든 요구 사항이 양식에서 충족 된 경우에만 실행할 수 있습니다. –

+0

이것이 가능한 접근법 중 하나입니다. 다른 방법은 모든 출력을 버퍼링하고 조건이 충족되지 않고 리디렉션하지 않을 경우에만 브라우저로 보냅니다. 자세한 내용은 [출력 제어 기능] (http://www.php.net/manual/en/ref.outcontrol.php) 설명서를 참조하십시오. –

+0

출력을 버퍼링하는 것이 나를위한 옵션이 아닌 것 같습니다. 그 모든 정보가 필요합니다. 임은 JS 접근법에 가야하고 모든 조건이 충족되고 사용자 데이터를 데이터베이스에 제출 한 후에로드하는 방법을 알아야 할 것입니다. –

0

은 사용 일있어? 아니면 적어도 특정 브라우저에서? 어떤 일은 그렇게 까다롭게 느껴질 수 있습니다. 시도해보십시오 :`header ("Location : http://www.site.com/page.htm");`
관련 문제