簡體   English   中英

MySQL / PHP更新查詢,日期未更新

[英]MySQL/PHP update query with dates not updating

這里有點奇怪的問題...

我有一個無法使用的更新查詢,並且我無法終生找出原因!

我的表有兩個三個字段-“ id”(整數,自動遞增),“ date”(日期)和“ amountraised”(十進制)。 我正在開發的部分應用程序會計算慈善書店每周進行的籌款總額。 “日期”字段使用日期列類型,就像我在計算中使用日期一樣。

在系統的其他地方,我還有其他更新查詢也可以正常工作,但是我懷疑這個查詢存在的問題是,除了更新記錄之外,我還試圖操縱日期格式(以便我可以以英國dd-mm-yyyy格式輸入日期,然后使用PHP轉換回MySQL友好的yyyy-mm-dd格式。

這是奇怪的一點。 根據站點上的確認頁面,查詢運行正常,並且已完成更新,但是當我檢查數據庫時,沒有任何更改。 因此,我可以檢查查詢的輸出是什么,我嘗試將結果回顯到網頁上以查看得到的內容。 期望值顯示在頁面上,但是再次,當我檢查數據庫時,沒有任何更新。

這是我帶有日期轉換功能的更新表格:

          function dateconvert($date,$func) {
          if ($func == 1){ //insert conversion
          list($day, $month, $year) = split('[/.-]', $date); 
          $date = "$year-$month-$day"; 
          return $date;
          }
          if ($func == 2){ //output conversion
          list($year, $month, $day) = split('[-.]', $date); 
          $date = "$day/$month/$year"; 
          return $date;
            }
          } // end function      
          require_once('/home/thebooks/admins/connect.php');
          $id = $_GET['id'];
          $dateinput = $_GET['dateinput'];
          $query = "SELECT * FROM fundraisingtotal WHERE id='$id'";
          $result = mysql_query($query);
          $row = mysql_fetch_array($result);
          extract($row);
          $date = $row['date']; //your mysql date
          $realdate = dateconvert($date,2); // convert date to British date
          $amountraised = stripslashes($amountraised); //amount raised
          mysql_close();?>
            <div id="title">Update Fundraising Total</div>
            <form id="updatetotals" action="updated.php" method="post">
                <div class="row"><label for="dateinput" class="col1">Date&nbsp;&nbsp;</label><span class="col2"><input id="dateinput" name="dateinput" type="text" size="25" value="<?php echo $realdate ?>" maxlength="10" /></span></div>
                <div class="row"><label for="amountraised" class="col1">Fundraising Total&nbsp;&nbsp;</label><span class="col2"><input id="amountraised" name="amountraised" type="text" size="25" value="<?php echo $amountraised ?>" maxlength="7" /></span></div>
                <div class="submit"><input type="submit" name="submitted" value="Update" /><input type="reset" name="reset" value="Clear the form" /></div>
                <input type="hidden" name="id" value="<?php echo $id ?>" />
            </form>

...這是表單處理/查詢頁面:

    require_once('/home/thebooks/admins/connect.php');
    $dateinput = $_POST['dateinput'];

    // Date conversion from: http://www.phpbuilder.com/annotate/message.php3?id=1031006
    // using type 1
    $convdate = $_POST['dateinput']; // get the data from the form
    $convdate = dateconvert($convdate, 1); // Would convert to e.g. 2005-12-19 which is the format stored by mysql

    function dateconvert($convdate,$func) {
    if ($func == 1){ //insert conversion
    list($day, $month, $year) = split('[/.-]', $convdate); 
    $date = "$year-$month-$day"; 
    return $date;
    }
    if ($func == 2){ //output conversion
    list($year, $month, $day) = split('[-.]', $convdate); 
    $date = "$day/$month/$year"; 
    return $date;
      }
    }
    $date = "$convdate";
    $amountraised = $_POST['amountraised'];         

    $update = "UPDATE fundraisingtotal SET date = '$date', amountraised = '$amountraised' WHERE id='$id' ";
    $result = mysql_query($update);
    $realdate = dateconvert($date,2); // convert date to British date 
    if ($result) {
    echo "<p class=\"dbpara\">Thank you. Your update to the record was successful.</p>";
    echo "<p class=\"dbpara\">The record has been amended to a date of <b>$realdate</b> and amount of <b>$amountraised</b>.</p>";
    }
    else {
    echo "<p>Nothing has been changed.</p>";
    }
    mysql_close();

奇怪的是,確認文本“記錄已被修改為...等。” 顯示完全符合預期,但是當我檢查數據庫時,記錄根本沒有更新。

我敢肯定,一定是因為日期格式弄亂了我所缺少的東西,或者我按錯誤的順序輸入了一些東西,但是我已經嘗試了很多不同的變化,現在我看不到樹木。 有人知道我在做什么錯嗎?

我在這里看到一些危險信號。 您是從某種形式獲取日期並將其輸入到MySQL中,而無需進行任何形式的驗證-這可能會導致SQL注入

首先將dateconvert功能更改為更安全的功能。 即使用戶嘗試濫用系統, 此功能也將始終返回正確的格式化日期

編輯1:忘記在case 'en_en'之后加上: ,但現在已解決。 謝謝neonblue。
編輯2:忘記提供帶有時間戳的date()函數。 固定!
編輯3: preg_replace將前斜杠轉換為破折號

// this function always returns a valid date
function dateconvert($date = NULL, $date_type = 'sql') {
        $date = preg_replace("/", "-", $date);
    $timestamp = strtotime($date);
    switch($date_type) {
        default: case 'sql' : return date('Y-m-d', $timestamp); break; // prints YYYY-MM-DD
        case 'en_EN' : return date('d-m-Y', $timestamp); break; // prints DD-MM-YYYY
    }
}

您可以隨時查看Zend_Date ,以便使用自己的格式處理日期。

更改

$result = mysql_query($update);

$result = mysql_query($update) or die(mysql_error());

當查詢失敗時,您應該看到問題出在哪里。

我要尋找的三件事:

  1. 代碼是否附加到您正在查看的同一數據庫上? (我花了幾個小時;)

  2. 之后是否立即運行另一條更新語句(或該更新語句),將其更改回值? 在這里,您需要一些日志記錄才能解決。

  3. 如果您回顯sql,直接自己運行它會怎樣?

如果您看到該表未更改任何值,但查詢未顯示任何錯誤,則WHERE id = '$id'並未達到您想要的寄存器。

別忘了像其他人告訴您的那樣清理您的查詢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM