Avatar billede kourinsu Nybegynder
13. juni 2006 - 11:57 Der er 5 kommentarer og
1 løsning

Variable variabler?

Hej

Jeg er begyndt at modtage meget form-spam på min hjemmeside. Jeg er ret sikker på, det er automatiseret, da spammeren omgår mit JS validering af inputfelterne (bl.a. er intet navn indtastet). Jeg vil selvfølgelig gerne undgå denne form for spam. Dertil har jeg en snedig plan ;-)

Pt. bruger jeg variablen fra submitknappen, til at trigge den funktion, der smider formindholdet i databasen. Min snedige plan går ud på, at lave variablennavnet dynamisk. Jeg har tænkt mig, at lave navnet til en md5-hash af datoen.

Derefter skal jeg have lavet en dynamisk funktion, til at smide formindholdet i databasen. Jeg aner dog ikke, hvordan jeg laver en "variabel variabel". Mit kode ser sådan ud (med alt lir fjernet):

<?
if(isset($_POST['spamfree']))
  {
  // valider og smid i database 
  }
?>


<form method="post" action="<? print $_SERVER['PHP_SELF']; ?>" name="send">

<input name="<? print md5(date(d)); ?>" type="submit" value="Udbyd din visdom">
       
</form>

Hvordan får jeg variablen "spamfree" til at være en dynamisk md5-hash af datoen? (Jeg udvider den nok, så den godtager dags dato og datoen fra dagen før, så evt. personer, der begynder at skrive inden midnat og poster efter, ikke ryger i en fælde.)

Mvh.
Kourinsu
Avatar billede iss Novice
13. juni 2006 - 12:04 #1
if(isset($_POST[md5(date(d)]) || $_POST[md5(date(d)-date(1)]))...

Men hvorfor ikke bare sætte den som en hidden value?
Avatar billede kourinsu Nybegynder
13. juni 2006 - 12:30 #2
Tak, det virkede med lidt tweaking:
if(isset($_POST[md5(date(d))]) || $_POST[md5(date(d)-1)])

Troede faktisk, det ville være meget mere bøvlet!

Jeg overvejede også at sætte en hidden... jeg kan jo også bare banne ip eller lave serverside-validering af inputfelterne. Dog har jeg længe ledt efter en undskyldning, for at arbejde med variable variabler :-) Tror også denne løsning er mere langtidsholdbar. Det tager jo kun et kig i kildekoden at finde de hidden-values, det kræver at poste.

Smid et svar, buddy :-)
Avatar billede fangel Nybegynder
13. juni 2006 - 20:04 #3
everytime you forget to pad a string, god kills a kitten..

det er:  date("d");
ikke:      date(d);

den eneste grund til at det virker er fordi du kører med for lavt error-reporting niveau.. ;)

_Alle_ strenge skal være omgivet af endten "-er eller '-er, ellers vil de blive opfattet som konstanter eller andre tokens - aka ikke strenge.. PHP, hvis den møder en udefineret konstant, går bare ud fra at du egenligt mente at det skulle være en streng, og konvertere for dig.. - men på et tidspunkt vil man faktisk bruge en konstant, og så fejler det...

-fangel
Avatar billede kourinsu Nybegynder
13. juni 2006 - 20:32 #4
Du har jo ganske ret. Jeg bøjer mig i støvet. Jeg har vist været væk fra php-gamet i for lang tid. Da jeg var ung og viril, ville jeg aldrig have lavet den fejl  :-)
Avatar billede iss Novice
13. juni 2006 - 23:41 #5
Nej tak...
Avatar billede kourinsu Nybegynder
14. juni 2006 - 08:26 #6
Okay, men mange tak for hjælpen.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester