2017-01-16 7 views
0

Я пытаюсь обновить данные в одной таблице и в то же время вставить новую строку во вторую таблицу из формы PHP.Вставка в одну таблицу при обновлении другого и загрузка файла

При ударе отправить я получаю сообщение об ошибке, говорящее:

Uncaught Error: Call to undefined method mysqli::exec()

Ниже мой запрос на PHP отправить форму:

$link->exec("SET CHARACTER SET utf8");  // Sets encoding UTF-8 

try { 
    $link->beginTransaction(); 

    $q1 = $link->prepare("INSERT INTO 
          liquor_licenses_2 
          ( username 
          , outlet_number 
          , license_date 
          , license 
          , scanned_license 
          , permit_renewal 
          , scanned_permit_renewal 
          , identity_document 
          , scanned_identity_document 
          ) 
          VALUES 
          ( :username 
          , :outlet_number 
          , :license_date 
          , :license 
          , :scanned_license 
          , :permit_renewal 
          , :scanned_permit_renewal 
          , :identity_document 
          , :scanned_identity_document 
          "); 
    $q1->bindValue(':username', $username); 
    $q1->bindValue(':outlet_number', $outlet_number); 
    $q1->bindValue(':license_date', $license_date); 
    $q1->bindValue(':liquor_license', $license); 
    $q1->bindValue(':scanned_license', $scanned_license); 
    $q1->bindValue(':permit_renewal', $permit_renewal); 
    $q1->bindValue(':scanned_permit_renewal', $scanned_permit_renewal); 
    $q1->bindValue(':identity_document', $identity_document); 
    $q1->bindValue(':scanned_identity_document', $scanned_identity_document); 
    $q1->execute(); 

    $q2 = $link->prepare("UPDATE 
          outlet_details 
           SET 
           username = :username 
          , outlet_number = :outlet_number       
          , mega_region = :mega_region 
          , outlet_name = :outlet_name 
          , address_0 = :address_0 
          , address_1 = :address_1 
          , address_2 = :address_2 
          , address_3 = :address_3 
          , address_4 = :address_4 
          , contact_number_1 = :contact_number_1 
          , contact_number_2 = :contact_number_2 
         WHERE 
          outlet_number = :outlet_number"); 
    $q1->bindValue(':username', $username); 
    $q1->bindValue(':outlet_number', $outlet_number);       
    $q2->bindValue(':mega_region', $mega_region); 
    $q2->bindValue(':outlet_name', $outlet_name); 
    $q2->bindValue(':address_0', $address_0); 
    $q2->bindValue(':address_1', $address_1); 
    $q2->bindValue(':address_2', $address_2); 
    $q2->bindValue(':address_3', $address_3); 
    $q2->bindValue(':address_4', $address_4); 
    $q2->bindValue(':contact_number_1', $contact_number_1); 
    $q2->bindValue(':contact_number_2', $contact_number_2); 
    $q2->execute(); 


     $link->commit(); 
    } catch (Exception $e) { 
     $link->rollback(); 
    } 




    if(mysqli_query($link, $q1)){ 
     echo "Records added/updated successfully."; 
    } else{ 
     echo "ERROR: Could not able to execute $q1. " . mysqli_error($link); 
    } 

    header("refresh:2;url=../outlet_capture.php"); 
    // close connection 
    mysqli_close($link); 
    ?> 

Я также хочу, чтобы добавить к этому выгрузку 3 файлов (отсканированная лицензия, scanned_permit_renewal, scanned_identity_document). Я нашел приведенный ниже код, чтобы справиться с этим, но я не уверен, как его реализовать.

foreach($_FILES['file'] AS $key=>$file) { 
    $filename = $file['tmp_name']; 
    $size = $file['size']; 
    $newfile = $_SERVER['DOCUMENT_ROOT'] . "/uploads/" . date("Ymd_his") . "_" . $filename; 
    move_uploaded_file($filename, $newfile); 
} 

Мне нужно имя файла, который будет храниться в моей БД, так что я могу затем ссылаться на него в файл, который был загружен на сервер.

ответ

1
 $link->set_charset("utf8"); 
    try { 
     $link->begin_transaction(); 
     $q1 = $link->prepare("INSERT INTO liquor_licenses_2 
           ( username 
           , outlet_number 
           , license_date 
           , license 
           , scanned_license 
           , permit_renewal 
           , scanned_permit_renewal 
           , identity_document 
           , scanned_identity_document 
           ) 
           VALUES 
           ( ?,?,?,?,?,?,?,?,?)"); 
                --^--(you missed closed bracket here) 
     $q1->bind_param("sdsssssss", $username, $outlet_number, $license_date,$license,$scanned_license,$permit_renewal,$scanned_permit_renewal,$identity_document,$scanned_identity_document); 
     $res1=$q1->execute(); 
     $q2 = $link->prepare("UPDATE 
           outlet_details 
            SET 
            username = ? 
           , outlet_number = ?       
           , mega_region = ? 
           , outlet_name = ? 
           , address_0 = ? 
           , address_1 = ? 
           , address_2 = ? 
           , address_3 = ? 
           , address_4 = ? 
           , contact_number_1 = ? 
           , contact_number_2 = ? 
          WHERE 
           outlet_number = ?"); 
    $q2->bind_param("sdsssssssssd", $username, $outlet_number, $mega_region,outlet_name,$address_0,$address_1,$address_2,$address_3,$address_4,$contact_number_1,$contact_number_1,$outlet_number); 

    $q2->execute(); 

      $link->commit(); 
     } catch (Exception $e) { 
      $link->rollback(); 
     } 

     if($res1){ 
      echo "Records added/updated successfully."; 
     } else{ 
      echo "ERROR: Could not able to execute $q1. " . mysqli_error($link); 
     } 

     header("refresh:2;url=../outlet_capture.php"); 
     // close connection 
     $link->close(); 
     ?> 
+0

Спасибо за выше. Я обновил код в соответствии с вашим примером и теперь получаю новое сообщение об ошибке: Обманутая фатальная ошибка: объект класса mysqli_stmt не может быть преобразован в строку. Ошибка относится к этой строке: echo "ERROR: Could not способный выполнить $ q1. ". mysqli_error ($ ссылка); –

+0

Вы работаете с PDO или mysqli? –

+0

MySQLi, в основном, поскольку я вообще не знаком с PDO. Из моего понимания, однако, что вы не можете запускать несколько запросов в MySQLi, как я пытаюсь. –

0
Try this code for multiple file uploading: 

if (isset($_FILES["file"]["name"])) { 
foreach($_FILES['file']['tmp_name'] as $key => $tmp_name) 
{ 
    $file_name = $key.$_FILES['file']['name'][$key]; 
    $file_size =$_FILES['file']['size'][$key]; 
    $file_tmp =$_FILES['file']['tmp_name'][$key]; 
    $file_type=$_FILES['file']['type'][$key]; 
    $new_file = $_SERVER['DOCUMENT_ROOT'] . "/uploads/" . date("Ymd_his") . "_" . $file_name; 
    //echo $new_file; 
    move_uploaded_file($file_tmp,$new_file); 
} 
} 
+0

Я помещаю этот код в файл HTML или это также войдет в PHP «Отправить», файл? И где я это сказал? –

+0

Если вы хотите загрузить файлы после отправки формы, то она также отправляется в PHP submit. –