Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在MySQL中插入日期_Php_Mysql_Html_Datepicker - Fatal编程技术网

Php 在MySQL中插入日期

Php 在MySQL中插入日期,php,mysql,html,datepicker,Php,Mysql,Html,Datepicker,我的网站很简单,我只想在MySQL中插入我在日期选择器中选择的日期。现在它是这样插入的0000-00-00:00:00 我的PHP/HTML代码是: <form id="form_351400" class="appnitro" method="post" action="insert.php"> <div class="form_description"> <div style="width:100%;border:0px solid #

我的网站很简单,我只想在MySQL中插入我在日期选择器中选择的日期。现在它是这样插入的0000-00-00:00:00

我的PHP/HTML代码是:

<form id="form_351400" class="appnitro"  method="post" action="insert.php">
    <div class="form_description">
        <div style="width:100%;border:0px solid #000;">
            <div style="float:left; width:75%;">

                <h2 align="left">Samurai Digital d.o.o.</h2>
                <p>
                    Maintenance Team
                </p>
            </div>
            <div style="float:left; width:25%;">
                <a href="index.php"><img src="samurai.png" alt="Samurai" width="150" height="150" /></a>
            </div>
            <div style="clear:both;"></div>
        </div>
    </div>
    <ul >
        <li id="li_0" >
            <label class="description" for="element_0">Insert into DB </label>
            <br/>
        </li>
        <li id="li_1" >
            <label class="description" for="element_1" name="id" >ID </label>
            <input type="text" name="id" />
        </li>
        <li id="li_2" >
            <label class="description" for="element_3">Date </label>
            <span>
                <input id="element_3_1" name="element_3_1" class="element text" size="2" maxlength="2" value="" type="text">
                / <label for="element_3_1">MM</label> 
            </span>
            <span>
                <input id="element_3_2" name="element_3_2" class="element text" size="2" maxlength="2" value="" type="text">
                / <label for="element_3_2">DD</label> 
            </span>
            <span>
                <input id="element_3_3" name="element_3_3" class="element text" size="4" maxlength="4" value="" type="text">
                <label for="element_3_3">YYYY</label> 
            </span>
            <span id="calendar_3"> <img id="cal_img_3" class="datepicker" src="calendar.gif" alt="Pick a date."> </span>
            <script type="text/javascript">
                Calendar.setup({
                    inputField : "element_3_3",
                    baseField : "element_3",
                    displayArea : "calendar_3",
                    button : "cal_img_3",
                    ifFormat : "%B %e, %Y",
                    onSelect : selectDate
                });
            </script>
        </li>
        <li id="li_3" >
            <label class="description" for="element_2" name="refid" >Refid </label>
            <input type="text" name="refid" />
        </li>
        <li id="li_4" >
            <label class="description" for="element_4" name="classification" >Classification </label>
            <select name="classification">
                <option value="SECRET">SECRET</option>
                <option value="SECRET//NOFORN">SECRET//NOFORN</option>
                <option value="CONFIDENTIAL">CONFIDENTIAL</option>
                <option value="CONFIDENTIAL//NOFORN">CONFIDENTIAL//NOFORN</option>
                <option value="UNCLASSIFIED">UNCLASSIFIED</option>
                <option value="UNCLASSIFIED//FOR OFFICIAL USE ONLY">UNCLASSIFIED//FOR OFFICIAL USE ONLY</option>
            </select>
        </li>
        <li id="li_5" >
            <label class="description" for="element_5" name="origin" >Origin </label>
            <input type="text" name="origin" />
        </li>
        <li id="li_6" >
            <label class="description" for="element_6" name="destination" >Destination </label>
            <input type="text" name="destination" />
        </li>
        <li id="li_7" >
            <label class="description" for="element_7" name="header" >Header </label>
            <input type="text" name="header" />
        </li>
        <li id="li_8" >
            <label class="description" for="element_8" name="content" >Content </label>            <textarea rows="15" cols="40" name="content"></textarea>
            <br/>
        </li>
        <input type="Submit" />
    </ul >
</form>
还有一个连接到my MySQL的PHP:

<?php

    $id = $_POST['element_1'];
    $date = $_POST['element_3_3'].'-'.$_POST['element_3_1'].'-'.$_POST['element_3_2'];
    $refid = $_POST['element_2'];
    $classification = $_POST['element_4'];
    $origin = $_POST['element_5'];
    $destination = $_POST['element_6'];
    $header = $_POST['element_7'];
    $content = $_POST['element_8']; 

    $con = mysql_connect("localhost","XXXXXX","XXXXXX");
    if (!$con)
    {
        die('Error connecting to mysql server:  ' . mysql_error());
    }

    mysql_select_db("XXXXXX", $con);

    $sql="INSERT INTO emails (id, date, refid, classification, origin, destination, header, content)
    VALUES
    ('$_POST[id]','$_POST[date]','$_POST[refid]','$_POST[classification]','$_POST[origin]','$_POST[destination]','$_POST[header]','$_POST[content]')";

    if (!mysql_query($sql,$con))
    {
        die('Error: ' . mysql_error());
    }
    echo "1 record added";

    mysql_close($con);
?>

所有其他表格都有效,我可以添加它们,除了日期。可能是因为我以错误的方式将日/月/年添加为一个字符串。

