Запрос на обновление не работает, если добавлен код для обновления изображения и PDF - PullRequest
0 голосов
/ 11 февраля 2019

Обновление запроса не работает, если добавлен код для загрузки изображения и PDF.У меня один и тот же код для вставки и обновления, за исключением prepare и execute, запрос на вставку работает очень хорошо, запрос на обновление - нет.Я также включил enctype="multipart/form-data" в форму, чтобы я мог также получать данные из $ _FILES.Более того, я использовал $_FILES['photo']['tmp_name'] и $_FILES['pdf']['tmp_name'], чтобы переместить их, используя функции move_uploaded_file move_uploaded_file($_FILES['photo']['tmp_name'], 'destination'); и move_uploaded_file($_FILES['pdf']['tmp_name'], 'destination');

<code>function edit_profile($pid)
{
    if($_SERVER['REQUEST_METHOD']=='POST')
    {
        echo "<pre>";
        print_r($_POST);
        print_r($_FILES);
        echo "
"; $ fullname = $ _POST ['fullname']; $ email= $ _POST ['email']; $ contact = $ _POST ['contact']; $ sel_post = $ _POST ['sel_post']; $ txt_post = $ _POST ['post']; $ post = ""; if (empty ($ txt_post)) {$ post = $ sel_post;} else {$ post = $ this-> add_new_post ($ txt_post);} if (empty ($ fullname) || empty ($ contact)) {array_push ($ this-> ошибки, MEND_FIELD_ERROR); возвращать;} if (! empty ($ _ FILES ['photo'] ['name'])) {$ photo = $ _FILES ['photo']; $ allow_ext = array ('png','jpg', 'pdf', 'jpeg', 'bmp', 'gif'); $ allow_size = 20000000; $ tmp_photo = $ photo ['tmp_name']; $ photo_size = $ photo ['size']; $ photo_error= $ photo ['error']; $ photo_ext = explode ('.', $ photo ['name']); $ photo_ext = strtolower (end ($ photo_ext)); if (in_array ($ photo_ext, $ allow_ext)){if ($ photo_size <= $ enabled_size) {$ photo_new_name = time (). "_". uniqid ('', true). '.'. $ photo_ext; $ upload_destination = './cdn/uploads/profile/'. $ photo_new_name;if (move_uploaded_file ($ tmp_photo, $ upload_destination)) {$ photo_to_db = $ photo_new_name;} else {array_push ($ this-> errors, STORAGE_ERROR);вернуть;}} else {array_push ($ this-> error, $ document_name. ':' .FILE_SIZE_ERROR);вернуть;}} else {array_push ($ this-> error, $ photo_ext. ':' .FILE_EXT_ERROR);вернуть;}} if (! empty ($ _ FILES ['pdf'] ['name'])) {$ pdf = $ _FILES ['pdf'];$ allow_pdf_ext = array ('pdf');$ позволено_pdf_size = 20000000;$ tmp_pdf = $ pdf ['tmp_name'];$ pdf_size = $ pdf ['size'];$ pdf_error = $ pdf ['error'];$ pdf_ext = explode ('.', $ pdf ['name']);$ pdf_ext = strtolower (end ($ pdf_ext));if (in_array ($ pdf_ext, $ разрешенный_pdf_ext)) {if ($ photo_size <= $ разрешенный_pdf_size) {$ pdf_new_name = time (). "_". uniqid ('', true). '.'. $. $ pdf_ext;$ upload_pdf_destination = './cdn/uploads/profile_pdf/'.$pdf_new_name;if (move_uploaded_file ($ tmp_pdf, $ upload_pdf_destination)) {$ pdf_to_db = $ pdf_new_name;} else {array_push ($ this-> errors, STORAGE_ERROR);вернуть;}} else {array_push ($ this-> error, $ document_name. ':' .FILE_SIZE_ERROR);вернуть;}} else {array_push ($ this-> error, $ photo_ext. ':' .FILE_EXT_ERROR);вернуть;}} $ Statement = $ this-> db-> prepare ("ОБНОВЛЕНИЕ" профилей` SET `полное имя` = ?,` email` = ?, `contact` = ?,` post` = ?, `photo` = ?,`pdf` =? ГДЕ` pid` =? ");if ($ Statement-> execute ([$ полное имя, $ email, $ contact, $ post, $ pid, $ pdf_to_db, $ photo_to_db])) {ExitThis :: send_to (URL.'profile / view_profile? id = '. $PID);} else {array_push ($ this-> errors, DATABASE_ERROR);вернуть;}}}

Приведенный выше код вернет меня на страницу view_profile, как если бы запрос на обновление работал правильно, однако до обновления данные остаются такими же - без изменений.

Редактировать: После отладки $statement перед ее выполнением получите:

PDOStatement Object
(
    [queryString] => UPDATE `profiles` SET `fullname`=?,`email`=?,`contact`=?,`post`=?, `photo`=?, `pdf`=? WHERE `pid`=?
)

Ответы [ 3 ]

0 голосов
/ 11 февраля 2019

Возможно, это неверная последовательность переданных параметров, попробуйте следующую последовательность:

if($statement->execute([$fullname,$email,$contact,$post,$photo_to_db,$pdf_to_db,$pid]))
0 голосов
/ 11 февраля 2019
    $statement = $this->db->prepare("UPDATE `profiles` SET 
    `fullname`=?,`email`=?,`contact`=?,`post`=?, `photo`=?, `pdf`=? WHERE 
    `pid`=?");
     if($statement->execute([$fullname,$email,$contact,$post,$photo_to_db
     $pdf_to_db,$pid]))
     {
          ExitThis::send_to(URL.'profile/view_profile?id='.$pid);
       }
     else
    {
       array_push($this->errors, DATABASE_ERROR);
        return;
      }

удалите $ pid в своем заявлении об обновлении, а также проверьте свои параметры, попробуйте этот код

0 голосов
/ 11 февраля 2019

Вы передаете переменные методу execute, используя неправильный порядок.

...db->prepare("UPDATE `profiles` SET `fullname`=?,`email`=?,`contact`=?,`post`=?, `photo`=?, `pdf`=? WHERE `pid`=?");

И затем вы выполняете вызовы с этими переменными:

...->execute([$fullname,$email,$contact,$post,$pid, $pdf_to_db, $photo_to_db]))

Последние 3 должны быть похожи на $photo_to_db, $pdf_to_db, $pid,Вы передаете неверный pid, поэтому не видите результат обновления.

Также вы можете использовать именованные параметры: http://php.net/manual/en/pdostatement.execute.php#example-1072

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...