Hej, jag bygger ett bibliotek och måste kunna hämta ett datum ur DB, lägga till 30 dagar och lagra det igen. Men det funkar inte. Varör är det så här? Är det i den här satsen du försöker sätta in ett datum 30 dagar framåt?Hämta datum, beräkna och lagra igen
Här är koden:
<?
session_start();
include "conn.php";
$query = 'SELECT memberid FROM member '
. 'WHERE username = \''. $_SESSION['authUser'] .'\'';
$result = mysql_query($query) or die(mysql_error());
$values = mysql_fetch_assoc($result);
$_SESSION['user'] = $values;
$membid = $_SESSION['user']['memberid'];
$bid = $_POST['bokid'];
$date = date("Y:m:d");
$date2 = date("Y:m:d",strtotime('+30 days'));;
// Check if member already has a book
$check = mysql_query("SELECT COUNT(*) AS hit FROM loan WHERE memberid='$membid'");
// Check if book is lent by someone else
$check2 = mysql_query("SELECT COUNT(*) AS hit FROM loan WHERE bookid='$bid'");
// Get returning date if some one else has the book
$ater = mysql_query("SELECT _STR_TO_DATE(returndate,'%d/%m/%Y') as 'returndate' FROM loan WHERE bookid='$bid'");
if (mysql_result($check, 0, 'hit') == 1) {
// If the logged in member already has lent a book
echo 'Please return book first!';
}
elseif (mysql_result($check2, 0, 'hit') == 1) {
// If selected book is lent by other, new loan is registerd and the date of the loan is set to the same as //returning date (of the member who has it now)
mysql_query("INSERT INTO loan (loandate, memberid, bookid, returndate) VALUES
('$return', '$membid', '$bid', '$return + 30')");
echo 'You'll get the book as soon as it is returned from other member.';
}
else {
// Book is in library. Loan-date is set to todays date and returning date is set to today+30 days
mysql_query("INSERT INTO loan (loandate, memberid, bookid, returndate) VALUES
('$date', '$membid', '$bid', '$date2'");
echo 'Soon come!';
}
?>Sv: Hämta datum, beräkna och lagra igen
mysql_query("INSERT INTO loan (loandate, memberid, bookid, returndate) VALUES
('$return', '$membid', '$bid', '$return + 30')");
Varifrån kommer variabeln $return?
Antag att $return har värdet 2006-03-22, att $membid har värdet 123 och att $bid har värdet 14. Då kommer SQL-satsen att lydaINSERT INTO load (loandate, memberid, bookid, returndate) VALUES ('2006-03-22', '123', '14', '2006-03-22 + 30')
dvs du försöker sätta in strängen '2006-03-22 + 30' i fältet returndate. Detta förstår inte MySQL som något riktigt datum.
Pröva i ställetmysql_query("INSERT INTO loan (loandate, memberid, bookid, returndate) VALUES
('$return', '$membid', '$bid', '$return' + INTERVAL 30 DAY)");