За последние 24 часа нас посетил 20941 программист и 1136 роботов. Сейчас ищут 653 программиста ...

Комментарии не записываются в базу в системе голосования

Тема в разделе "Сделайте за меня", создана пользователем Lomanur, 9 янв 2021.

  1. Lomanur

    Lomanur Новичок

    С нами с:
    9 янв 2021
    Сообщения:
    8
    Симпатии:
    0
    Здравствуйте, сделал систему голосования, нужно к определённому ответу добавить коммент, работает только голосование но комментарии не заносят я в базу. Помогите советом кодом, я смотрел параметры что отсылает я в post и все нормально отпровляет но не записывает в таблицу.
    Имеится код для голосования
    PHP:
    1. system mysql php
    2. php
    3. Helmp me please I try this code, bad commnet dont insert in table of comment.
    4.  
    5.   <?php
    6. include 'functions.php';
    7. // Connect to MySQL
    8. $pdo = pdo_connect_mysql();
    9. // If the GET request "id" exists (poll id)...
    10. if (isset($_GET['id'])) {
    11.     // MySQL query that selects the poll records by the GET request "id"
    12.     $stmt = $pdo->prepare('SELECT * FROM polls WHERE id = ?');
    13.        $stmt->execute([$_GET['id']]);
    14.     // Fetch the record
    15.     $poll = $stmt->fetch(PDO::FETCH_ASSOC);
    16.     // Check if the poll record exists with the id specified
    17.     if ($poll) {
    18.         // MySQL query that selects all the poll answers
    19.         $stmt = $pdo->prepare('SELECT * FROM poll_answers WHERE poll_id = ?');
    20.         $answer_id = $stmt->execute([$_GET['id']]);
    21.         // Fetch all the poll anwsers
    22.         $poll_answers = $stmt->fetchAll(PDO::FETCH_ASSOC);
    23.         // If the user clicked the "Vote" button...
    24.         if (isset($_POST['poll_answer'])) {
    25.             // Update and increase the vote for the answer the user voted for
    26.             $stmt = $pdo->prepare('UPDATE poll_answers SET votes = votes + 1 WHERE id = ?');
    27.          
    28.            
    29.             $stmt->execute([$_POST['poll_answer']]);
    30.             if(isset($poll_id) & isset($title) & isset($comment)){
    31.             $poll_id = $_POST["poll_id"];
    32.               $title = $_POST["title"];
    33.               $comment = $_POST["comment"];
    34.              mysql_query("INSERT INTO poll_comment  VALUES (Null,$poll_id,$title,$comment)");
    35.              //mysql_query("INSERT INTO poll_comment (poll_id,title,comment) VALUES ('','$poll_id','$title','comment')");  
    36.             //$stmt->execute([$_POST['poll_comment']]);
    37.             // Redirect user to the result page
    38.             header ('Location: result.php?id=' . $_GET['id']);
    39.             exit;
    40.         }
    41.     } }
    42.  
    43.     else {
    44.         die ('Poll with that ID does not exist.');
    45.     }
    46. } else {
    47.     die ('No poll ID specified.');
    48. }
    49.  
    50.  
    51.  
    52.     // Update and increase the vote for the answer the user voted for
    53.  
    54.     //$stmt = $pdo->prepare("INSERT INTO poll_comment  VALUES (Null,$poll_id,$title,$comment)");
    55.     // $stmt->execute([$_POST['poll_comment']]);
    56.  
    57.  
    58.  
    59.  
    60. ?>
    61. <?=template_header('Poll Vote')?>
    62.  
    63. <div class="content poll-vote">
    64.     <h2><?=$poll['title']?></h2>
    65.     <p><?=$poll['desc']?></p>
    66.     <form action="vote.php?id=<?=$_GET['id']?>" method="post">
    67.         <?php for ($i = 0; $i < count($poll_answers); $i++): ?>
    68.         <label>
    69.             <input type="radio" name="poll_answer" value="<?=$poll_answers[$i]['id']?>"<?=$i == 0 ? ' checked' : ''?>>
    70.             <?=$poll_answers[$i]['title']?>
    71.         </label>
    72.         <input type="hidden" name="poll_id" value=<?=$_GET['id']?>>
    73.        
    74.         <?php endfor; ?>
    75.         <div>
    76.         <tr>
    77.         <td> title : </td><td><input type="text" name="title"></td>
    78.         </tr>
    79.         <tr>
    80.         <td> Comment : </td><td><textarea name="comment" rows="6" cols="50"></textarea></td>
    81.         </tr>
    82.         <?
    83.         ?>
    84.             <input type="submit" value="Vote">
    85.             <a href="result.php?id=<?=$poll['id']?>">View Result</a>
    86.         </div>
    87.     </form>
    88. </div>
    И таблица комментариев
    Код (Text):
    1. CREATE TABLE IF NOT EXISTS `poll_comment` (
    2.     `id` int(11) NOT NULL AUTO_INCREMENT,
    3.     `poll_id` int(11) NOT NULL,
    4.     `title` text NOT NULL,
    5.     `comment` text(256) NOT NULL ,
    6.     PRIMARY KEY (`id`)
    7. ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
     
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.734
    Симпатии:
    1.315
    Адрес:
    Лень
    используешь PDO, а после - резко динозавра подписываешь, и то не правильно используешь. Ошибки читай
     
  3. Lomanur

    Lomanur Новичок

    С нами с:
    9 янв 2021
    Сообщения:
    8
    Симпатии:
    0
    Ошибок нету, код работает. Вот и почему прошу помощи.
     
  4. Lomanur

    Lomanur Новичок

    С нами с:
    9 янв 2021
    Сообщения:
    8
    Симпатии:
    0
    Переделал код но не работает
    Даже если сделаю так

    $stmt = $pdo->prepare("INSERT INTO poll_comment (poll_id,title,comment) VALUES ('$poll_id','$title','$comment')");
    $stmt->execute([$_POST['poll_comment ']]);

    Код (Text):
    1. ?php
    2. include 'functions.php';
    3. // Connect to MySQL
    4. $pdo = pdo_connect_mysql();
    5. // If the GET request "id" exists (poll id)...
    6. if (isset($_GET['id'])) {
    7.     // MySQL query that selects the poll records by the GET request "id"
    8.     $stmt = $pdo->prepare('SELECT * FROM polls WHERE id = ?');
    9.        $stmt->execute([$_GET['id']]);
    10.     // Fetch the record
    11.     $poll = $stmt->fetch(PDO::FETCH_ASSOC);
    12.     // Check if the poll record exists with the id specified
    13.     if ($poll) {
    14.         // MySQL query that selects all the poll answers
    15.         $stmt = $pdo->prepare('SELECT * FROM poll_answers WHERE poll_id = ?');
    16.         $answer_id = $stmt->execute([$_GET['id']]);
    17.         // Fetch all the poll anwsers
    18.         $poll_answers = $stmt->fetchAll(PDO::FETCH_ASSOC);
    19.         // If the user clicked the "Vote" button...
    20.         if (isset($_POST['poll_answer'])) {
    21.             // Update and increase the vote for the answer the user voted for
    22.             $stmt = $pdo->prepare('UPDATE poll_answers SET votes = votes + 1 WHERE id = ?');
    23.             $stmt->execute([$_POST['poll_answer']]);
    24.          
    25.          
    26.             if(isset($_POST["submit"]))
    27.             {
    28.            
    29.             //$name = $_POST["name"];
    30.             $email = $_POST["poll_id"];
    31.             $website = $_POST["title"];
    32.             $comment = $_POST["comment"];
    33.             mysql_query("INSERT INTO poll_comment (poll_id,title,comment) VALUES ('$poll_id','$title','$comment')");
    34.             //$stmt->execute([$_POST['poll_comment']]);
    35.             // Redirect user to the result page
    36.             header ('Location: result.php?id=' . $_GET['id']);
    37.             exit;
    38.         }
    39.     }
    40. }
    41.     else {
    42.         die ('Poll with that ID does not exist.');
    43.     }
    44. } else {
    45.     die ('No poll ID specified.');
    46. }
    47. ?>
    48. <?=template_header('Poll Vote')?>
    49.  
    50. <div class="content poll-vote">
    51.     <h2><?=$poll['title']?></h2>
    52.     <p><?=$poll['desc']?></p>
    53.     <form action="vote.php?id=<?=$_GET['id']?>" method="post">
    54.         <?php for ($i = 0; $i < count($poll_answers); $i++): ?>
    55.         <label>
    56.             <input type="radio" name="poll_answer" value="<?=$poll_answers[$i]['id']?>"<?=$i == 0 ? ' checked' : ''?>>
    57.             <?=$poll_answers[$i]['title']?>
    58.         </label>
    59.      
    60.         <?php endfor; ?>
    61.         <div>
    62.         <input type="hidden" name="poll_id" value=<?=$_GET['id']?>>
    63.         <tr>
    64.         <td> title : </td><td><input type="text" name="title"></td>
    65.         </tr>
    66.         <tr>
    67.         <td> Comment : </td><td><textarea name="comment" rows="6" cols="50"></textarea></td>
    68.         </tr>
    69.         <?
    70.         ?>
    71.             <input type="submit" value="Vote">
    72.             <a href="result.php?id=<?=$poll['id']?>">View Result</a>
    73.         </div>
    74.     </form>
    75. </div>
     
  5. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.734
    Симпатии:
    1.315
    Адрес:
    Лень
  6. Lomanur

    Lomanur Новичок

    С нами с:
    9 янв 2021
    Сообщения:
    8
    Симпатии:
    0
  7. Lomanur

    Lomanur Новичок

    С нами с:
    9 янв 2021
    Сообщения:
    8
    Симпатии:
    0
    я так понял тут не помогут
     
  8. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.734
    Симпатии:
    1.315
    Адрес:
    Лень
    вместо 33 строки пропиши var_dump ( $_POST ); и смотри результат запроса, пришел ? Значит используй INSERT с правильным синтаксисом инструмента.
    - если нет, то выясняй - почему не дошел до var_dump
    --- Добавлено ---
    36 строку закоментируй, ибо перенаправлять при дебаге будет
     
  9. Lomanur

    Lomanur Новичок

    С нами с:
    9 янв 2021
    Сообщения:
    8
    Симпатии:
    0
    Если я сюда
    Код (Text):
    1. mysql_query("INSERT INTO poll_comment (poll_id,title,comment) VALUES ('$poll_id','$title','$comment')")
    вставляю сразу данные то есть без переменных $poll_id','$title','$comment то записывается все нормально, как только я вставляю в запрос переменные то у меня данные не берутся с формы
    Код (Text):
    1. <?php endfor; ?>
    2.         <div>
    3.         <input type="hidden" name="poll_id" value=<?=$_GET['id']?>>
    4.         <tr>
    5.         <td> title : </td><td><input type="text" name="title"></td>
    6.         </tr>
    7.         <tr>
    8.         <td> Comment : </td><td><textarea name="comment" rows="6" cols="50"></textarea></td>
    9.         </tr>
     
  10. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.591
    Симпатии:
    360
    @Lomanur, проверьте значения переменных на предмет наличия кавычек и апострофов.
    В общем - используйте не прямую вставку переменных в запрос, а подготовленные выражения.
     
  11. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.734
    Симпатии:
    1.315
    Адрес:
    Лень
    не.. это просто впизду такой раздел. Дизлайк и отписка.
     
  12. Lomanur

    Lomanur Новичок

    С нами с:
    9 янв 2021
    Сообщения:
    8
    Симпатии:
    0
    ответ с кавычками
    array(4) { ["poll_answer"]=> string(1) "8" ["poll_id"]=> string(1) "2" ["title"]=> string(5) "fdfdf" ["comment"]=> string(4) "fdfd" }
     
  13. Lomanur

    Lomanur Новичок

    С нами с:
    9 янв 2021
    Сообщения:
    8
    Симпатии:
    0
    Сделал все работает но после Н количеств комментов перестает записывать в базу
     
  14. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.591
    Симпатии:
    360
    Это $_POST? Тогда с кавычками всё в порядке.
    Теперь по поводу варианта с подготовленными выражениями из #4
    Вот это вот:
    должно выглядеть так:
    PHP:
    1. $stmt = $pdo->prepare("INSERT INTO poll_comment (poll_id, `title`, `comment`) VALUES (?, ?, ?)");
    2. $stmt->execute([$poll_id, $title, $comment]);
    И ещё не из кода в том-же #4 не понятно, откуда берётся $title.
    Соответственно, вариант с prepare() и execute() должен полностью заменить строку 33 (из #4, с mysql_query()).