有时不保存特殊字符

时间:2019-06-12 15:22:31

标签: php

我有一个奇怪的问题,目前我不知道如何解决。我希望这里有人可以帮助我。 我会尽力解释,但这可能有点一般。

我们有一个运行在PHP和MySQL上的销售系统,这两个版本都很老。你知道的,如果它还没有坏,那就不要修复...;-)

现在,我们看到了一些前所未有的奇怪行为。因为我们是丹麦公司,所以我们使用特殊字符æ,øogå,并且还出售给德国并使用¨符号。 我们看到的行为是,我们的客户突然将姓名命名为在表壳上,“BrørupTrælast”更改为“ Br”。但是,并非每次都这样做,也不是所有案例都卖给该客户。可能只有一两个。

我们在其他国家/地区设有部门,而且还有会说英语的员工,因此并非所有内容都以丹麦语运行。但是我们已经有这些部门几个月和几年了,而这个问题才在几周前发生。一个很大的问题是,最终用户不知道它何时发生,因此他们无法告诉我是否单击了特定按钮,并且员工花几天的时间也看不到错误。

我曾试图挑衅它做“这件事”,但还没有为此感到运气。我也尝试过我们说英语的员工电脑,但没有。我尝试制作一个以斯洛文尼亚语语言运行的虚拟Windows 10,但仍然无法正确更改名称。 我什至尝试对斯洛文尼亚某位同事的计算机进行远程控制,并且该名称保存了所有特殊字符。

这让我有些沮丧,因为我不知道下一步该怎么做,所以我可以找到根本的诅咒。这就是我现在站在这里的地方,并为您的天才寻求帮助:-)

该如何解决以及如何解决?

-------------更新---------------

首先,代码收集字段并将它们放入一些数组中。稍后,它将使用数组中的字段名称和页面中的数据填充查询。

        // Init tilbud 
    $keys = array_keys($_POST);

    $bogstav;
    $keygroup = array();
    $keygroup[0] = array();  // Field 1-99
    $keygroup[1] = array();  // Field 100-199
    $keygroup[2] = array();  // Field 200-299
    $keygroup[3] = array();  // Field 300-399
    $keygroup[4] = array();  // Field 400-499
    $keygroup[5] = array();  // Field 500-599
    $keygroup[6] = array();  // Field 600-699

    for ($i=0; $i<count($keys); $i++) {
        if (eregi("([R]?)([0-9]{1,3})([A-Z]?)", $keys[$i], $regs)) {
            $index = sprintf('%03d', $regs[2]);
            $keygroup[substr($index,0,1)][] = $keys[$i];
            //Vi skal lige have tjekket og gemt hvilket bogstav felterne starte med
            if (strtoupper(substr($keys[$i],0,1)) == "R") {
                $bogstav = "R";
            } elseif (strtoupper(substr($keys[$i],0,1)) == "E") {
                $bogstav = "E";
            }
        } else {
            $keygroup[0][] = $keys[$i];
        }
    }

for ($i=0; $i<=6; $i++) {
            if (sizeof($keygroup[$i])) {
                // Check for existing fields
                $dbfields = mysql_query('SHOW COLUMNS FROM `ordre'.$i.'`');
                $dbcols = mysql_num_rows($dbfields);

                $dbc = array();
                for ($j=0; $j<$dbcols; $j++) {
                    $row = mysql_fetch_assoc($dbfields);
                    $dbc[$j] = $row['Field'];
                }

                $query = array();

                for ($j=0; $j<count($keygroup[$i]); $j++) {
                    if (!in_array($keygroup[$i][$j], $dbc)) {
                    }

                    //Håndtere felter, som skal være int men samtidig udfyldet. Er de ikke det, sætte de lig med 0
                    if ($keygroup[$i][$j] == "r591") {
                        if ($_POST[$keygroup[$i][$j]] == "") {
                            $_POST[$keygroup[$i][$j]] = "0";
                        }
                    }

                    if ($keygroup[$i][$j] == "r531d") {
                        if ($_POST[$keygroup[$i][$j]] == "") {
                            $_POST[$keygroup[$i][$j]] = "0";
                        }
                    }

                    if ($keygroup[$i][$j] == "r532d") {
                        if ($_POST[$keygroup[$i][$j]] == "") {
                            $_POST[$keygroup[$i][$j]] = "0";
                        }
                    }

                    if ($keygroup[$i][$j] == "r533e") {
                        if ($_POST[$keygroup[$i][$j]] == "") {
                            $_POST[$keygroup[$i][$j]] = "0";
                        }
                    }

                    if ($keygroup[$i][$j] != "r70") {
                        $_POST[$keygroup[$i][$j]] = strtr($_POST[$keygroup[$i][$j]], ',', '.');
                    }
                    $query[] = '`'.$keygroup[$i][$j].'` = \''.addslashes($_POST[$keygroup[$i][$j]]).'\'';
                }

                $save_time = "UPDATE ordre SET timestamp = NOW() WHERE id ='".$tilbudsnummer."'";
                mysql_query($save_time) or die(mysql_error());

                // Update values to database 
                $ordrequery = mysql_query('UPDATE `ordre'.$i.'` SET '.implode(', ', $query).' WHERE tilbudsnummer=\''.$tilbudsnummer.'\'') or die(mysql_error());
            }
        }

这是更新查询,发生错误:

UPDATE `ordre0` SET `submitmenu13` = 'Indgåede aftaler journal / logbog', `thispage` = '1', `kunde_hidden` = '3693', `bygherre_hidden` = '', `kunde_id` = '3693', `r14a` = '31891027', `r9` = 'S', `r14` = '74775024', `navn2` = '', `r15` = '', `r11` = 'Bygmestervej 2. ', `r10` = 'Bjarke S', `adresse2` = '', `r10a` = 'mail@sorensen-byg.dk', `r20a` = '6240', `r20b` = 'Løgumkloster',  `r10b` = '', `r20e` = 'DK', `r10c` = '21691545', `r4` = '2019.04.29', `r8` = 'Ovennævnte kunde er nu forsikret for DKK 375.000.-oplyst 4/7-2018', `r5` = '1', `r5a` = '2019', `r2` = '2019.04.29', `r6` = '', `r21` = '', `r18` = 'Flemming Kj', `r22` = '', `bygNavn2` = '', `r23` = '', `r19` = 'Forpagtervej 2. Oksenvad', `r23a` = '', `bygAdresse2` = '', `r23b` = '', `r20c` = '6560', `r20` = 'Sommersted', `department` = '1', `r20d` = '', `r19a` = '1', `r9a` = '', `r24` = 'Oprindelig: 497023 R0', `projektmedlem_1_id` = '74418', `projektmedlem_1_stamdataID` = '9', `projektmedlem_1_pl` = '11863', `projektmedlem_1_forv_start` = '00-00-0000', `projektmedlem_1_forv_slut` = '00-00-0000', `projektmedlem_1_procent` = '0', `projektmedlem_2_pl` = '', `projektmedlem_2_forv_start` = '00-00-0000', `projektmedlem_2_forv_slut` = '00-00-0000', `projektmedlem_2_procent` = '', `counter` = '2' WHERE tilbudsnummer='25319'

r9字段应为“Sørensen”,而r10字段应为“ BjarkeSørensen”。但是然后看到r20b,它说出“Løgumkloster”,这是正确的名称。当内爆部分相同时,如何在2个字段而不是第三个字段中犯错误?稍后在r18的查询中,它应该是“ FlemmingKjær”,它来回跳跃的方式很奇怪。

0 个答案:

没有答案