Помагите изменить на PDO

karen12

Постоялец
Регистрация
26 Фев 2012
Сообщения
108
Реакции
4
Помагите изменить этот код на PDO
Код:
<?php
   
   


//connect to the database
$hostname_site = "localhost";
$database_site = "drop";
$username_site = "root";
$password_site = "";
$site = mysql_connect($hostname_site, $username_site, $password_site) or trigger_error(mysql_error(),E_USER_ERROR);
mysql_select_db($database_site, $site);
mysql_query("SET NAMES 'utf8' COLLATE 'utf8_general_ci'");
//general recordset function   
   
   
if ($_POST[title]) {

    mysql_query("INSERT INTO item (title, description) VALUES
   
        (
            '".addslashes(strip_tags($_POST['title']))."',
            '".addslashes(strip_tags($_POST['description']))."'
        )
   
    ");
    $mid = mysql_insert_id(); //get id of entry that was just added

    //associate the images that were just uploaded to the entry that was added
    mysql_query("UPDATE files SET item_id = '".$mid."' WHERE image_code = '".addslashes($_POST[eid])."'");

    //redirect to entry that was just added
    header('Location: index.php?id='.$mid); die;
}






?>
 
PHP:
<?php
//connect to the database
$db_config = array(
    'host' => 'localhost',
    'user' => 'root',
    'pass' => '',
    'name' => 'drop',
    'charset' => 'utf8',
    '_debug' => false,
);
$dsn = "mysql:host={$db_config['host']};dbname={$db_config['name']};charset={$db_config['charset']}";
$opt = array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC);
$db = new PDO($dsn, $db_config['user'], $db_config['pass'], $opt);

//general recordset function   

if ($_POST['title']) {
    $pre = $db->prepare("INSERT INTO `item` (`title`, `description`) VALUES (:title, :description)");
    $pre->execute(['title' => $_POST['title'], 'description' => $_POST['description']]);
    $mid = $db->lastInsertId(); //get id of entry that was just added

    //associate the images that were just uploaded to the entry that was added
    $pre = $db->prepare("UPDATE `files` SET `item_id` = :mid WHERE `image_code` = :eid");
    $pre->execute(['mid' => $mid, 'eid' => $_POST['eid']]);

    //redirect to entry that was just added
    header('Location: index.php?id='.$mid); die;
}
 
PHP:
<?php
//connect to the database
$db_config = array(
    'host' => 'localhost',
    'user' => 'root',
    'pass' => '',
    'name' => 'drop',
    'charset' => 'utf8',
    '_debug' => false,
);
$dsn = "mysql:host={$db_config['host']};dbname={$db_config['name']};charset={$db_config['charset']}";
$opt = array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC);
$db = new PDO($dsn, $db_config['user'], $db_config['pass'], $opt);

//general recordset function  

if ($_POST['title']) {
    $pre = $db->prepare("INSERT INTO `item` (`title`, `description`) VALUES (:title, :description)");
    $pre->execute(['title' => $_POST['title'], 'description' => $_POST['description']]);
    $mid = $db->lastInsertId(); //get id of entry that was just added

 

    //redirect to entry that was just added
    header('Location: index.php?id='.$mid); die;
}


Почему временами вторая часть кода
Код:
  //associate the images that were just uploaded to the entry that was added
    $pre = $db->prepare("UPDATE `files` SET `item_id` = :mid WHERE `image_code` = :eid");
    $pre->execute(['mid' => $mid, 'eid' => $_POST['eid']]);
не срабатывает? То есть не обновляются item_id данных или часть данных в таблице files.
 
Почему временами вторая часть кода
Код:
  //associate the images that were just uploaded to the entry that was added
    $pre = $db->prepare("UPDATE `files` SET `item_id` = :mid WHERE `image_code` = :eid");
    $pre->execute(['mid' => $mid, 'eid' => $_POST['eid']]);
не срабатывает? То есть не обновляются item_id данных или часть данных в таблице files.
Логи смотреть надо. Ну или вывод ошибок включать.
 
