# kann man POST-Variablen leeren?



## Mike Rofon (11. Februar 2007)

ACHTUNG! ANFÄNGER-FRAGE! 

Folgnedes Problem: 
In einem Vote-Script wird der Vote-Wert per Formular mit POST abgeschickt.

<input type=radio name=voting value=$wert >

In der Auswertung wird sie auch korrekt verarbeitet

    $stimme = $_POST['voting'];

Danach tritt eine Vote-Sperre in Kraft. Klappt auch alles.
Nur gesetzt dem Fall, die Sperrzeit verstreicht, und nach den 4 Stunden wird die Seite refresht, dann ist die Variable $_POST['voting'] immer noch "da". 
In meinem Script ist es jetzt so, daß sofort die  Verarbeitung mit dem gevoteten Wert läuft und dieses "Voting" auch gezählt wird, und sofort eine neue Sperre gesetzt wird.

Sicherlich könnte ich das mit einem weiteren Schalter abfangen, aber den müßte ich ja im Formular-Quellcode "einsehbar" setzen. 
Eleganter wäre es wenn man die POST-Variable clearen könnte, aber 
unset($_POST['voting']) funktioniert nicht, was mich auch nicht wundert  

Kann man diese übergebene Variable irgendwie platt machen?


----------



## TchiboMann (11. Februar 2007)

überschreiben.

$_POST['voting'] = "bladiblabla";


----------



## Mike Rofon (11. Februar 2007)

Da war mal wieder einer betriebsblind  
Naja ich hätt nich gedacht daß man diese Variablen direkt beschreiben kann.

Danke, jetzt funktioniert der Laden


----------



## Flex (12. Februar 2007)

Also ich kann mit [phpf]unset[/phpf] Variablen, Arrays und auch die Superglobalen Variablen ($_GET, $_POST) löschen.
Funktioniert einwandfrei.


----------



## Mike Rofon (6. Mai 2007)

Nee, also irgendwie funktioniert es DOCH nicht. Ich hab es mit $_POST['voting'] = ""; probiertt UND mit unset(), beide Male ist nach der 30sec-Sperre der Vote noch da und sorgt dafür daß die Vote-Sperre neu anläuft.
Was mach ich denn in diesem Script hier falsch?


```
<?php
$sperrzeit = 28800; // in Sekunden
$einestunde = 60*60;
$sperre    = 0.005 ;
$TableUmfrage     = "efrcharts";
$TableUmfrageIPs  = "efrchartsIP";
$userIP = $_SERVER['REMOTE_ADDR'];

// alle abgelaufenen Blockierungen aus chartsIP löschen
$zeit = time()-30;
$res = mysql_query("DELETE FROM efrchartsIP WHERE Abgestimmt<='$zeit'", $verbindung);
// unset($zeit);

// Prüfen ob diese IP in der IP-Liste drin steht
$sql_ipnachschlagen = "SELECT * FROM efrchartsIP WHERE IP='".$userIP."' ";
$res_ipsuche = mysql_query($sql_ipnachschlagen, $verbindung);
$ipgefunden = mysql_num_rows($res_ipsuche);

if(mysql_num_rows(mysql_query($sql_ipnachschlagen, $verbindung))) {
//     JA , wurde schon gevotet
  $votesperre = 1;
  } else {
//     NEIN, voten ist erlaubt
  $votesperre = 0;
  }
echo "IP gefunden : $ipgefunden __ Vote-Sperre : $votesperre<br>
aktueller Vote: ".$_POST['voting']."";
if ($ipgefunden) echo "$zeit";

if ($votesperre == 0) {
  if (isset($_POST['voting']) & ($_POST['voting'] != ""))  {

    $votesperre = 1;
    $geradeabgestimmt = 1;
    $stimme = $_POST['voting'];
    // $_POST['voting'] = "";
    unset($_POST['voting']);

    $sql = "SELECT * FROM efrcharts WHERE voteid='".$stimme."' LIMIT 1";
    $res = mysql_query($sql, $verbindung) or die (fehlerMeldung (__LINE__, $sql));
    $satz = mysql_fetch_object($res);
    $neuvote = $satz->trangvotes + 1;
    $sql = "UPDATE efrcharts SET votes='$neuvote' WHERE voteid='".$stimme."'";
    $res = mysql_query($sql, $verbindung) or die (fehlerMeldung (__LINE__, $sql));
    // IP in die Liste schreiben.
    $sqlip = "INSERT INTO efrchartsIP (Abgestimmt, IP) VALUES ('".time()."', '".$userIP."')";
    $resip = mysql_query($sqlip, $verbindung) or die (fehlerMeldung (__LINE__, $sqlip));
    }
  }


// echo "Setvote=$setvote , BereitsAbgestimmt=$BereitsAbgestimmt<> IP = ".$userIP;

?>
<html>
<head>
<meta http-equiv="Content-Language" content="de">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>EFR-Charts</title>
<link href="include/allgemein.css" rel="stylesheet" type="text/css">
</head>

<body bgcolor="#000000">

<div align="center">
  <table border="0" cellpadding="0" width="90%">
    <tr>
      <td width="100%">
        <h1>Die EFR - Hörer-Charts</h1>
      </td>
    </tr>
  </table>
</div>

<div align="center">
<table id="aussen" cellspacing="3" cellpadding="0" width="100%" class="brett">
<tr>
  <td align="justify">
    <br><br>
    <?php
    if ($geradeabgestimmt) {
      echo "<span class=tkopf><div align=center>VIELEN DANK ! Deine Stimme wurde gezählt!</div></span><br>";
      $geradeabgestimmt = 0;
      }
      else
      {
      echo "
    <p>Herzlich Willkommen zu den EFR-Hörer Charts!<br>
    bla bla bla </p>      ";
      }
    if ($votesperre == 1) {
      echo "<b><div align=center>Die Vote-Sperre von $stunde Stunden ist aktiviert</div></b>.<br><br>";
      }
      ?>
    <form action="<?php echo $PHP_SELF; ?>" method="post"  >
    <table bgcolor="black" cellpadding="5" cellspacing="1" width=100% border=0>
    <?php
    $sql = "SELECT * FROM efrcharts";
    $res = mysql_query($sql, $verbindung);
    $anzahl = mysql_num_rows($res);
    while ($row = mysql_fetch_array($res)) {
      $platz     = $row['voteid'];
      $interpret = $row['interpret'];
      $titel     = $row['titel'];

      echo "
      <tr>
        <td bgcolor=\"#743A1F\">$platz </td>
        <td bgcolor=\"#743A1F\">$interpret</td>
        <td bgcolor=\"#743A1F\">$titel</td>
        <td width=10% bgcolor=\"#743A1F\"><div align=center>";
      if ($votesperre == 1)
        echo "<b>VOTE<br>GESPERRT</b>";
        else echo "<input type=radio name=voting value=$platz>";
     echo "</div>
        </td>
      </tr>";
      }
    echo "</table>";
    if ($votesperre == 0) echo "<br><div align=right><input type=Submit value=\"Abstimmen\"></div>";
    echo "</form>";

    ?>

  </td>
</tr>
</table>
</div>
</body>
</html>
```


