Formular Reloadsperre einrichten?
Keinnickfrei
- php
Hallo,
ich habe hier einen Formailer, dem würde ich gerne eine Reloadsperre von 30 Minuten verpassen.
<form action="beitraege.php" method="post">
<table border="0">
<tr>
<td>
<font color="#148DC1" face="Arial" size="2">Kategorie:</font>
</td>
<td>
<select name="kategorie">
<?php
$res = $user->queryf("SELECT * FROM ".DB_PREF."kategorien ORDER BY name");
while($row = $res->fetch_array(MYSQLI_ASSOC)) {
?>
<option value="<?php echo $row['id']; ?>"><?php echo $row['name']; ?></option>
<?php
}
?>
</select>
</td>
</tr>
<tr>
<td>
<font color="#148DC1" face="Arial" size="2">Nickname:</font>
</td>
<td>
<input type="text" name="nick" maxlength="15"></input>
</td>
</tr>
<tr>
<td>
</td>
<td>
<textarea id="textarea" type="text" name="entry" maxlength="500" onkeyup="checkLen()"></textarea> verbleibende Zeichen:
<input type="text"name="zaehler"value="500"size="3"><br>
</td>
</tr>
<tr>
<td colspan="2" align="center">
<input id="startbox_button" type="submit" value="">
</td>
</tr>
</table>
</form>
Die beitraege.php sieht so aus:
<?php
require_once 'lib/config.php';
require_once 'lib/fehlertabelle.php';
require_once 'lib/functions.php';
require_once 'class/mysql.class.php';
require_once 'class/user.class.php';
require_once 'class/text.class.php';
$user = new user(DB_HOST, DB_USER, DB_PASS, DB_NAME);
$needLogged = 0;
require_once 'lib/loggcheck.php';
//PHP PART
$error = '';
if(isset($_GET['action'], $_GET['id']) && $_GET['action'] == 'thumb' && is_numeric($_GET['id'])) {
$x = 0;
if($user->getCount("thumbs WHERE ip = '".$_SERVER['REMOTE_ADDR']."' AND beitragid = ".$user->real_escape_string($_GET['id'])) != 0) {
$x++;
}
if(LOGGED && $user->getCount("thumbs WHERE ip = '".$_SERVER['REMOTE_ADDR']."' AND beitragid = ".$user->real_escape_string($_GET['id'])) != 0) {
$x++;
}
if($user->getCount("beitraege WHERE id = ".$user->real_escape_string($_GET['id'])) != 1) {
$x++;
}
if($x===0) {
$user->queryf("INSERT INTO ".DB_PREF."thumbs (beitragid, ip) VALUES (%u, '%s')", $_GET['id'], $_SERVER['REMOTE_ADDR']);
header("Location: beitraege.php");
}
}
if(isset($_POST['entry'], $_POST['kategorie'], $_POST['nick'])) {
$user->queryf("INSERT INTO ".DB_PREF."beitraege (creator, text, kategorie, timestamp, ip, nick) VALUES (%u, '%s', %u, %u, '%s', '%s')", $userid, $user->getSetting('starttext')." ".htmlspecialchars($_POST['entry']), $_POST['kategorie'], time(), $_SERVER['REMOTE_ADDR'], $_POST['nick']);
header('Location: index.php');
}
//HTML PART
ob_start();
include("html/beitraege.php");
$pageCONTENT = ob_get_contents();
ob_end_clean();
//SEITE AUSGEBEN
include("lib/layout.php");
?>
Wie man sieht wird in der Datenbank-Tabelle "beitrage" die Ip und ein timestamp eingetragen, kann man da etwas machen? Habe davon wenig ahnung und würde mich sehr über hilfe freuen.
Danke!!!
Hello,
ich habe hier einen Formailer, dem würde ich gerne eine Reloadsperre von 30 Minuten verpassen.
Guckst Du mal unter
http://selfhtml.bitworks.de/snippets/clickcounter/
Ist sicherlich nichts besonderes, aber ein Denkansatz.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
hallo,
$user = new user(DB_HOST, DB_USER, DB_PASS, DB_NAME);
Achne, wieder einer, der DB-Credentials in Konstanten umsetzt. Trenne die besser sauber vom Code, Credentials sind Konfiguration, in den Code hingegen gehört das DB-Handle.
Reloadsprerre: Du kannst verhindern, dass ein Formular mehrfach submitted wird, indem Du dem Formular eine eindeutige ID vergibst und diese ID gleichzeitig auf dem Server speicherst. Lösche diese ID beim Submit, das Löschen geht nur einmal, fertig.
IP speichern? Bedenke, dass die IP keine personenbezogene Kennung darstellt und überdies veränderlich ist: Mit einer geeigneten Proxy-Konfiguration könnte jeder Submit mit einer anderen IP-Adresse daherkommen.
Eine personenbezogene Reloadsperre, etwa für 30 Minuten, ist nicht möglich. Du könntest vielleicht einen Cookie setzen, aber der kann vom Benutzer auch gelöscht bzw. gar nicht erst gesendet werden.
Gus
Hello,
Reloadsprerre: Du kannst verhindern, dass ein Formular mehrfach submitted wird, indem Du dem Formular eine eindeutige ID vergibst und diese ID gleichzeitig auf dem Server speicherst. Lösche diese ID beim Submit, das Löschen geht nur einmal, fertig.
Das ist nicht ganz richtig.
Die ID des Formulares muss eben während der ganzen "Realod-Sperre" gespeichert bleiben. Damit wäre dasselbe Formular nicht mehrfach auswertbar auf dem Server, aber durchaus x-fach postbar.
Außerdem wäre nicht sichergestellt, dass das gleiche Formular nicht mehrfach angefordert werden würden vom selben Client. Die ausgelieferte Version würde dann aber ohne weitere Maßnahmen jedes Mal eine neue ID erhalten, wäre also beim Repost jedes Mal ein anderes...
Die einzigen Chancen die man hat sind
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg