Waar moet deze regel?
In de volgende code:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<?php
$sql = mysql_query("SELECT * FROM gastenboek WHERE ip = '".mysql_real_escape_string($_SERVER['REMOTE_ADDR'])."' AND datum >=
NOW() - INTERVAL 1 DAY");
if (mysql_num_rows($sql) == 0) {
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
// Als er een veld niet ingevuld is
if (empty($_POST['naam']) || empty($_POST['bericht']) || empty($_POST['antispam']))
{
echo '<span style="color:red"><b>Je hebt niet alle velden ingevuld!<br />
You did not fill in all fields<br />
Sie haben nicht alle Felder benutzt.</b></span>';
} elseif (strlen($_POST['naam']) > 25 || strlen($_POST['bericht']) > 500)
{
echo '<span style="color:red"><b>De ingevulde velden hebben te veel karakters (naam max. 25, bericht max. 500)
<br />
You´ve used too many characters (name max. 25, message max. 500)<br />
Sie haben zu viele Buchstaben benutzt (Name max. 25, Nachricht max.500)</b></span>';
//Alleen als het antwoord geen 8 is!!!
} elseif (($antispam != '8') || ($antispam != 'acht'))
{
}else
{
// Als alle velden ingevuld zijn wordt het bericht gefilterd toegevoegd
mysql_query("INSERT INTO gastenboek (naam, bericht, datum, ip)
VALUES ('".trim(mysql_real_escape_string($_POST['naam'])).
"', '".trim(mysql_real_escape_string($_POST['bericht']))."', NOW(), '".$_SERVER['REMOTE_ADDR']."')") or die ("<b>Er is iets mis gegaan</b>");
echo '<span style="color:green"><b>Je reactie is succesvol toegevoegd!<br />
Your message has been succesfully posted.<br />
Ihren Nachricht ist hinzugefügt.</b></span>';
}
}
?>
$sql = mysql_query("SELECT * FROM gastenboek WHERE ip = '".mysql_real_escape_string($_SERVER['REMOTE_ADDR'])."' AND datum >=
NOW() - INTERVAL 1 DAY");
if (mysql_num_rows($sql) == 0) {
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
// Als er een veld niet ingevuld is
if (empty($_POST['naam']) || empty($_POST['bericht']) || empty($_POST['antispam']))
{
echo '<span style="color:red"><b>Je hebt niet alle velden ingevuld!<br />
You did not fill in all fields<br />
Sie haben nicht alle Felder benutzt.</b></span>';
} elseif (strlen($_POST['naam']) > 25 || strlen($_POST['bericht']) > 500)
{
echo '<span style="color:red"><b>De ingevulde velden hebben te veel karakters (naam max. 25, bericht max. 500)
<br />
You´ve used too many characters (name max. 25, message max. 500)<br />
Sie haben zu viele Buchstaben benutzt (Name max. 25, Nachricht max.500)</b></span>';
//Alleen als het antwoord geen 8 is!!!
} elseif (($antispam != '8') || ($antispam != 'acht'))
{
}else
{
// Als alle velden ingevuld zijn wordt het bericht gefilterd toegevoegd
mysql_query("INSERT INTO gastenboek (naam, bericht, datum, ip)
VALUES ('".trim(mysql_real_escape_string($_POST['naam'])).
"', '".trim(mysql_real_escape_string($_POST['bericht']))."', NOW(), '".$_SERVER['REMOTE_ADDR']."')") or die ("<b>Er is iets mis gegaan</b>");
echo '<span style="color:green"><b>Je reactie is succesvol toegevoegd!<br />
Your message has been succesfully posted.<br />
Ihren Nachricht ist hinzugefügt.</b></span>';
}
}
?>
gaat het om regel 23;
//Alleen als het antwoord geen 8 is!!!
} elseif (($antispam != '8') || ($antispam != 'acht'))
{
De bedoeling is simpel: antwoord 8 op de gestelde vraag.
Het probleem is echter dat er nu geen berichten geplaatst worden. Zet ik de regel hoger, of op een andere plaats (weet niet meer wat ik al allemaal geprobeerd heb) dan wordt het bericht geplaatst ongeacht wat er ingevuld wordt.
Kortom, wie kan er licht in deze duisternis brengen, waar en/of hoe moet ik deze regel toevoegen?
Dit leek mij een simpele manier tegen wat spam maar zelfs dit is kennelijk te moeilijk voor mij.
Gewijzigd op 21/11/2011 19:54:04 door Rob Sloep
Welk regelnummer? UBB-codes werken niet in je codeblok.
Regel 23 t/m 25, sorry.
Probeer eens || naar && te veranderen.
Het is niet "en" maar "of", oorspronkelijk stond er ook "or". || Heb ik zelf geprobeerd omdat dat elders in de code ook voorkomt.
Wel vond ik iets over "Preg_match();" waarmee een waarde te vinden is, het werkt voor mij echter verkeerd om.
Ik zie alleen: als de waarde gevonden is: true else false.
Ik zou moeten hebben: als de waarde NIET gevonden is: false (waarbij ik een melding kan geven) else true (programma gaat verder).
Mogelijk lees ik ergens overheen of begrijp ik het niet goed, iemand die mij hierbij kan helpen?
Rob Sloep op 22/11/2011 20:10:45:
Ik zie alleen: als de waarde gevonden is: true else false.
Ik zou moeten hebben: als de waarde NIET gevonden is: false (waarbij ik een melding kan geven) else true (programma gaat verder).
Ik zou moeten hebben: als de waarde NIET gevonden is: false (waarbij ik een melding kan geven) else true (programma gaat verder).
Ik begrijp het niet: bovenstaande is toch gelijk aan elkaar/vergelijkbaar?
Ik moet dat andersom hebben. Als het antwoord (een enkele waarde) op de vraag klopt moet het proces voortgaan en anders moet er een melding komen of desnoods niets gebeuren.
Dan draai de de vergelijk toch om of je wisselt de code om?
Alleen moet/wil ik dat dan wel in 1 code, dus iets als: als de waarde geen 8 is (bericht), anders doorgaan.
Feitelijk is dit de vraag ook waarmee ik begon. Dus of ik zoek te ver of ik snap het niet of de oplossing is nog niet langs gekomen.
Rob Sloep op 22/11/2011 21:37:12:
Dus of ik zoek te ver of ik snap het niet of de oplossing is nog niet langs gekomen.
De oplossing is langsgekomen. Blijven er twee mogelijkheden over ;-)
Ik heb nu deze codes geprobeerd:
} if(($antispam)!="8") {
echo 'Foutje';
}else
} if(($antispam)!=("8")) {
echo 'Foutje';
}else
Gevolg: krijg alleen maar "Foutje" en bericht wordt niet geplaatst, ook niet als er 8 ingegeven wordt.
Gewijzigd op 22/11/2011 21:53:29 door Rob Sloep
waar komt $antispam vandaan?
<input type="text" name="antispam" id="antispam" size="3">
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
ini_set('display_errors', 1); // 0 = uit, 1 = aan
error_reporting(E_ALL);
// rest
?>
ini_set('display_errors', 1); // 0 = uit, 1 = aan
error_reporting(E_ALL);
// rest
?>
Je gebruikt verder wel $_POST.
Declareer ik die dan niet hier?:
<input type="text" name="antispam" id="antispam" size="3">
in de regel:
if (empty($_POST['naam']) || empty($_POST['bericht']) || empty($_POST['antispam']))
wordt hij namelijk wel meegenomen.
Toevoeging op 22/11/2011 23:05:37:
Het werkt! :-)
Begrijpen doe ik het nog steeds niet, maar dat is nu even niet belangrijk, ooit hoop ik php door te krijgen.
Ik dank allen die meegedacht hebben, met name de stripfiguren, hartelijk voor deze hulp.
Hopelijk blijven de spam-bots nu buiten de deur.
Gewijzigd op 22/11/2011 23:00:11 door Rob Sloep
In een formulier geef je POST of GET mee. Daarmee haal je ook de informatie op om te verwerken. In het 1e deel van het script doe je dat wel, bij de vergelijking doe je dat in eens niet.
Je opmerking over POST/GET met betrekking tot de vergelijking snap ik niet echt (en echt niet).
Het script heb ik ooit eens ergens opgedoken en, simpele ziel als ik ben, kon ik gebruiken. Inmiddels rees de spam de pan uit en zocht ik daartegen een simpele oplossing en kwam uiteindelijk hier uit. Voor mij werkt het en ik begrijp het nu ook voldoende om eventueel in andere gastenboekjes te kunnen plaatsen.
Als je echter (simpele) verbetervoorstellen hebt, hou ik mij aanbevolen.