代码中的问题是,您正在读取POST变量两次,第二次是不起作用的一次,但您需要工作的一次,因为它是INSERT语句!:

在顶部,您有以下内容:

$id = $_POST['element_1'];
$date = $_POST['element_3_3'].'-'.$_POST['element_3_1'].'-'.$_POST['element_3_2'];
$refid = $_POST['element_2'];
$sql="INSERT INTO emails (id, date, refid, classification, origin, destination, header, content) VALUES
('$_POST[id]','$_POST[date]','$_POST[refid]','$_POST[classification]','$_POST[origin]','$_POST[destination]','$_POST[header]','$_POST[content]')";
…但后来你有了这个:

$id = $_POST['element_1'];
$date = $_POST['element_3_3'].'-'.$_POST['element_3_1'].'-'.$_POST['element_3_2'];
$refid = $_POST['element_2'];
$sql="INSERT INTO emails (id, date, refid, classification, origin, destination, header, content) VALUES
('$_POST[id]','$_POST[date]','$_POST[refid]','$_POST[classification]','$_POST[origin]','$_POST[destination]','$_POST[header]','$_POST[content]')";
您的表单正在为refid、classification等设置name属性,但是表单中没有POST元素日期的值,因此您没有得到任何结果,因此它没有插入任何内容。我猜您希望在第二行中使用$date中的连接值,但在insert语句中没有使用$date,而是使用$u POST[date],它不存在


如果在INSERT语句中使用您在顶部填充的变量而不是POST变量,您可能会发现这会有所改进,但我建议您仅作为权宜之计,在注释中遵循其他人的建议!您的代码在准备好用于实时网站之前,需要进行大量的增强和保护。

使用CDN将jquery min和ui加载到您的页面中或托管它

在所需字段上运行日期选择器,并确保其采用所需格式

<script>
    $(function(){
        var pickerOpts = {
            dateFormat:"d MM, yy"
        }; 
        $("#date").datepicker(pickerOpts);
    });
</script>
修改此方法以适合您的代码。我利用这一点来设定网站建设结束的日期。因此,我更新并打印日期字段中的值,以向管理员显示设置的日期,以防管理员想要更改它

对于您尚未测试的代码,虽然filter是我使用的一个函数,但它将在一个页面中处理所有内容

<?php
function filter($data) // for sql injection
{
   // normalize $data because of get_magic_quotes_gpc
   $dataNeedsStripSlashes = get_magic_quotes_gpc();
   if ($dataNeedsStripSlashes) {
       $data = stripslashes($data);
   }
   // normalize $data because of whitespace on beginning and end
   $data = trim($data);
   // strip tags
   $data = strip_tags($data);
   // replace characters with their HTML entitites
   $data = htmlentities($data);
   // mysql escape string    
   $data = mysql_real_escape_string($data);
   return $data;
}

if ($POST) {

    $con = mysql_connect("localhost","XXXXXX","XXXXXX") or die("Could not connect to database! " . mysql_error());
    mysql_select_db("XXXXXX");

    foreach($_POST as $key => $value) { // will escape and filter post data
        $post[$key] = filter($value);
    }

    $id = $post['element_1'];
    $date = $post['date']; // change this in the database to date varchar 50 or something
    $refid = $post['element_2'];
    $classification = $post['element_4'];
    $origin = $post['element_5'];
    $destination = $post['element_6'];
    $header = $post['element_7'];
    $content = $post['element_8']; 

    // we already posted so we dont have to repost data
    $sql="INSERT INTO emails (id, date, refid, classification, origin, destination, header, content) 
    VALUES ('$id','$date','$refid','$classification','$origin','$destination','$header','$content')";

    mysql_query($sql) or die(mysql_error());

}
?>
<html>
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.9/jquery-ui.min.js"></script>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script>
$(function(){
    var pickerOpts = {
        dateFormat:"d MM, yy"
    }; 
    $("#date").datepicker(pickerOpts);
});
</script>
</head>
<body>
<form action="" name="formname" id="formid"> <!-- impt to have action="" -->
<!-- add all your other elements here -->
<label>Date</label><input type="text" id="date" name="date">
<!-- buttons here -->
</form>
</body>
</html>

datetime的格式应为“YYYY-MM-DD HH:MM:SS”。您仅提供YYYY-MM-DD。请将字段更改为date。您应该阅读有关SQL注入的信息。你的表格很不安全。使用预先准备好的语句,或者如果这一步走得太远,请使用mysql\u real\u escape\u string。这是非常必要的,但离题了,要提到的是,您绝对必须转义您的变量!在使用mysql方法时,请使用mysql\u real\u escape\u string$\u POST['variable'],这样会很好。另外,也可以尝试使用mysqli_uuo或PDO方法。强制:可能重复我应该从代码中删除的内容,以及将您的内容放在何处。或者,您可以将php数据放在insert.php中,因为您已经删除了数据周围的if$post{}。一体式。。。如果你愿意的话。否则,您可以使用我之前的注释对其进行修改,以执行两个操作。您想要的答案是在第二个示例insert语句的构造中用$date替换$U POST[date]。这将帮助您实现这个示例,但它不会使代码足够健壮,无法在网站上运行。您需要更加注意解决SQL注入风险。Rene在您的问题下的评论是一个好的开始!要达到你应该达到的目标需要做很多工作,但如果你想成为一名web开发人员,那么这是值得的。