Avatar billede compac Seniormester
22. september 2010 - 23:17 Der er 10 kommentarer og
1 løsning

Validering af variable fra database og html-input

Jeg har en formular hvor jeg skal indtaste en startdato.
Slutdatoen ligger i en database og det skal så undersøges om startdatoen er mindre end slutdatoen. Der skal komme en advarsel hvis det er tilfældet.
Min kode ser således ud:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<script type="text/javascript">
function tjek()
{
if (document.skriv.forste.value == ""){
alert ("Du skal udfylde første.");
document.skriv.forste.focus();
return false;
if (document.skriv.forste.value) < (document.skriv.sldate.value){
alert ("Første skal være større end sidste.");
document.skriv.forste.focus();
return false;
}
</script>
</head>
<?php
include("conn.php");
$sql = "SELECT slutdato FROM $arrangements";
$result = mysql_query($sql) or die(mysql_error());
$number = mysql_num_rows($result);
while($row=mysql_fetch_array($result))  {
  list($year, $month, $day) = split('[-.]', $row['slutdato']);
  $sldate = "$day-$month-$year"; 
if ???? et-eller-andet?       
}           
?>
<body bgcolor="FFCC00">
<form name="skriv" method="POST" action="editanerkend.php"onSubmit="return tjek();">
Indtast startdato:
<input type="text" name="forste" size="20">
<input type="submit" name="save" value="Opret">
</form>
</body>
</html>

Jeg er godt klar over, at det kan klares med en "order by" i sql-sætningen, men jeg er interesseret i at se princippet for at få det valideret inden man går videre til "editanerkend.php" i form-sætningen. Dette også af hensyn til andre situationer hvor "order by" ikke kan anvendes.
Avatar billede danco Nybegynder
23. september 2010 - 00:07 #1
I php kan du sammenligne to datoer ved at benytte strtotime() funktionen. Så koden herunder vil sammenligne 2 datoer i en if struktur.

$exp_date = "2006-01-16";
$today = strtotime(date("Y-m-d"));
$expiration_date = strtotime($exp_date);

  if ($expiration_date > $today) {
    $valid = "yes";
  } else {
    $valid = "no";
  }
Avatar billede showsource Seniormester
23. september 2010 - 00:08 #2
Først og fremmest, så brug tre dropdowns til dag, måned og år.
Derefter laver du et check på dato med checkdate()
Og derefter sql i stil med:

SELECT feltnavn FROM tabel WHERE slutdato >= ".postet dato i standardformat." LIMIT 1

Og hvis ikke query gi'r nul rows, ja, så dutter det ikke.

Du kan godt starte med at hente nyeste dato, og så bruge den i noget javascript, men det skal du aldrig stole på !
Avatar billede compac Seniormester
23. september 2010 - 17:44 #3
Hvordan så hvis brugeren får valgt en forkert dato,der ikke opfylder kriteriet (startdato må ikke være mindre end slutdato) -eller slet ikke vælger nogen dato.

På hvilken måde skal jeg så udforme den alertbox, som skal give ham meddelelsen?
Avatar billede danco Nybegynder
23. september 2010 - 18:14 #4
Det kommer lidt an på hvilken løsning du vælger.

Hvis du vælger den jeg smed længere oppe så kan du jo i dit PHP smide noget javascript med en alert().
Hvis du vælger den showsource beskrev kunne det se sådan her ud:

if(mysql_num_rows($rs) == 0) {
  //Javascript med alert
}
Avatar billede showsource Seniormester
23. september 2010 - 20:42 #5
En anden mulighed er også at bruge sessions.
Hvis en bestemt session er sat, så vis den, og slet den umiddelbart efter.
http://lottostatistik.dk/?page=kontakt får du en besked hvis feltet med besked er tomt.
Avatar billede compac Seniormester
26. september 2010 - 16:27 #6
Jeg mener, at problemet er, at sammenligningen ikke kan foretages før inputsætningen er udført. Da php-delen så vidt jeg ved udføres før html-delen, kan det ikke lade sig gøre med denne opbygning af scriptet.
Hvad er det for en session du hentyder til showsource?
Avatar billede showsource Seniormester
26. september 2010 - 20:14 #7
Du er på rette vej med at php afvikles før output til browser.
Den kode du viser, er noget javascript.

<?php
session_start();
$_SESSION["besked"] = "En besked !";

?><html><head></head>
<body>

<?php

if(isset($_SESSION["besked"])) {

echo nl2br(htmlentities($_SESSION["besked"]));
unset($_SESSION["besked"]):

}
?>
</body></html>
Avatar billede compac Seniormester
26. september 2010 - 22:18 #8
OK. For at det hele til at køre, hvordan skal jeg så sætte min inputsætning og databaseforespørgsel ind? (se et øjeblik bort fra datoformatteringen).

echo '<input type="text" name="forste" size="20">';


$sql= SELECT slutdato FROM tabel WHERE slutdato >= '$forste' LIMIT 1;
$result = $result=mysql_query($sql) or die(mysql_error());
if(mysql_num_rows($result) == 0) {
????

Hvordan skal jeg anbringe mine sessions?
Avatar billede showsource Seniormester
27. september 2010 - 11:24 #9
ehh, session_start() skal jo som bekendt være det første i koden.

Og hvis mysql_num_rows($result) IKKE er 0, skal session sættes.
Avatar billede compac Seniormester
20. november 2010 - 14:28 #10
Takker - læg et svar
Avatar billede showsource Seniormester
20. november 2010 - 20:08 #11
Øhh mig ?
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