Если нет вложения, тогда отправьте сообщение, иначе, кнопку загрузки изображения

Я пытаюсь реализовать функцию, которая выглядит примерно так:

  1. Если textarea имеет контент (не пустой) и добавление вложения не добавляется, просто покажите сообщение в div.
  2. Если textarea пуст, но добавлено вложение, затем отобразите кнопку download , которая заставит приемник сообщений сохранить вложение на локальный диск.
  3. Если textarea не пуст, а добавление добавлено, тогда отобразите как сообщение, так и кнопку загрузки.

Моя нынешняя ситуация:

В настоящее время у меня есть следующий фрагмент кода для обработки вложения (который на данный момент может быть только изображением). В идеале, я не хочу ничего хранить на сервере:

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

messages.php :

введите описание изображения здесь

Вот мой код:

 <?php /**************************************************/ // 1. My textarea form for sending a message: echo " <form action='messages.php?u=$user' method='post' enctype='multipart/form-data'> <textarea name='msg_body' rows='3' maxlength='255' cols='110' placeholder='Send message...'></textarea> <input type='submit' name='send' value='Send'/> <input id='file-input' name='attachment' type='file'/> </form>"; /* When the above form is filled, the following states are considered valid: 1.1. If the textarea is not empty and no attachment is added. 1.2. If the textarea is empty but an attachment is added. 1.3. If both textarea and attachment are empty, then DO NOT execute the INSERT query. */ /**************************************************/ // 2. My approach to achieve the above and more... if ($user != $username) { if (isset($_POST['send'])) { $msg_body = (trim(strip_tags(@$_POST['msg_body']))); $date_of_msg = date("Ymd"); $read = "no"; $deleted = "no"; // check if file is added and message is placed if (($_FILES['attachment']['size']) == 0 && ($_FILES['attachment']['error'] == 0) && $msg_body != "") { // do nothing } else { if (isset($_FILES['attachment'])) { // check format of file if (((@$_FILES["attachment"]["type"] == "image/jpg") || (@$_FILES["attachment"]["type"] == "image/jpeg") || (@$_FILES["attachment"]["type"] == "image/png") || (@$_FILES["attachment"]["type"] == "image/gif")) && (@$_FILES["attachment"]["size"] < 3145728)) //3mb { if (file_exists("user_data/attached_files/".@$_FILES["attachment"]["name"])) { // do nothing } else { // move temporary image files into one of the randomly generated files move_uploaded_file(@$_FILES["attachment"]["tmp_name"], "user_data/attached_files/".@$_FILES["attachment"] ["name"]); // get name $attach_name = @$_FILES["attachment"]["name"]; } } } $send_msg = mysqli_query($connect, "INSERT INTO private_messages VALUES ('','$username','$user', '$msg_body', '$date_of_msg', '$read', '$deleted') "); } // 396 echo "<meta http-equiv='refresh' content='0'>"; } } /**************************************************/ // 3. Now to display the download button (ONLY IF AN ATTACHMENT IS ADDED): if ($msg_to == $user){ echo " <div class='parent'> <div class='msg_prof'> <img class='img-rounded' src='/user_data/profile_pics/$my_pro_pic'/> </div> <div class='new_msg_from_user'> <p><b style= 'color: red;'> You said:</b> $msg_body</p> <span class='faded'>$date </span>"; // check if file is empty if (isset ($_FILES['attachment']['size']) == 0 && (isset($_FILES['attachment']['error'])) == 0){ // no file attached, so do nothing } else { echo " <form action='inc/download_attachment.php' method='post' enctype='multipart/form-data'> <button type='submit' name='save'> Download</button> </form>"; } echo " <a href='inc/remove_message.php?id=$message_id'> Remove </a> </div><hr/> </div>"; } ?> 

Мои текущие результаты :

Таким образом, изображение ниже показывает мои текущие результаты. Последнее сообщение, которое пусто ( You said: "" ), было опубликовано без текста в текстовом поле, но добавлено вложение.

введите описание изображения здесь

Когда приложение добавлено, мне нужно, чтобы кнопка загрузки выглядела так: введите описание изображения здесь Кнопка загрузки после нажатия вызывает функцию download_attachment.php которая заставит пользователя сохранить изображение на локальный диск.

Резюме :

  • Как показывать только кнопку загрузки при добавлении вложения?
  • Как предотвратить отправку пустых сообщений? (т. е. никакого сообщения и без привязки).

Ps Извините за очень длинный вопрос :).

Solutions Collecting From Web of "Если нет вложения, тогда отправьте сообщение, иначе, кнопку загрузки изображения"

Отвечая на ваш вопрос в порядке:

Как показывать только кнопку загрузки при добавлении вложения?

Задача состоит в том, чтобы PHP выполнялся и генерировал страницу один раз на стороне сервера. Таким образом, ваша логика будет работать только тогда, когда страница обновляется (воссоздается). Но проблема в том, что то, что вы пытаетесь достичь, происходит на стороне клиента (нажав кнопку Browne... ) Поэтому нам нужно использовать JavaScript для решения этой части.

Поэтому мы можем по умолчанию сделать нашу кнопку скрытой, но отображать ее в тот момент, когда мы взаимодействуем с кнопкой Browne...

Один из способов пойти, добавив следующий JavaScript в конце вашего кода

 <script> document.getElementById("btnDownload").style.visibility = "hidden"; document.getElementById("file-input").onchange = function () { document.getElementById("btnDownload").style.visibility = "visible"; }; </script> 

Это будет работать, только если вы id='btnDownload' кнопку загрузки из if statement и дадите ей идентификатор id='btnDownload' . Кроме того, это слишком много, чтобы положить его в PHP, поэтому просто оставьте его как HTML, но если вы хотите оставить его внутри PHP, помните, как сказано, чтобы вывести его из любого условия / оператора, поскольку нам нужно контролировать его внешний вид со стороны клиента ,

 <form action='inc/download_attachment.php' method='post' enctype='multipart/form-data'> <button type='submit' name='save' id='btnDownload'> Download</button> </form> 

Это один из способов его решения. Другой способ заключается в том, что при загрузке изображения вам нужно добавить поле в таблицу базы данных, чтобы указать, где находится файл / место привязки, и если в этом поле есть место для файла / вложения, то вы можете динамически создать кнопку загрузки, добавив следующее условие.

 if (!empty($attachment)) { // your button generation code. } 

Я пробовал оба метода в своей тестовой среде с вашим кодом, и оба они работают.

Как предотвратить отправку пустых сообщений? (т. е. никакого сообщения и без привязки).

Вы можете пойти двумя способами, вы можете добавить дополнительное условие !empty($_POST['msg_body']) чтобы проверить, не пустое поле, поэтому ваш код будет выглядеть так:

 if ($user != $username) { if (isset($_POST['send']) && !empty($_POST['msg_body'])){ code inside etc..... } 

Вы также можете сделать это с помощью JavaScript в этом примере .

Пример того, что я сделал: введите описание изображения здесь

Примечание. Как вы можете видеть, кнопка изображения появляется, когда изображение доступно для одного сообщения, я сделал это как с базой данных PHP / MySQL, так и с JavaScript, и оба решения работают, но поскольку у меня нет глубоких знаний о вашей конечной цели, поэтому мое решение ваш вопрос работает и концептуально корректен, но вам, возможно, потребуется немного поработать и почистить его, чтобы он соответствовал вашей конечной цели.