php echo exit()和可选字段

php echo exit()和可选字段,php,mysql,echo,exit,Php,Mysql,Echo,Exit,两件小事: 我使用此PHP控制脚本将可选字段更新到数据库中: if(strlen($nome) == ""){$_POST['nome'] = $nome_vecchio; } elseif(strlen($nome) < 2 || strlen($nome) > 20 ) {echo('Se vuoi modificare il campo nome, assicurati che lo stesso sia superiore ai

两件小事:

我使用此PHP控制脚本将可选字段更新到数据库中:

if(strlen($nome) == ""){$_POST['nome'] = $nome_vecchio; }
elseif(strlen($nome) < 2 || strlen($nome) > 20 )
    {echo('Se vuoi modificare il campo nome, assicurati che lo 
         stesso sia superiore ai 2 caratteri ed inferiore ai 20!</br>'); exit();}
用“”覆盖我的数据库中的字段

为了更好地解释我在代码上的工作方式,我把我写的全部都寄给你,也许这是我从未见过的另一个错误,或者我从来没有考虑过像一个错误!我希望你能理解我的意大利面英语!:)

if(isset($\u POST['modifica\u dati']))
{
$nome=$_POST['nome'];
$query\u nome=mysql\u query(“从Uteni中选择nome,其中id=”。$\u会话['login']。“'LIMIT 1”);
$row\u nome=mysql\u fetch\u数组($query\u nome);
$nome_vecchio=$row_nome['nome'];
$nome=trim($nome);//确保开头或结尾没有多余的空格
如果(strlen($nome)==0{$_POST['nome']=$nome_vecchio;}
如果(斯特伦($nome)<2 |斯特伦($nome)>20)
{
标题('位置:“error.php')
echo('Se vuoi modificare il campo nome,assiciurati che lo
上一级ai 2克拉下一级ai 20!
');退出();} 如果(是数字($nome)) {echo('Se vuoi modificare il campo nome,assiciurati che lo 没有内部数字!
”;退出();} //不含卡拉特和诺西维的验证 elseif(!preg_match('/^[A-Za-z\'-]+$/i',$nome)){ echo“Il nome contiene caratteri non-ammessi!
”;退出();} }
哪里不对?

试试这些:

  • 对于第二个
    if()
    语句,在
    echo
    exit()
    之前,发出重定向调用。与此类似,
    header('Location:'script\u name\u here.php')
  • 条件中的
    strlen()
    返回一个int,因此将其与
    0
    进行比较,而不是与
    进行比较。像这样,
    if(strlen($nome)==0{}

  • 在表单页面上显示消息可以通过两种方式完成。如果使用处理表单的相同脚本显示表单,则可以将消息放入变量中,稍后再显示。当然,您需要额外的代码来防止数据库被更改(可能像添加一个
    $\u POST['nome']=$nome\u vecchio;
    而不是退出

    如果您的脚本是独立的,那么@Valkyrurr建议的重定向也是可能的。您需要提供一种指示错误的方法

    正如其他地方提到的,
    strlen()
    没有正确使用

    $nome = trim($nome); // Make sure there are no extra spaces at beginning or end
    if (strlen($nome) == 0) {
        $_POST['nome'] = $nome_vecchio;
    }
    
    strlen()
    函数返回int,而不是空字符串。我也尝试过if($nome==”){$\u POST['nome']=$nome\u vecchio;}和相同的结果…正确的方法是
    if((int)strlen($nome)<1)
    。我尝试过if((int)strlen($nome)<1)但它用“”)覆盖数据库,而不是写入包含的名称。
    $nome = trim($nome); 
    if (strlen($nome) == 0) {
    $_POST['nome'] = $nome_vecchio;}
    
        if(isset($_POST['modifica_dati'])) 
        {
    $nome = $_POST['nome']; 
        $query_nome =  mysql_query("SELECT nome FROM utenti WHERE id = '" .             $_SESSION['login'] . "' LIMIT 1");  
        $row_nome = mysql_fetch_array($query_nome);
        $nome_vecchio = $row_nome['nome'];
         
        $nome = trim($nome); // Make sure there are no extra spaces at beginning or end
        if(strlen($nome) == 0){$_POST['nome'] = $nome_vecchio; }
        if(strlen($nome) < 2 || strlen($nome) > 20 )
            {
              header('Location: "errore.php"')
             echo('Se vuoi modificare il campo nome, assicurati che lo 
                 stesso sia superiore ai 2 caratteri ed inferiore ai 20!</br>');      exit();} 
            
        if (is_numeric($nome)) 
            {echo('Se vuoi modificare il campo nome, assicurati che lo 
                 stesso non cntenga numeri al suo interno!<br>'); exit();}   
                 
        // verifico che il nome non contenga caratteri nocivi
        elseif (!preg_match('/^[A-Za-z \'-]+$/i',$nome)) {
            echo 'Il nome contiene caratteri non ammessi!<br>'; exit();}
       }
    
    $nome = trim($nome); // Make sure there are no extra spaces at beginning or end
    if (strlen($nome) == 0) {
        $_POST['nome'] = $nome_vecchio;
    }