2016-11-03 2 views
0

EDIT 아직 진술을 준비하지 못했습니다. 기능을 먼저 사용하고 싶습니다.
양식 제출에 MySQL 업데이트가 표시되지 않음 (업데이트가 성공적으로 변경됩니다)

사용자가 데이터베이스에서 질문을보고 동시에 업데이트 할 수있는 페이지를 만듭니다. 질문은 텍스트 상자에 표시됩니다. 각 질문/선택 사항에 대해 양식을 제출하고 버튼을 제출합니다. 변경이 이루어지면 제출시 쿼리가 성공적으로 실행되고 브라우저에서 새로 고침을 누르면 변경 사항이 업데이트됩니다. 그러나 업데이트 버튼을 누르면 업데이트하는 대신 이전 결과가 표시됩니다. 여기서 무엇을 할 수 있습니까? 양식 제출 후 헤더를 새로 고치는 설정이 작동하지 않는 것 같습니다.

코드 당신이 선택 전에 업데이트를 실행하기 때문에 당신이 저장된 이전 값을 표시합니다, 그래서 이것은, 발생

<?php include 'database.php'; include 'authenticate.php'; ?>  
<?php 
    $questionText = $_POST['question']; 
    $qNum = $_POST['question_number']; 
    $query = "SELECT * FROM `questions`"; 
    $result = $mysqli->query($query); 
?> 
<?php 
    if (isset($_POST['update'])) { 
    $questionQuery = "UPDATE `questions` SET text = '$questionText' WHERE question_number = '$qNum'"; 
    $mysqli->query($questionQuery) or die("Query failed: " . $mysqli->error.__LINE__); 
    } 
?> 
<!DOCTYPE html> 
<html lang="en"> 
<head> 
<meta charset="UTF-8"> 
<title>Update</title> 
</head> 
<body> 
<?php while($row = $result->fetch_assoc()): ?> 
<?php $questionNumber = $row['question_number']; ?> 
    <?php echo "<form action='update.php' method='post'>"; ?> 
     <?php echo $questionNumber; ?> <input type="text" name="question" value="<?php echo $row['text']; ?>" style="width: 75%" /> 
     <input type="hidden" name="question_number" value="<?php echo $row['question_number']; ?>" /><br> 
     <?php 
      $query1 = "SELECT * FROM `choices` WHERE question_number = '$questionNumber'"; 
      $result1 = $mysqli->query($query1); 

      //echo out choices right under each question 
      while ($row1 = $result1->fetch_assoc()) { 
       $text = $row1['text']; 
       if ($row1['is_correct'] == 1) { 
        echo "<input type='text' name='choice' value='$text' style='border: 4px solid lightgreen' />" . "<br>";          
       } else { 
        echo "<input type='text' name='choice' value='$text' style='border: 4px solid red' />" . "<br>";           
       } 
      } 
     ?> 
     <input type="submit" name="update" value="Update" /> 
    <?php echo "</form>"; ?> 
    <?php echo "<br>"; ?> 
<?php endwhile; ?>   

+0

데이터는 업데이트되었지만 웹 페이지는 업데이트되지 않는 경우 캐싱 문제가있을 수 있습니다. –

+0

[Little Bobby] (http://bobby-tables.com/)에서 *** [귀하의 스크립트는 SQL 주입 공격의 위험에 있습니다.] (http://stackoverflow.com/questions/60174/how-can- i-prevent-sql-injection-in-php) *** [MySQLi] (http://php.net/manual)에 대한 [prepared] (http://en.wikipedia.org/wiki/Prepared_statement) 진술에 대해 배우십시오. /en/mysqli.quickstart.prepared-statements.php). 심지어 [이스케이프 문자열] (http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real-escape-string) 안전하지 않습니다! [그것을 믿지 마시오?] (http://stackoverflow.com/q/38297105/1011527) –

+0

크롬으로 많이 실행됩니다. 내 해킹/해법은 URL 끝 부분에 고유 한 것을 넣어 브라우저가 캐시 된 사본을 무시하도록하는 것입니다. '

답변

0

.

이동 업데이트 블록 후이 라인

$result = $mysqli->query($query); 

. :)

+0

그랬습니다. 고마워요. m8! –

관련 문제