----------



## mewX (6. Mai 2007)

Dein Problem ist, dass, wenn man nach der Sperrzeit das Script neulädt, alle Daten vom Browser neu gesendet werden, auch die Formular-Werte usw. Es ist also mehr ein Client Problem, was du eigentlich nicht lösen kannst, außer: Du leitest den Client direkt nach der Verwertung seiner Stimme auf eine andere Seite weiter, sodass er nicht in Verlegenheit kommt, die Seite neuzuladen 

gruß


----------



## nepda (6. Mai 2007)

ich kam jetzt ganz spontan auf die Idee einfach noch ein hidden Feld hinzuzufügen, das einen Zeitstempel beinhaltet... dann kannst du das absende Datum mit dem aktuellem überprüfen. Nur so eine kleine Idee, ungetestet... und nicht sehr lange überlegt.


----------



## -GS-Master (6. Mai 2007)

Naja aber wenn schon dann eben die Aktuelle Zeit in Sekunden + 5 oder so was und dann überprüfen ^^ --> So können die Daten nur in den 5 Sekunden passen -.-

Auch sehr gut wäre die Automatische Weiterleitung. Aber auch hier könnte man auf den Button "Eine Seite zurück" [ back(); ] gehen und die Daten (zumindest bei mir so -.-) lassen sich wieder aufgreifen.

*// EDIT*

Eines hab ich noch vergesssen -.-
Warum benutzt du denn nicht SESSIONS  
Tja hier kann deine Person so viel "Aktualisieren" wie er möchte und schafft es dennoch nicht die SESSION wieder zu bekommen ...

Die is halt dann weg nach dem das Fenster geschlossen ist.
Sonst bieten sich natürlich noch Cookies an


----------



## Mike Rofon (29. Mai 2007)

-GS-Master hat gesagt.:
			
		

> Eines hab ich noch vergesssen -.-
> Warum benutzt du denn nicht SESSIONS
> Tja hier kann deine Person so viel "Aktualisieren" wie er möchte und schafft es dennoch nicht die SESSION wieder zu bekommen ...
> 
> ...



Tja.. Sessions ... die sind auf der ganzen Webseite nicht im Einsatz. Warum? Weil sie für Webseite v.2.0 generell vorgesehen sind, als Teil einer Userverwaltung. Das ganze Projekt is eigentlich nix weiter als ein CMS für ein Internet-Radio OHNE PHPKIT oder ähnliche fertige Lösungen, alles Eigenproduktion, auch das Backend. In solchen Paketen is User-Verwaltung schon drin... ich will es halt selber machen... ich Blödmann ich


----------

