2017-11-26 21 views
0

私はコンテンツ管理システムで作業しています。この特定のページは、コンテンツマネージャがコンテンツのパフォーマンスを評価するために使用できるページであり、CMがコンテンツに1-5のレートを付けることができる5つのラジオボタンと、CMがコメントをテーブルに挿入することを可能にするコメントボックス。ページは、レビューされる特定のコンテンツのIDを取得するインデックスページにリンクされています。ラジオボタンが表示されず、blogpostID、コメント、およびオプトラジオという3つの変数の「未定義インデックス」など、多くのエラーが表示されます。誰もこのコードで私を助けることができますか?ラジオボタンが表示されないので、まずラジオボタンを修正する必要があります。次に、データをMySQLに正しく接続して、評価とコメントをDBに投稿できるようにする必要があります。そのため、PKであるためブログ投稿のIDを取得することができます。POSTメソッドとGETメソッド - ラジオボタンは現在使用できません

<!DOCTYPE html> 
<html lang="en"> 
    <head> 
    <!-- Required meta tags --> 
    <meta charset="utf-8"> 
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> 

    <!-- Bootstrap CSS --> 
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous"> 

    <link rel="stylesheet" type="text/css" href="css/style.css"> 


<!-- Navbar Code --> 
<?php 
    require_once('PHP_functions/CM_navbar.php'); 
?> 

<!-- End of Navbar --> 

<div class="center spacer"> 
    <h3 id = "main-title"> Rate Blog </h3> 
</div> 

<form action ='' method = "POST"> 
<div class="container"> 
    <div class="row"> 
    <div class="form-group"> 
     <label for="radio-inline-group">Rating:</label> 
     <label class="radio-inline"><input type="radio" name="optradio" value="1">1</label> 
     <label class="radio-inline"><input type="radio" name="optradio" value="2">2</label> 
     <label class="radio-inline"><input type="radio" name="optradio" value="3">3</label> 
     <label class="radio-inline"><input type="radio" name="optradio" value="4">4</label> 
     <label class="radio-inline"><input type="radio" name="optradio" value= "5">5</label> 
    </div> 
    </div> 

    <div class="row"> 
    <div class="form-group"> 
     <label for="comment">Comment:</label> 
     <textarea class="form-control" rows="5" id = "comment" name="comment"></textarea> 
    </div> 
    </div> 

    <div class="row"> 
     <button type="button" class="btn btn-warning">Request Revision</button> 
     <button type="button" class="btn btn-success">Approve</button> 
    </div> 
</div> 

<?php 
$name_of_table = "Blog"; 
$id = $_GET['blogID']; 
$rating = $_POST['optradio']; 
$managerComments = $_POST['comment']; 

$query = "UPDATE" .$name_of_table. "SET rating = :optradio, managerComments = :comment WHERE blogID = :blogID"; 
$TableInfo = getRows($query); 

foreach($TableInfo as $data) 
    { 
     echo ' 
     <tr> 
     <th>'.$data['ID'].'</th> 
     <td>'.$data['title'].'</td> 
     <td>'.$data['client'].'</td> 
     <td>'.$data['freelancer'].'</td> 
     <td>'.$data['Draft Due'].'</td> 
     <td>'.$data['Draft Received'].'</td> 
     <td>'.$data['onTime'].'</td> 
     <td><a href="./CM_reviewBlog.php?id='.$data['ID'].'">Rate</a></td> 
     </tr>'; 
    } 

?> 
</form> 

</body> 
</html> 



    <!-- Optional JavaScript --> 
    <!-- jQuery first, then Popper.js, then Bootstrap JS --> 
    <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script> 
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script> 
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script> 
    </body> 
</html> 
+0

*誰でもこのコードを教えてもらえますか? *最初に正確なエラーメッセージを表示し、それをスローする正確なコードを調べる必要があります。ヒント: '$ query'には3つのプレースホルダーがあり、その文字列を' getRows() 'に渡しています - その関数はそれらのパラメータをバインドしようとします(成功しない)が、ここには表示されていないので、 – ccKep

+1

あなたのクエリは、いくつかのスペース '' UPDATE '。$ name_of_tableを欠いています。 'UPDATE'の後で' SET'の前に "SET ..." –

答えて

0

現在お使いのSQL文は、ページを訪問するたびに実行されます。しかし、あなたの最初の訪問では、ユーザーはまだ値を設定していないので、実行してはいけません。これは、$_POST配列が空でフォームが送信されていないため、「未定義インデックス」エラーが発生する理由です。また、getRows()(それが何であれ、それは関数のPHPビルドではありません)をUPDATEクエリで使用するのは意味がありません。

実際にユーザーが送信したHTMLフォームがある場合にのみ、UPDATEクエリを実行する必要があります。 isset()でこれを実行して、$_POST配列に必要な値が入力されているかどうかを確認できます。あなたのコードで$_GET['blogID']を使用しておきたいとき

if (isset($_POST['optradio'], $_POST['comment'])) { 
    // run UPDATE query here 
} 
// normal SELECT query hiere 

さらに、その後、あなたのHTMLフォームは、同様にこの情報を送信する必要があります。これを行うには、<form>タグのaction=""属性で呼び出したいURIを指定します。それは次のようになります。

<form action="yourPage.php?blogID=<?php echo (int)$_GET['blogId']; ?>" method="post"> 
    ... 
</form> 

blogID値は$_GETが、フォームの値のままである。この方法は$_POSTです。

関連する問題