[PHP] Meine Bewertung funktioniert nicht wie sie soll!

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
gnol
Mitglied
Beiträge: 79
Registriert: 13.09.2006 15:07
Wohnort: Bodensee
Kontaktdaten:

[PHP] Meine Bewertung funktioniert nicht wie sie soll!

Beitrag 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;
 }
?>
Dave
Mitglied
Beiträge: 2085
Registriert: 25.05.2003 15:03
Wohnort: Wuppertal

Beitrag von Dave »

Hi

Was du dir mal durchlesen solltest: http://de.wikipedia.org/wiki/SQL_Injektion
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Beitrag 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.
KB:knigge
Antworten

Zurück zu „Coding & Technik“