Логи смотреть надо. Ну или вывод ошибок включать.
Мне кажется я нашел причину. Дело в том что в скрипте исползуется dropzone, и при добавлении данных одновременно форма отправляет данные в файл upload.php
Код:
<?php
include_once '../include/config.php';


if(!empty($_FILES)){
   
   
    $image_code = $_POST['eid'];
    $targetDir = "../uploads/";
    $fileName = $_FILES['file']['name'];
    $targetFile = $targetDir.$fileName;
   
   
move_uploaded_file($_FILES['file']['tmp_name'],$targetFile);
       
       
$pre = $db->prepare("INSERT INTO `files` (`image_name`, `uploaded`, `image_code`) VALUES (:image_name, :uploaded,:image_code )");
$pre->execute(['image_name' => $fileName, 'uploaded' => $curent_time_now, 'image_code' => $image_code]);       

}
   
?>
после чего по идее должна срабатывать вторая часть выше изложенного кода :
Код:
 //associate the images that were just uploaded to the entry that was added
    $pre = $db->prepare("UPDATE `files` SET `item_id` = :mid WHERE `image_code` = :eid");
    $pre->execute(['mid' => $mid, 'eid' => $_POST['eid']]);
и обновлять item _id. Мне кажется ошибка получается из-за того, что обновление происходит раньше ввода данных в таблицу files, как можно упорядочить последовательность запросов после нажатия кнопки "Добавить".
 
Мне кажется я нашел причину. Дело в том что в скрипте исползуется dropzone, и при добавлении данных одновременно форма отправляет данные в файл upload.php
Код:
<?php
include_once '../include/config.php';


if(!empty($_FILES)){
  
  
    $image_code = $_POST['eid'];
    $targetDir = "../uploads/";
    $fileName = $_FILES['file']['name'];
    $targetFile = $targetDir.$fileName;
  
  
move_uploaded_file($_FILES['file']['tmp_name'],$targetFile);
      
      
$pre = $db->prepare("INSERT INTO `files` (`image_name`, `uploaded`, `image_code`) VALUES (:image_name, :uploaded,:image_code )");
$pre->execute(['image_name' => $fileName, 'uploaded' => $curent_time_now, 'image_code' => $image_code]);      

}
  
?>
после чего по идее должна срабатывать вторая часть выше изложенного кода :
Код:
 //associate the images that were just uploaded to the entry that was added
    $pre = $db->prepare("UPDATE `files` SET `item_id` = :mid WHERE `image_code` = :eid");
    $pre->execute(['mid' => $mid, 'eid' => $_POST['eid']]);
и обновлять item _id. Мне кажется ошибка получается из-за того, что обновление происходит раньше ввода данных в таблицу files, как можно упорядочить последовательность запросов после нажатия кнопки "Добавить".
Код интерпретатором читается построчно и выполняется так же.
 
Код интерпретатором читается построчно и выполняется так же.
Но запрос на добавления данных в таблицу files, не входит в ряд запросов, а выполняется при вызове upload.php.
Мне нужно сделат вот так:
1.
Код:
  $pre = $db->prepare("INSERT INTO `item` (`title`, `description`) VALUES (:title, :description)");
    $pre->execute(['title' => $_POST['title'], 'description' => $_POST['description']]);
2. upload.php
Код:
$pre = $db->prepare("INSERT INTO `files` (`image_name`, `uploaded`, `image_code`) VALUES (:image_name, :uploaded,:image_code )");
$pre->execute(['image_name' => $fileName, 'uploaded' => $curent_time_now, 'image_code' => $image_code]);
3.
Код:
$mid = $db->lastInsertId(); //get id of entry that was just added

    //associate the images that were just uploaded to the entry that was added
    $pre = $db->prepare("UPDATE `files` SET `item_id` = :mid WHERE `image_code` = :eid");
    $pre->execute(['mid' => $mid, 'eid' => $_POST['eid']]);
 
Назад
Сверху