Skrypt nie dodaje głosów do bazy

0

nie wiem dlaczego nie dodaje mi glosow do tabeli odpowiedzi. Poniżej kod oddawania głosów:

$odpowiedz = mysql_query("SELECT a.odp  FROM
                    poll as q, odpowiedzi as a
                  WHERE
                    q.id = a.id_poll ")
or die('Błąd zapytania');

$sql = mysql_query('SELECT
                    q.id, q.tytul, q.data_begin, q.data_end, 
                    a.id_odp, a.odp, a.votes
                  FROM
                    poll as q, odpowiedzi as a
                  WHERE
                    q.id = a.id_poll AND q.id = ')or die('Błąd zapytania');


if(empty($_POST['submit'])){
   if ($a = mysql_fetch_array($sql)) {
   
  echo "<b> $a[tytul] </b>
                              <br />Data rozpoczęcia: $a[data_begin] 
                              <br />Data zakończenia: $a[data_end]";
 }
 while($r = mysql_fetch_array($odpowiedz)) {

        echo "<br/><input type='radio' name='vote'   /> $r[0]  ";   
    } echo"<input type='submit' name='submit' value='Głosuj!' />";
  }


if(isset($_POST["submit"])){
if(mysql_num_rows($odpowiedz) < 0 && mysql_num_rows($sql) < 0) {
    /* jeżeli wynik jest pozytywny, to wyświetlamy dane */
   echo "zle";
  
   
}
    else {

  $addd = mysql_query("UPDATE odpowiedzi SET votes = votes+1  WHERE id_odp= $_POST[vote]");
echo "dodano";}

}

A tutaj kod dodawania ankiety:

if(isset($_GET['admin']) && $_GET['admin']=='dodaj'){
        if(isset($_POST['tytul'])) { // 1
          $tytul = trim($_POST['tytul']);
          $data_begin = $_POST['data_begin'];
          $data_end = $_POST['data_end'];
         

          
 if (empty($_POST['tytul']) || empty($_POST['data_begin']) || empty($_POST['data_end'])) 
    {
      echo '<p>Musisz wypełnić wszystkie pola.</p>';
    }
    
    else {
            // 3
            $add = mysql_query("INSERT INTO poll (tytul, data_begin, data_end) VALUES ('$tytul', '$data_begin', '$data_end')");
            $id = mysql_insert_id();
            // 4
            foreach($_POST['odpowiedzi'] as $odpowiedz) {
                if(!empty($odpowiedz)) mysql_query("INSERT INTO odpowiedzi (`id_poll`, `odp`, `votes`) VALUES ('$id', '$odpowiedz', '0')");
            }
            echo '<p>Dodano poprawnie! <a href="admin.php">Wróć na stronę główną</a></p>';
        } }else { ?>
     <!DOCTYPE html>
<html lang="pl">
    
 <head>
    <link href="style.css" rel="stylesheet" type="text/css" />
    <meta charset="utf-8" />
 </head>
 <body>
 <h1>Panel administratora</h1>
  <form method="POST" action="">
    <fieldset>
      <legend>REFERENDUM</legend>
        Pytanie: <br>
        <input type="text" name="tytul"><br>
        Data rozpoczęcia:
        <input type="date" name="data_begin" placeholder="yyyy/dd/mm " /><br>
        Data zakończenia:
        <input type="datetime" name="data_end" placeholder="dd/mm/yyyy hh:mm:ss"><br>
        Odpowiedź:
        <input type="text" name="odpowiedzi[]"><br>
        Odpowiedź :
        <input type="text" name="odpowiedzi[]"><br>   
         
    </fieldset>    
    <input type="submit"  value="Wyślij"/>
  </form>

</body>
</html>
<?php }}

Pomoże ktoś?

0

a masz wiersz w bazie o podanym id_odp?

wyświetla Ci to "dodano"?

masz włączone wyświetlanie błędów, czy je ukrywasz?

mógłbyś przeformatować ten kod jak człowiek, a nie wcięcia zależne od fazy księżyca?

PS. kod jest dziurawy (sql injection) i przestarzały (mysql_*)

0

tak wcięcia są beznadziejne przepraszam. Już poprawiam

 if(isset($_GET['admin']) && $_GET['admin']=='dodaj'){
    
    if(isset($_POST['tytul'])) { // 1
      $tytul = trim($_POST['tytul']);
      $data_begin = $_POST['data_begin'];
      $data_end = $_POST['data_end'];
                  
      if (empty($_POST['tytul']) || empty($_POST['data_begin']) || empty($_POST['data_end'])) 
        {
          echo '<p>Musisz wypełnić wszystkie pola.</p>';
        }
        else 
        {
          $add = mysql_query("INSERT INTO poll (tytul, data_begin, data_end) VALUES ('$tytul', '$data_begin', '$data_end')");
          $id = mysql_insert_id();
              
          foreach($_POST['odpowiedzi'] as $odpowiedz) {
            if(!empty($odpowiedz)) mysql_query("INSERT INTO odpowiedzi (`id_poll`, `odp`, `votes`) VALUES ('$id', '$odpowiedz', '0')");
          } echo '<p>Dodano poprawnie! <a href="admin.php">Wróć na stronę główną</a></p>';
        } 
      }else { ?>
        <!DOCTYPE html>
        <html lang="pl">
        
         <head>
            <link href="style.css" rel="stylesheet" type="text/css" />
            <meta charset="utf-8" />
         </head>
         <body>
            <h1>Panel administratora</h1>
            <form method="POST" action="">
              <fieldset>
                <legend>REFERENDUM</legend>
                Pytanie: <br>
                <input type="text" name="tytul"><br>
                   
                Data rozpoczęcia:
                <input type="date" name="data_begin" placeholder="yyyy/dd/mm " /><br>
                  
                Data zakończenia:
                <input type="datetime" name="data_end" placeholder="dd/mm/yyyy hh:mm:ss"><br>
                    
                Odpowiedź:
                <input type="text" name="odpowiedzi[]"><br>
                
                Odpowiedź :
                <input type="text" name="odpowiedzi[]"><br>       
              </fieldset>    
              <input type="submit"  value="Wyślij"/>
             </form>
          </body>
        </html>
    <?php }}
 

Nic mi się nie wyświetla dlatego nie mam pojęcia co jest nie tak.
Tak w tabeli Odpowiedzi mam: id_odp, id_poll, votes i odp.
Zdaje sobie sprawe że nie jest to dobrze napisane ale niestety nie radze sobie. Na początek chce żeby to zadziałało

0

sprubui

$addd = mysql_query("UPDATE odpowiedzi SET votes = votes+1  WHERE id_odp= $_POST['vote']");
0

próbowałam ale wyskakuje mi błąd:

Parse error: syntax error, unexpected '' (T_ENCAPSED_AND_WHITESPACE), expecting identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING) in

dodanie znacznika <code class="none"> - @furious programming

0

czyli id_odp jest stringiem ?
nowa wersja

$addd = mysql_query("UPDATE odpowiedzi SET votes = votes+1  WHERE id_odp='$_POST['vote']'");
0

Niestety ciągle ten sam błąd. Czy czasem nie chodzi o to że votes w cudzysłowie traktuje jako stringa?
id_odp jest typu int.

0
<input type="submit"  value="Wyślij"/>

dodanie znacznika <code class="html"> - @furious programming

0

To też nie pomogło to musi być jakiś głupi błąd którego ja nie widze :/

0

mnie tylko chodzilo o to że masz coś takiego

if(isset($_POST['tytul']))

sam sie dopiero ucze ale wiem ze aby cos tam wywolac trzeba pisać tak

if(isset($_POST['dodaj']))

a ponizej

<input type="submit"  name="dodaj" value="Wyślij"/>

tak przynajmniej jest w podręcznikach, to by był ten błąd ze nic ci się nie wyświetla

dodatkowo w

<form method="POST" action="">

autorzy zalecają wpisywać w action jakąś strone nawet jak ma to być wysyłane na tą samą, ale to nie wielki błąd :), a jakie masz wg struktury bazy

