首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >php ()和可选字段

php ()和可选字段
EN

Stack Overflow用户
提问于 2016-09-12 00:19:17
回答 2查看 194关注 0票数 2

两件小事:

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

代码语言:javascript
复制
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();}
  1. 如何在表单的同一页中以echo打印脚本内容?

如果我删除脚本"Se vuoi modificare il campo nome.“在同一页中打印,但数据库填充错误信息。好像控制脚本只用于打印它,而不阻塞用户。这就好像控制脚本只会打印回显中包含的短语,我如何才能修复它呢?

  1. 可选字段的脚本

如果(strlen($nome) ==“”){$_POST‘’nome‘= $nome_vecchio;}

不起作用:我希望如果用户想要更新的是名称,他必须插入一个包含2个字母和20个字母的单词,但是如果他不想更新该字段,他也不能填充它,而且数据库不应该覆盖任何内容,保留以前输入的名称(例如,在注册阶段),我如何做到这一点?

编辑:

谢谢您的回答,我尝试做@Michael方法和@Valkyrurr方法,但什么也没有做。

  1. 剧本: 标题(‘Location:“errore.php”)

不管用!在errore.php页面中,我指出:

代码语言:javascript
复制
<?php
// Includo la connessione al database
require('config.php');

if(!isset($_SESSION['login']))
{ header('Location: login.php'); exit; }

echo('Se vuoi modificare il campo nome, assicurati che lo 
             stesso sia superiore ai 2 caratteri ed inferiore ai 20!<br>');
?>

但它的比较:访问拒绝!错误403..。

和2.这个脚本:

代码语言:javascript
复制
$nome = trim($nome); 
if (strlen($nome) == 0) {
$_POST['nome'] = $nome_vecchio;}

用"“覆盖数据库中的字段。

为了更好地解释我在代码上的工作方式,我把我写的所有东西都发出去了,也许这是我从未见过的另一个错误,或者我从来没有像一个错误一样考虑过!我希望你能听懂我的意面英语!:)

代码语言:javascript
复制
    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();}
   }

哪里不对?

EN

回答 2

Stack Overflow用户

发布于 2016-09-12 01:06:22

试试看:

  1. 对于第二个if()语句,在echo exit()之前,发出一个重定向调用。就像这样,header('Location: "script_name_here.php"')
  2. 条件中的strlen()返回一个int,因此将其与0而不是""进行比较。就像这样,if(strlen($nome) == 0){ }
票数 1
EN

Stack Overflow用户

发布于 2016-09-12 05:20:29

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

如果脚本是单独的,也可以按照@Valkyrurr的建议进行重定向。您需要提供一种方法来指示错误。

正如其他地方所提到的,strlen()没有被正确地使用。我建议你

代码语言:javascript
复制
$nome = trim($nome); // Make sure there are no extra spaces at beginning or end
if (strlen($nome) == 0) {
    $_POST['nome'] = $nome_vecchio;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39441898

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档