2012-08-04 154 views
-3

我的網站很簡單,我想要做的就是在日期選擇器中插入一個日期到MySQL中。 (目前它插入像這樣「0000-00-00 00:00:00」)。插入日期到MySQL

我的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> 

和連接到我的MySQL anohter 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); 
?> 

所有其他形式的工作,我可以將它們添加,所有除日期。也許是因爲我錯誤地將DAY/MONTH/YEAR添加爲一個字符串。

+0

日期時間的格式應該是_'YYYY-MM-DD HH:MM:SS'_你只提供_YYYY-MM-DD_變化領域_DATE_ – 2012-08-04 15:04:37

+0

你應該閱讀有關SQL注入。您的表單非常不安全。使用預先準備好的語句,或者如果這太過分了,請使用mysql_real_escape_string – 2012-08-04 15:08:13

+0

這是非常必要的,但不是主題,提到你絕對必須逃避你的變量!當你使用'mysql_'方法時,使用'mysql_real_escape_string($ _ POST ['variable'])'你會很好。此外,嘗試使用'mysqli_'或'PDO'方法。 – newfurniturey 2012-08-04 15:08:41

回答

1

代碼中的問題是,您正在讀取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]')"; 

您的形式設置在name致敬像refidclassification等,但沒有價值來自POST元素的形式date,所以你什麼都沒有,所以它沒有插入任何東西。我猜你希望在第二行使用$date的連接值,但在插入語句中不使用$date,但$_POST[date]不存在。

如果您在INSERT聲明中使用頂部變量而不是POST變量,則可能會發現它會有所改善,但我建議您僅在遵循其他人的意見建議的情況下將其作爲停止間隔使用。現有的代碼需要相當多的支持和保護,才能爲現場網站做好準備。

+0

那麼我該怎麼做,什麼是正確的語法? – dalgic 2012-08-04 17:57:38

+0

您想要的答案是在第二個示例(insert語句的構造)中用'$ date'替換'$ _POST [date]'。這將有助於你讓這個例子起作用,但它不會使代碼足夠健壯以便在網站上運行。您需要付出更多注意力來解決SQL注入風險。 – 2012-08-04 18:07:46

+0

感謝它的工作,我將如何努力使它更安全。 – dalgic 2012-08-04 18:17:20

1

將jquery min和ui加載到您的CDN頁面或託管它。

在你想要的字段上運行日期選擇器,並確保它是你想要的格式。

<script> 
    $(function(){ 
     var pickerOpts = { 
      dateFormat:"d MM, yy" 
     }; 
     $("#date").datepicker(pickerOpts); 
    }); 
</script> 

HTML

<label>Date</label><input type="text" id="date" name="date" value="<?php echo $row_config['date']; ?>"> 

然後更新或插入

if ($_POST) { 
$date = $post['date']; //escape this string 
mysql_query("UPDATE config SET date = '$date'") or die(mysql_error()); 
} 

修改此方法,以適應你的代碼。我利用這個來設置日期網站的建設正在結束。因此,我更新,並打印日期字段中的值,以顯示管理員設置的日期,以防他想更改它。

爲您的代碼(未經測試,雖然過濾器是我使用的函數),這將處理一頁中的所有內容。

<?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> 
+0

我應該從我的代碼中刪除什麼,以及在哪裏放置您的代碼。 – dalgic 2012-08-04 18:05:45

+0

更新了我的答案 – Alex 2012-08-04 18:20:30

+0

或者您可以將php數據放在insert.php中,因爲您已經刪除了數據周圍的'if($ post){}'。 – Alex 2012-08-04 18:21:29