2017-01-20 1 views
-1

저는 SQL/PHP/HTML에 대해 매우 익숙하며 지금은 uni로 배우고 있습니다.
우리는 데이터베이스를 업데이트하고 데이터베이스에 추가 할 수있는 양식을 포함하여 우리가 선택한 웹 사이트를 만들도록 요청 받았습니다.
본 적이있는 가장 기본적인 만화책 라이브러리를 만들었습니다.테이블을 업데이트하는 PHP는 데이터베이스에 영향을 미치지 않습니다.

지금까지 사용자가 관련 필드를 많이 사용하여 데이터베이스에 새 만화를 추가 할 수있는 작업 양식이 하나 있는데 다른 페이지에 다른 양식을 만들어서 사용자가 만화를 표시하도록 허용하고 있습니다. 소유주는 드롭 다운 목록에서 선택하고 제출을 클릭하십시오.
이것은 부울 값을 0에서 1로 변경합니다.이 값은 소유로 표시된 만화 페이지에 표시됩니다.
양식을 만들었고 모든 것이 제대로 작동하는 것처럼 보였습니다. 제출 단추를 클릭했지만 데이터베이스가 실제로 업데이트되지 않으면 확인 메시지가 표시됩니다.

다음은 제 PHP 코드입니다. 업데이트하려고하는 테이블을 Comic이라고하고 특정 열을 소유라고 알면, 소유 된 모든 부울 값은 기본값 0으로 설정되고이 양식은 1로 업데이트됩니다. 모든 것은 업데이트중인 실제 데이터베이스. 당신이 게시하는 ID 이 때 당신은 만화 이름을 사용할 수 없습니다

<?php 
    ini_set('display_errors', 1); 
    ini_set('display_startup_errors', 1); 
    error_reporting(E_ALL); 

    $content = "<h1>Mark a comic as owned</h1>"; 
    $action = $_SERVER["PHP_SELF"]."?page=owned"; 
    $sql0 = "SELECT Comic.name, Comic.id, Comic.owned 
      FROM Comic"; 

    $result0 = mysqli_query($link, $sql0); 
    if($result0 === false){ 
      echo mysqli_error($link); 
    } else { 
      $options0 = ""; 
      while($row = mysqli_fetch_assoc($result0)){ 

        $options0 .= "<option value='".$row['id']."'>"; 
        $options0 .= $row['name']; 
        $options0 .= "</option>"; 
      } 
    } 

    $form_html = "<form action'".$action."' method='POST'> 
        <fieldset> 
          <label for='m_own'>Comic:</label> 
          <select name='m_own' required> 
            <option value='' disabled selected>Select owned comic</option> 
            ".$options0." 
          </select> 
        </fieldset> 
        <button type='submit'>Submit</button> 
        </form>"; 
    $content .= $form_html; 

    if($_SERVER["REQUEST_METHOD"] == "POST"){ 

      $m_own = $_POST["m_own"]; 

      $sql888 = "UPDATE Comic 
         SET owned = 1 
         WHERE name ='.$m_own.';"; 

      $result888 = mysqli_query($link, $sql888); 
      if($result888 === false){ 
        echo mysqli_errno($link); 
      } else { 
        $content .= "Marked"; 
      } 
    } 
?> 
+0

은'$ m_own'입니다. str IN 또는 정수? –

+0

왜 ";" 당신의 쿼리 문자열에 업데이트? –

+0

@UsmanRana는 그것에 대해 너무 걱정하지 않아도됩니다. –

답변

1

난에 어디에 이름을 변경하면

$sql888 = "UPDATE Comic SET owned = 1 WHERE name ='.$m_own.';"; 
$result888 = mysqli_query($link, $sql888); 

그것은

$sql888 = "UPDATE Comic SET owned = 1 WHERE id ='$m_own';"; 
$result888 = mysqli_query($link, $sql888); 

참고해야 무슨이다 이드와 아포스트로피와 점들이 어디 있니? 지금은 바래요.

+0

당신은 신의 선물입니다! 나는 그것을보고있는 몇 명의 친구와 함께 여러 해 동안 이것을 꼼짝 않고 바라 보았습니다. 아무도 그것을 발견하지 못했습니다. 나는 그것을 당신의 대답으로 바 꾸었습니다. 그것은 당신의 도움 사람에게 감사합니다. –

+0

당신은 환영합니다 – smartnet

+0

@smartnet : if '$ sql888'은 사용자 입력에서 비롯되며 필터링되지 않으면 솔루션에 SQL 삽입 취약점이 포함됩니다. MySQLi는 매개 변수 바인딩을 제공하는데, 대안이 없다면 항상 사용해야합니다. – halfer

관련 문제