Seite 1 von 1

[PHP] Meine Bewertung funktioniert nicht wie sie soll!

Verfasst: 23.02.2008 22:59
von gnol
Wenn man eine Bewertung abschickt, soll sich 1 addieren oder subtrahieren.. aber bei mir zieht das Scipt gleich 2 ab oder tut gleich 2 dazu.

Code: Alles auswählen

<?

include "./inc/db.php";
include "./f/show_sig.php";
include "./f/counter.php";

$sql = "SELECT
            ID,
            nick,
            date,
            wert1,
            wert2,
            counter,
            sig,
            a
           FROM
            sig
           WHERE
            a = 'ja'
           ORDER BY
            ID desc
           LIMIT 5";
$c = mysql_query($sql) or die (mysql_error());
show_sig($c);

?>
Code von der Funktion show_sig:

Code: Alles auswählen

<?
function show_sig($c)
 {
    if ($_POST['bewert'] == 'bewert')
     {
       $sql = "SELECT
                IP,ID
               FROM
                wertung
               WHERE
                ID = '".$_POST['id']."' AND IP = '".$_SERVER['REMOTE_ADDR']."'";
       $ab = mysql_query($sql) OR die(mysql_error());
       $ab2 = mysql_fetch_assoc($ab);

       if ($ab2['IP'] == $_SERVER['REMOTE_ADDR'] /*or $_COOKIE['sigboxw'] == $_POST['id']*/)
        {
          echo "<p><big><b>Du hast es schon bewertet!</b></big></p>";
        }
       else
        {
          //setcookie("sigboxw", $_POST['id'], time() + 60*60*24);
          if ($_POST['wertung'] == ''){}
          else if ($_POST['wertung'] == 'gut')
           {
             $sql = "UPDATE sig
                  SET wert1 = wert1+1, wert2 = wert2+1
                  WHERE ID = '".$_POST['id']."'";
           }
          else if ($_POST['wertung'] == 'schlecht')
           {
             $sql = "UPDATE
                      sig
                     SET
                      wert1 = wert1-1, wert2 = wert2+1
                     WHERE ID = '".$_POST['id']."'";
           }

          $bewertung = mysql_query($sql) or die (mysql_error());
          $add2 = mysql_query($sql) OR die(mysql_error());
          $sql = "INSERT INTO wertung
                   (ID, IP, date)
                  VALUES
                   ('".$_POST['id']."', '".$_SERVER['REMOTE_ADDR']."', NOW())";
          $ip2 = mysql_query($sql) OR die(mysql_error());
        }
     }
   
   if ($_GET['b'] == '')
    {
      $i = 1;
    }
   else
    {
      $i = $_GET['b']*10+1;
    }
   while ($d = mysql_fetch_assoc($c))
    {
      if ($d['wert1'] == 0)
       {
        $wert = "0";
       }
      else
       {
        $wert = $d['wert1'];
       }
      if ($_GET['s'] == 'rank')
       {
         $rank = "<b>Top $i</b><br />";
       }
    
   $sqlt = "SELECT sig, tag FROM tags WHERE sig = '".$d['ID']."'";
   $tags = mysql_query($sqlt) or die(mysql_error());
   
   echo '<br /><br />
        <table border="0" cellspacing="0" cellpadding="0" width="100%">
         <tr>
          <td id="head" colspan="2">
           Von: '.$d['nick'].' | Bewertung: '.$wert.' | Views: '.$d['counter'].'
          </td>
         </tr>
         <tr>
          <td id="body">
           '.$rank.'
           '.$d['sig'].'<br />
           <small><small>Eintrag am: '.$d['date'].'</small></small>
          </td>
          <td id="body2">
           <font size="-1" color="#F76800">
            <a onclick="document.getElementById(\'wert'.$d['ID'].'\').style.display=\'block\'">Bewerten</a><br />
            <a onclick="document.getElementById(\'tags'.$d['ID'].'\').style.display=\'block\'">Tags</a>
           </font>
          </td>
         </tr>
         <tr>
          <td>
            
          <DIV id="wert'.$d['ID'].'" class="block" style="display:none">
           <br />
           <form action="" method="post">
            <input type="radio" name="wertung" value="gut">+ gut</input>
            <input type="radio" name="wertung" value="schlecht">- schlecht</input>

            <input type="hidden" name="bewert" value="bewert" />
            <input type="hidden" name="id" value="'.$d['ID'].'" />
            <input type="submit" value="Bewerten!" />
           </form>
           </div>
          <DIV id="tags'.$d['ID'].'" class="block" style="display:none">
          <br />
           Tags:
           ';

             while ($x = mysql_fetch_assoc($tags))
              {
                echo '<a href="./?search='.$x['tag'].'&typ=tag&s=search&add=add">'.$x['tag'].'</a>, ';
              }

      echo '
           </div>
          </td>
         </tr>
        </table>';
        
    counter($d['ID']);
    $i++;
    }
  return true;
 }
?>

Verfasst: 23.02.2008 23:49
von Dave
Hi

Was du dir mal durchlesen solltest: http://de.wikipedia.org/wiki/SQL_Injektion

Verfasst: 24.02.2008 00:53
von Pyramide
Erstmal ist der Code zu lang: [kb=knigge#code]Posten von Code[/kb].

Dann solltest du bessere Variablen- / Parameternamen verwenden und nicht nur einzelne Buchstaben. Resultsets zwischen Funktionen hin- und herreichen sorgt auch nicht gerade für bessere Lesbarkeit. Weiterhin hast du eine Funktion "show", die aber Daten modifiziert. Und darin rufst du eine Funktion "counter" auf, deren Quellcode du gar nicht beifügst.

Weiterhin solltest du versuchen, ein SSCCE zu erstellen - damit lösen sich viele Probleme schon von selbst.