2016-04-27 1 views
2

EDIT: Итак, я посмотрел инструкции PDO Insert. Все еще путают. так что теперь мой код гласит:Попытка вставить php-объект в mysql Объект DateTime «ad_endDate»

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>test14.php</title> 
</head> 
<?php 
$servername = "server"; 
$username = "username"; 
$password = "password"; 
$dbname = "dbname"; 

//Setup for endDate value 
date_default_timezone_set("America/Denver"); 
$startDate = new DateTime('12:00:00'); 

    echo "<p>Today is: {$startDate->format('l Y-m-d g:i:s')}</p>"; 

    // N gives a numeric day to the days of the week 
    // 2 means Tuesday 
    while ($startDate->format('N') != 2) 

    $startDate->modify('+1 days'); 

    echo "<p>Start date is: {$startDate->format('l Y-m-d g:i:s')}</p>"; 

    //Set endDate at Tuesday 
    $endDate = $startDate ->modify("+2 Weeks"); 
    echo "<p>End date is: {$endDate->format('l Y/m/d g:i:s')}</p>"; 


try { 
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password); 
    // set the PDO error mode to exception 
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

    $sql = $conn->prepare("INSERT INTO wp_awpcp_ads (ad_enddate) 
VALUES (:end_date) 
"); 
    $sql->bindParam(':end_date',strtotime($endDate), PDO::PARAM_STR); 
     // use exec() because no results are returned 
    $conn->exec($sql); 
    echo "New record created successfully"; 

    } 
catch(PDOException $e) 
    { 
    echo $sql . "<br>" . $e->getMessage(); 
    } 

$conn = null; 
?> 
<body> 
</body> 
</html> 

Я получаю 2 предупреждения:

Предупреждение: StrToTime() ожидает параметр 1, чтобы быть строкой, объект приведен в [site_url] /test14.php на линии 40

Предупреждение: PDO :: Exec() ожидает параметр 1, чтобы быть строкой, объект приведен в [site_url] /test14.php на линии 42

Новая запись успешно создана

и я все еще получаю все нули в своем столе. Имеет ли значение, если это таблица wordpress? У меня нет проблем с функциями now() только DateTime() функций. Есть ли другой способ настроить дату?


Я пытался найти способ, чтобы добавить значение пользовательских конечную дату в поле базы данных MySQL с типом «DateTime»

В частности, клиент хочет, чтобы все объявления, чтобы быть «закончился» на вторник в полдень после 2 недель активности. до сих пор я помогал в phphelp форумах и есть этот фрагмент кода:

<?php 
    $servername = "server"; 
    $username = "username"; 
    $password = "password"; 
    $dbname = "dbname"; 

//Setup for endDate value 
date_default_timezone_set("America/Denver"); 
$startDate = new DateTime('12:00:00'); 

    echo "<p>Today is: {$startDate->format('l Y-m-d H:i:s')}</p>"; 

    // N gives a numeric day to the days of the week 
    // 2 means Tuesday 
    while ($startDate->format('N') != 2) 

$startDate->modify('+1 days'); 

    echo "<p>Start date is: {$startDate->format('l Y-m-d H:i:s')}</p>"; 

    //Set endDate at Tuesday 
    $endDate = $startDate ->modify("+2 Weeks"); 
    echo "<p>End date is: {$endDate->format('l Y/m/d H:i:s')}</p>"; 

try { 
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password); 
    // set the PDO error mode to exception 
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

    $sql = "INSERT INTO wp_awpcp_ads 
    (
    ad_contact_name, 
    ad_contact_email, 
    ad_contact_phone, 
    ad_title, 
    ad_category_id, 
    ad_item_price, 
    ad_details, 
    disabled, 
    disabled_date, 
    ad_postdate, 
    ad_startdate, 
    ad_last_updated, 
    ad_enddate 
) 
VALUES 
    (
    '$_POST[name]', 
    '$_POST[email]', 
    '$_POST[phone]', 
    '$_POST[title]', 
    '$_POST[category]', 
    '$_POST[price]', 
    '$_POST[details]', 
    1, 
    now(), 
    now(), 
    now(), 
    now(), 
    $endDate->format('Y-m-d H:i:s'))"; 
     // use exec() because no results are returned 
    $conn->exec($sql); 
    echo "New record created successfully"; 
    } 
catch(PDOException $e) 
    { 
    echo $sql . "<br>" . $e->getMessage(); 
    } 

$conn = null; 

Это работает отлично, за исключением моей ad_enddate подряд показывает 0000-00-00 00:00:00 и я в конце остроумия, чтобы решить эту проблему. Я изменил свой код на msqli на pdo, и ничего. Я совершенно новичок в php и нуждаюсь в этом на прошлой неделе.

+0

Ваш код уязвим для [инъекции SQL] (https://en.wikipedia.org/wiki/SQL_injection). – Pang

+0

да, это вопрос номер 2 после того, как я получу это решение. –

+0

Просто используйте [подготовленные заявления] (https://phpdelusions.net/pdo#prepared), и ваша проблема №1 исчезнет сама по себе. –

ответ

0

этот enter link description here может помочь вам с проблемой даты, я думаю, что это связано с форматом $ end_date.

И это отличный ответ о SQL Инъекции в PHP :) enter link description here

+0

Извините за плохие якорные тексты –

0

Привет всем спасибо за помощь. Я смог заставить его работать после перезаписи моего кода. ключ мне не хватало, чтобы сделать его работу является: '".$tuesday."'

вот мой окончательный код:

//---------------------------------------------------- 
//today is Tuesday 
if (2 == date('N')){ 
$tuesday = time('12:00:00'); 
}else{ 
$tuesday = strtotime('last Tuesday'); 
} 

$tuesday = strtotime('+2 week', $tuesday); 
//echo date('d-m-Y', $tuesday) . '<br>'; 
$tuesday = date("Y-m-d H:i:s", $tuesday); 
//---------------------------------------------------- 

if(isset($_REQUEST['submit_ad'])) 
{ 

// prepare and bind 
$stmt = $conn->prepare("INSERT INTO wp_awpcp_ads 
(
ad_contact_name, 
ad_contact_email, 
ad_contact_phone, 
ad_category_id, 
ad_title, 
ad_details, 
disabled, 
disabled_date, 
ad_postdate, 
ad_startdate, 
ad_enddate 
) 
VALUES 
(?,?,?,?,?,?,1,now(),now(),now(),'".$tuesday."')"); 
$stmt->bind_param("ssssss",$name,$phone,$email,$category, 
$adtitle,$addetails); 

$name = $_POST['name']; 
$email = $_POST['email']; 
$phone = $_POST['phone']; 
$category = $_POST['category']; 
$adtitle = $_POST['adtitle']; 
$addetails = $_POST['addetails']; 

$stmt->execute(); 
echo "New ads created successfully"; 

} 
$conn->close(); 
?> 
Смежные вопросы