2012-06-28 2 views
0

사용자가 이전 페이지의 양식에서 어떤 상자를 체크했는지에 대한 정보를받는 결과 페이지입니다. 이 정보는 사용자 이름의 선택에 따라 데이터베이스의 값과 정보를 가져옵니다. 나는 if/else if/else 문이 활성화되지 않은 상황에서 맨 아래에 문제가 발생했다. 내 논리 오류를 찾도록 도와 줄 수 있습니까?논리 오류를 찾을 수 없습니다. 테스트 할 조건이 참이 아닙니다.

그것은 결코 사실이다 라인

else if($iceli && !$icleiDB){ 

과 하단에 아래로 발생합니다. 해당 명령문이 true로 평가되면 새 행이 데이터베이스의 테이블에 삽입됩니다. 대신 $ iclei가 true이고 $ icleiDB가 false이면 (진술을 사실로 만들어야 함), $ iclei가 true이고 $ icleiDB가 true 인 경우에만 발생하는 것으로 간주되는 "iclei는 사실로 유지됩니다"라는 결과를 얻습니다 .

참고 : $ mySqlConnection-> doQuery() 또는 $ mySqlConnection-> doNonQuery()가 표시 될 때마다 데이터베이스 연결을 단순화하는 MySqlConnection.php라는 PHP 파일을 사용하고 있는데, 이는 데이터베이스에 대한 호출입니다. , 괄호 안에있는 것은 쿼리입니다.

<?php 

    require_once 'MySqlConnection.php'; 

    $server = 'localhost'; 
    $dataBase = 'ise_programs'; 
    $userName = 'root'; 
    $password = 'root'; 

    $mySqlConnection = new MySqlConnection($server, 
              $dataBase, 
              $userName, 
              $password); 


    $townName = $_POST["townName"]; 
    //$townName = addslashes($townName); //To pevent SQL Injection, but make sure magic quotes are off 

    $townidQuery = "SELECT townid 
        FROM tbltowns 
        WHERE townname = '$townName'"; 


    $townidArray = $mySqlConnection->doQuery($townidQuery); 
    $townid = $townidArray[0][0]; 

    //grab values the user selected in the form 
    $iclei = $_POST["ICLEI"]; 
    $ccef = $_POST["CCEF"]; 
    $ise = $_POST["ISE"]; 
    $ceef = $_POST["CEEF"]; 
    $epacc = $_POST["EPACC"]; 
    $k12ise = $_POST["K12ISE"]; 
    $kctc = $_POST["KCTC"]; 
    $mbbpm = $_POST["MBBPM"]; 
    $n2n = $_POST["N2N"]; 
    $sbpm = $_POST["SBPM"]; 


?> 

<html> 
    <body> 

    <p>HTML works.</p> 

    <p> 
    townName = <?php echo($townName) ?> 
    <br /> 
    townid = <?php echo($townid) ?> 
    </p> 

    <p>Values selected by the user: </p> 
    <ul> 
    <li>ICLEI = <?php echo($iclei) ?></li> 
    <li>CCEF = <?php echo($ccef) ?></li> 
    <li>ISE = <?php echo($ise) ?></li> 
    <li>CEEF = <?php echo($ceef) ?></li> 
    <li>EPACC = <?php echo($epacc) ?></li> 
    <li>K12ISE = <?php echo($k12ise) ?></li> 
    <li>KCTC = <?php echo($kctc) ?></li> 
    <li>MBBPM = <?php echo($mbbpm) ?></li> 
    <li>N2N = <?php echo($n2n) ?></li> 
    <li>SBPM = <?php echo($sbpm) ?></li> 
    </ul> 

    <p>Values from the database:</p> 


    <?php 

    $enabledProjectsListQuery = "SELECT projectid 
       FROM tblenabledprojects 
       WHERE townid = $townid"; 

    $enabledProjectsList = $mySqlConnection->doQuery($enabledProjectsListQuery); 

    //convert enabled projects list into an array of single values 
    $enabledProjects = array(); 
    for($i = 0; $i < count($enabledProjectsList); $i++){ 
     $enabledProjects[] = $enabledProjectsList[$i][0]; 
    } 

    //print the values in the enabledProjects array 
    echo('enabledProjects = '); 
    foreach($enabledProjects as $i){ 
     echo($i . ", "); 
    } 

    //declare variables outside if statements 
    $icleiDB = false; 
    $ccefDB = false; 
    $iseDB = false; 
    $ceefDB = false; 
    $epaccDB = false; 
    $k12iseDB = false; 
    $kctcDB = false; 
    $mbbpmDB = false; 
    $n2nDB = false; 
    $sbpmDB = false; 


    //determine whether values were enabled in the database (and print them) 
    echo("<p>"); 


     if(in_array(1, $enabledProjects)){ 
      echo "in first if 108 ".$icleiDB."<br>"; 
       echo('iclei is ENABLED. <br />'); 
       $icleiDB = true; 
      } 
      else{ 
       echo "in else 113 ".$icleiDB."<br>"; 
       echo('iclei is not enabled. <br />'); 
       $icleiDB = false; 
      } 
     if(in_array(2, $enabledProjects)){ 
       echo('ccef is ENABLED. <br />'); 
       $ccefDB = true; 
      } 
      else{ 
       echo('ccef is not enabled. <br />'); 
       $ccefDB = false; 
      } 
     if(in_array(3, $enabledProjects)){ 
       echo('ise is ENABLED. <br />'); 
       $iseDB = true; 
      } 
      else{ 
       echo('ise is not enabled. <br />'); 
       $iseDB = false; 
      } 
     if(in_array(4, $enabledProjects)){ 
       echo('ceef is ENABLED. <br />'); 
       $ceefDB = true; 
      } 
      else{ 
       echo('ceef is not enabled. <br />'); 
       $ceefDB = false; 
      } 
     if(in_array(5, $enabledProjects)){ 
       echo('epacc is ENABLED. <br />'); 
       $epaccDB = true; 
      } 
      else{ 
       echo('epacc is not enabled. <br />'); 
       $epaccDB = false; 
      } 
      if(in_array(6, $enabledProjects)){ 
       echo('k12ise is ENABLED. <br />'); 
       $k12iseDB = true; 
      } 
      else{ 
       echo('k12ise is not enabled. <br />'); 
       $k12iseDB = false; 
      } 
     if(in_array(7, $enabledProjects)){ 
       echo('kctc is ENABLED. <br />'); 
       $kctcDB = true; 
      } 
      else{ 
       echo('kctc is not enabled. <br />'); 
       $kctcDB = false; 
      } 
      if(in_array(8, $enabledProjects)){ 
       echo('mbbpm is ENABLED. <br />'); 
       $mbbpmDB = true; 
      } 
      else{ 
       echo('mbbpm is not enabled. <br />'); 
       $mbbpmDB = false; 
      } 
     if(in_array(9, $enabledProjects)){ 
       echo('n2n is ENABLED. <br />'); 
       $n2nDB = true; 
      } 
      else{ 
       echo('n2n is not enabled. <br />'); 
       $n2nDB = false; 
      } 
     if(in_array(10, $enabledProjects)){ 
       echo('sbpm is ENABLED. <br />'); 
       $sbpmDB = true; 
      } 
      else{ 
       echo('sbpm is not enabled. <br />'); 
       $sbpmDB = false; 
      } 

     echo("</p>"); 

     if($icleiDB){ 
     echo "determined to be true 193 ".$icleiDB."<br>"; 
      echo('icleiDB is true.'); 
     } 
     elseif(!$icleiDB){ 
      echo "determined to be false 197 ".$icleiDB."<br>"; 
      echo('icleiDB is false.'); 
     } 

    //compare selections with DB values and decide what needs to change 
    if(!$iclei && $icleiDB){ //user says iclei = false, DB says true. delete from DB 
     $mySqlConnection->doNonQuery(
      "DELETE FROM tblenabledprojects 
      WHERE townid = '$townid' AND projectid = '1'" 
     ); 
     echo("Values deleted from database: ICLEI true -> false"); 
    } 
    //echo "******iceli = ".$iceli." and icleiDB = ".$icleiDB."******<br>"; 
    else if($iceli && !$icleiDB){ //user says iceli = true, DB says false. add to DB 
     $mySqlConnection->doNonQuery( 
      "INSERT INTO tblenabledprojects 
      VALUES ('$townid', '1')" 
     ); 
     echo("Value added to database: ICLEI false -> true"); 

    } 
    else{ 
     if($iclei){ 
      echo("iclei remains true"); 
     } 
     elseif(!$iclei){ 
      echo('iclei remains false'); 
     } 
     else{ 
      echo('Who knows?'); 
     } 
    } 

    ?> 
    </body> 
</html> 

답변

0

사람이, 내가이 글을 읽을려고했는데, 그것은 나를 headace ... 메이비 이것은 또한 당신이 그것을 "를 참조하십시오"하지 않는 이유입니다 제공합니다 ... :

여기에 모든 코드입니다

내가 잘못이 있지만 문제를 해결하는 데 도움이해야 몇 가지 보지 못했다 :

  1. PHP에서 스위치가이 경우/다른/elsefi 것 같은 화를하지 않는다 있습니다.
  2. 코드에서 코드를 캡슐화하여 "객체 지향 프로그래밍"에 대해 읽으십시오. 실제로는 장기간에 걸쳐 시간을 절약 할 수 있습니다 ... 그리고 당신은 이것없이 끝나지 않을 것입니다 ... 이것은 스파게티 코드입니다 ... 이 코드를 몇 주 후에 얻을 수 있다면 나중에 모든 것을 생각해야합니다 ...
  3. SQL 쿼리에서 사용자 입력을 절대로 사용하지 마십시오! -> SQL 주입에 대해 준비!
+0

예. 지금 당장 눈에 띄는 것은 중첩 된 IF 문입니다. 대신 switch 문을 사용해야하며 오류가 발생할 확률은 적습니다. 나는 이미 두 곳에서'else if'에 공간이 없다고 봅니다. – Ally

0

당신이 설정하는 변수는 $iclei라고하지만 if 상태에서 하나 $iceli라고합니다. 맞춤법의 차이점에 유의하십시오. PHP가 이와 같은 오류에 대해 경고하도록하기 위해 this question에 대한 대답 중 하나를보고 싶을 수도 있습니다.

관련 문제