我编写了一个脚本,该脚本检查通过文本区域接收的名称的批量输入,并忽略数据库中已经存在的所有值。如果您只输入一个重复的名称,它将起作用。如果输入两个或多个,它将​​过滤掉第一个重复的名称,将其余名称视为唯一名称,并将其插入数据库中。我不知道为什么。

首先,这是在脚本另一部分中构建的数组。它是通过数据库查询生成的:

Array
(
    [0] => john
    [1] => peter
    [2] => max
    [3] => jake
)


该数组称为$ onlyHandles。然后这是脚本:

if((isset($_POST['extract']) && !empty($_POST['extract']))){
    $handles = trim($_POST['extract']);
    $handles = explode("\n", $handles);

        if(count($handles)>200){
            echo 'error';
            exit(1);
        }

        foreach($handles as $handle) {
            $handleRep = strtolower(str_replace('@','',$handle));
            $handleClean = str_replace(str_split('\\/:*?&"<>=+-#%$|'), ' ', $handleRep, $count);

                if ($count > 0) {
                    echo 'error';
                    exit(1);
                }
                else{

                    if (in_array($handleClean, $onlyHandles)){
                        $delmessage .= "<p>".$handleClean." is already in your list.</p>";
                    }
                    else{
                        $sqlIns = "INSERT INTO...blah blah blah)";
                        $resultIns = mysql_query($sqlIns);
                        $resInsArr[] = array($resultIns);

                    }
                }
        }
        $countresIns = count($resInsArr);
            if ($countresIns > 0){
                $delmessage .= "<p>User(s) added to list succesfully!</p>" ;
            }
}


现在,如果您在文本区域中输入“ john”,它将大喊该名称已存在。如果输入“ john”和“ max”,它将省略john并添加max。

任何帮助将不胜感激。

附言关于查询格式,我知道,我知道,谢谢!

最佳答案

我想给U一些关于如何实现它的想法:


替换第一行:

if((isset($ _ POST ['extract'])&&!empty($ _ POST ['extract']))){


通过

if((!empty($_POST['extract']))){


因为!empty已经为U保证了isset


我在玩一些特殊字符


您还可以使用正则表达式的功能替换不需要的字符
在更换:

第12行:$handleClean = str_replace(str_split('\\/:*?&"<>=+-#%$|'), ' ', $handleRep, $count);

通过:

$handleClean = preg_replace("/\[\/:\*?&\"<>=\+-#%\$\|\]*/", ' ', $handleRep, $count);


在Ur For-Loop中,如何重构以下行:


第2行:$handles = trim($_POST['extract']);

通过(修剪不是必须的hier)

$handles = $_POST['extract'];



第11行:$handleRep = strtolower(str_replace('@','',$handle));

通过

$handleRep = trim(strtolower(str_replace('@','',$handle)));

嘿;-),

您还应该添加一些print_r(...)来调试每个步骤

关于php - PHP foreach循环弄乱了我的in_array函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35021852/

10-11 15:07