dodanie znaczników <code class="php"> i <code class="html"> - @furious programming

0
<?php

$dbc = mysql_connect('localhost','root', '') or die ("w1");
mysql_select_db('aga11') or die ('w2');


 
    if(isset($_POST['tytul'])) { // 1
      $tytul = trim($_POST['tytul']);
      $data_begin = $_POST['data_begin'];
      $data_end = $_POST['data_end'];
 
      if (empty($_POST['tytul']) || empty($_POST['data_begin']) || empty($_POST['data_end'])) 
        {
          echo '<p>Musisz wypełnić wszystkie pola.</p>';
        }
        else 
        {
          $add = mysql_query("INSERT INTO poll (tytul, data_begin, data_end) VALUES ('$tytul', '$data_begin', '$data_end')");
          $id = mysql_insert_id();
 
          foreach($_POST['odpowiedzi'] as $odpowiedz) {
            if(!empty($odpowiedz)) mysql_query("INSERT INTO odpowiedzi (`id_poll`, `odp`, `votes`) VALUES ('$id', '$odpowiedz', '0')");
          } echo '<p>Dodano poprawnie! <a href="admin.php">Wróć na stronę główną</a></p>';
        } 
      }else { ?>
	  
	  
        <!DOCTYPE html>
        <html lang="pl">
 
         <head>
            <link href="style.css" rel="stylesheet" type="text/css" />
            <meta charset="utf-8" />
         </head>
         <body>
            <h1>Panel administratora</h1>
            <form method="POST" action="aga11.php">
              <fieldset>
                <legend>REFERENDUM</legend>
                Pytanie: <br>
                <input type="text" name="tytul"><br>
 
                Data rozpoczęcia:
                <input type="date" name="data_begin" placeholder="yyyy/dd/mm " /><br>
 
                Data zakończenia:
                <input type="datetime" name="data_end" placeholder="dd/mm/yyyy hh:mm:ss"><br>
 
                Odpowiedź:
                <input type="text" name="odpowiedzi[]"><br>
 
                Odpowiedź :
                <input type="text" name="odpowiedzi[]"><br>       
              </fieldset>    
              <input type="submit"  value="Wyślij"/>
             </form>
          </body>
        </html>
    <?php
}
	?>

u mnie dodaje :)

dodanie znacznika <code class="php"> - @furious programming

0

Meszke dzięki zapomniałam o podstawowej rzeczy czyli

 <form method="POST" action=""> 

Natomiast

if(isset($_POST['tytul']))  

jest do dodawania pytań i odpowiedzi i to akurat działa

Jednak mam problem jeszcze z

 $addd = mysql_query("UPDATE odpowiedzi SET votes = votes+1  WHERE id_odp='$_POST['vote']'"); 

dokładniej warunek po WHERE jest zły.

0

Zdublowane apostrofy masz tam na końcu, więc może lepiej tak:

$addd = mysql_query("UPDATE odpowiedzi SET votes = votes+1 WHERE id_odp = '" . $_POST['vote'] . "'");

to powinno zadziałać o ile $_POST['vote'] przechowuje wartości, które możesz porównać z id_odp w bazie...

0

Działa! Dziękuje wszystkim za pomoc :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1