Avatar billede Karsten Petersen Nybegynder
23. maj 2007 - 22:54 Der er 8 kommentarer og
1 løsning

, i stedet for . i kommatal

Jeg er ved at lave en formular i Dreamweaver, hvor man bl.a. kan taste et kommatal ind. Når det bliver gemt i databasen vil f.eks. 4,35 blive gemt som 4.00
Hvis man skriver 4.35 bliver det gemt som 4.35

PHP forstår altså tilsyneladende ikke den danske måde at lave kommatal på.

Her er lidt kode:
<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "")
{
  $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;

  $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

  switch ($theType) {
    case "text":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;   
    case "long":
    case "int":
      $theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case "double":
      $theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL";
      break;
    case "date":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;
    case "defined":
      $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
      break;
  }
  return $theValue;
}
}

$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
  $editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "graesningsareal")) {

$tal = $_POST['Ha'];
$Ha = number_format($tal, 2, ',', '.');

  $insertSQL = sprintf("INSERT INTO arealer (brugerID, areal_adresse, areal_postnr, Kommune, markbloknr, Ha, hegn, organic, naturtype, adg_forhold, fodring, kalveskjul, graesnkrav, periode, MVJ, andet) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)",
                      GetSQLValueString($_POST['ejerID'], "int"),
                      GetSQLValueString($_POST['areal_adresse'], "text"),
                      GetSQLValueString($_POST['areal_postnummer'], "int"),
                      GetSQLValueString($_POST['kommune'], "int"),
                      GetSQLValueString($_POST['markbloknr'], "text"),
                      GetSQLValueString($Ha, "double"),
                      GetSQLValueString($_POST['Hegnstype'], "int"),
                      GetSQLValueString(isset($_POST['eco']) ? "true" : "", "defined","'Y'","'N'"),
                      GetSQLValueString($_POST['naturtype'], "int"),
                      GetSQLValueString($_POST['adg_forhold'], "text"),
                      GetSQLValueString(isset($_POST['fodring']) ? "true" : "", "defined","'Y'","'N'"),
                      GetSQLValueString(isset($_POST['kalveskjul']) ? "true" : "", "defined","'Y'","'N'"),
                      GetSQLValueString($_POST['graesnkrav'], "text"),
                      GetSQLValueString($_POST['periode'], "text"),
                      GetSQLValueString(isset($_POST['mvj']) ? "true" : "", "defined","'Y'","'N'"),
                      GetSQLValueString($_POST['Andet'], "text"));


  mysql_select_db($database_graesning, $graesning);
  $Result1 = mysql_query($insertSQL, $graesning) or die(mysql_error());

  $insertGoTo = "default.php";
  if (isset($_SERVER['QUERY_STRING'])) {
    $insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
    $insertGoTo .= $_SERVER['QUERY_STRING'];
  }
  header(sprintf("Location: %s", $insertGoTo));
}

Jeg har modificeret DW's kode, og sat number_format() ind, men det virker altså ikke. Er der nogen der kan se hvad der går galt?
Avatar billede erikjacobsen Ekspert
23. maj 2007 - 23:15 #1
Funktionen number_format kan ikke bruges til andet end at skrive noget korrekt ud til brugeren, ikke den anden vej. Men du kan bare gøre det med http://php.net/str_replace
Avatar billede Karsten Petersen Nybegynder
23. maj 2007 - 23:37 #2
Det virker desværre ikke helt.
Men brugeren taster jo også "rigtigt" - altså med et komma og ikke et punktum.

PHP vil kun gemme decimalerne i MySQL databasen hvis de er skrevet med et . imellem
Hvis man bruger et komma smider den decimalerne væk.

Jeg har prøvet at taste decimaltallet direkte ind i MYSQL databasen, og der godtager den uden problemer tal med komma. Det må altså være PHP som ikke forstår at sætte det rigtigt ind i databasen. Det var derfor jeg gik ud fra man kunne konvertere bruger inputtet på en eller anden måde...

Kan man definere doubleval() til at bruge , i stedet for . ?
Avatar billede erikjacobsen Ekspert
24. maj 2007 - 00:19 #3
Nej, du skal lave "," om til ".", fx med str_replace.
Avatar billede lolman Nybegynder
24. maj 2007 - 07:35 #4
$string = "7,53";
$string = str_replace(",",".",$string)
echo $string;
Det er hvad Erik mener. (tror jeg nok)
Avatar billede Karsten Petersen Nybegynder
24. maj 2007 - 08:04 #5
Jeps, nu virker det!

Jeg havde skrevet:
$string = str_replace(".",",",$string)

i stedet for:
$string = str_replace(",",".",$string)

Jeg havde altså byttet om på . og , - en ikke helt uvæsentlig fejl.
Smid et svar, og I får point begge to...
Avatar billede erikjacobsen Ekspert
24. maj 2007 - 08:50 #6
Ingen point til mig, tak.
Avatar billede lolman Nybegynder
27. maj 2007 - 15:43 #7
jo tak. :)
Avatar billede Karsten Petersen Nybegynder
27. maj 2007 - 21:32 #8
lolman: Du må lige læggeet svar så ;-)
Avatar billede lolman Nybegynder
28. maj 2007 - 11:13 #9
aha smart ;)
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