使用mysqli发布表单

时间:2016-06-06 14:46:49

标签: php mysql forms post mysqli

我创建了一个使用php和mysqli的网页,我可以在其中发送和编辑MySQL条目而不会出错。条目有标题和日期。当我尝试更改NULL的日期时,会出现此问题。

  • 创建日期条目:Works
  • 创建没有日期的条目:Works
  • 使用日期编辑条目:Works
  • 编辑日期为NULL的条目:Works
  • 将日期为NULL的条目编辑为现有日期:(不起作用)

我已经尝试并测试了一些东西,我可以假设问题是当“PHP”生成表单时,“day”,“month”和“year”输入为空/空。

也无法理解为什么创建条目的表单完全相同但开头的所有输入都是空白的,在每种情况下都适用。

这是我生成表单的方式:

$mysqli->set_charset('Latin1');
$id=$_POST["id"];
$res = $mysqli->query("SELECT * FROM `list` WHERE `id`=$id");
while($row = $res->fetch_assoc()) {
    if ($row["fecha"]==NULL) {$day="";$month="";$year="";}else{list($year, $month, $day) = explode("-", $row["date"]);};
    echo "
<div class='home'>
    <form accept-charset='Latin1' method='post' action='http://mypage.com/?opt=list&f=view'>
        <input type='text' value='".$row['title']."' name='title' id='title' required><br>
        <input type='number' value=".$day." name='day' id='day' min='1' max='31' placeholder='day'>
        <input type='number' value=".$month." name='month' id='month' min='1' max='12' placeholder='month'>
        <input type='number' value=".$year." name='year' id='year' placeholder='year'>
        <input style='display:none;' type='number' value=".$id." name='id' id='id' placeholder='id'>
        <input type='button' id='datepicker'><br>
        <input type='submit' name='edit' value='Update'>
    </form>
</div>";
};

当我提交时会发生这种情况:

$edit=$_POST["edit"];
if ($edit) {
    $id=$_POST["id"];
    $title=$_POST["title"];
    if (empty($_POST["year"])&&empty($_POST["month"])&&empty($_POST["day"])){
        $res = $mysqli->query("UPDATE `list` SET `title`=('$title'),`date`=(NULL) WHERE `id` = $id;");
    }else{
        $date=$_POST["year"]."-".$_POST["month"]."-".$_POST["day"];
        $res = $mysqli->query("UPDATE `list` SET `title`=('$title'),`date`=('$date') WHERE `id` = $id;");
    };
    print ("Entry updated to ".$date); //When it doesn't works nothing appears in $date
};

当“天”,“月”和“年”输入在开头为空时,我不知道为什么它不起作用。

PS。这是一个解决方案(当date为NULL时给出值,然后在生成表单时清除它们),但我仍然不知道输入有什么问题:

...
if ($row["fecha"]==NULL) {$day="0";$month="0";$year="0";}else{list($year, $month, $day) = explode("-", $row["date"]);};
echo "...";
if ($row["fecha"]==NULL){echo "<script>document.getElementById('day').value='';document.getElementById('month').value='';document.getElementById('year').value='';</script>";
...

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

提交表单时,输入中的空值不会提交为null。它们以空字符串“”提交,或者在输入类型为数字的情况下为零。

避免这种情况的最佳方法是使用 empty()功能:

if (empty($_POST["year"]) && empty($_POST["month"]) && empty($_POST["day"])) {
   // code ...
}

当变量为null,zero,false或empty时,此函数返回true。

更新回答:

如果您无法将 null 日期列编辑到某个日期,请确保:

  1. DATE
  2. 的列类型
  3. 包含年,月和日的变量的格式为前缀为零
  4. 错误的例子: day = 5,month = 9

    好例子: day ='05',month ='09'

    当你将它们作为整数连接时,你会得到' 2016-9-5 '这是无效的日期格式。

    所以你应该将它们格式化为前缀为零的字符串,例如' 2016-09-05 '。

    更改此行代码:

     $date=$_POST["year"]."-".$_POST["month"]."-".$_POST["day"];
    

    要:

     $date=sprintf("%04d-%02d-%02d", $_POST["year"], $_POST["month"], $_POST["day"]);
    

答案 1 :(得分:0)

(代表OP发布)。

问题只是语法错误:

value= ' ".$day." '