2015-05-20 2 views
0

Образец моего кода:Подтверждение удаления с PHP вар

<form action="test.php" method="GET"> 

     <input type="text" name="Delete_This" value="<?php if (isset($_GET['Delete_This'])) echo $_GET['Delete_This']?>"> 
     <input type="submit" name="Deleting" value="Delete this"> 

     <?php 
      // If the deleting button is pressed 
      if (isset($_GET['Deleting'])) 
      { 

       $DeleteThis = $_GET['Delete_This']; 

       ?> 
       <script type='text/javascript'> 
        if (confirm('Are you sure you want to delete <?php echo $DeleteThis ?> ?')) 
         alert('<?php echo $DeleteThis ?> deleted'); 
         <?php 
          $sql_delete="DELETE FROM table WHERE Name like '".$DeleteThis ."'"; 
          mysqli_query($db,$sql_delete); 
         ?> 
        else 
        alert('Not deleted'); 


       </script>    
     <?php } ?> 
    </form> 

Коробка подтверждения открывает proprely. Моя проблема в том, что я нажимаю на OK или Отменить, $sql_delet. Я знаю, что должен использовать Javascript наверху <head> моего документа, но если я это сделаю, я не могу выполнить запрос Delete, и я должен предупредить пользователя о том, что он собирается удалить. {$DeleteThis} работает отлично. Я также использовал функцию onclick на input, но я не могу использовать {$DeleteThis}.

Чтобы синтезировать: я хочу, если поле confirm отменено, запрос не должен выполняться, и я должен использовать переменную php в confirm и alert.

+4

PHP мертв к моменту загрузки вашего окна подтверждения. Неправильный подход. Используйте это окно подтверждения перед отправкой формы в код PHP. –

+0

Я не знал, что это сработало. Что я хочу сделать, тогда невозможно? Как я могу выполнить запрос 'Delete' ТОЛЬКО, если подтверждение подтверждено – Hearner

+0

@Epodax kinda, лучший способ сказать, что PHP работает на веб-сервере и генерирует то, что видит браузер. JS работает в браузере. –

ответ

3

Возможно, вы захотите ознакомиться с различием между серверными и клиентскими языками.

Все, что вы вставляете в php-код, выполняется до того, как код html и javascript даже отправлен в браузер пользователя.

Напротив, все, что вы вставляете в код javascript, больше не влияет на PHP-код.

Так что происходит в вашем коде, так это то, что php сначала проверяет, есть ли переменная $_GET['Deleting']. Если он есть, он найдет некоторые html и javascript и помнит, что он должен вывести это в браузер позже. Затем он выполняет запрос удаления. И как только это будет сделано, он посылает следующий JavaScript (плюс любой окружающий HTML) в браузере:

<script type='text/javascript'> 
    if (confirm('Are you sure you want to delete your-deletion-value ? \nHey')) 
     alert('your-deletion-value deleted'); 

    else 
    alert('Not deleted'); 


</script> 

Итак, мы надеемся, вы видите разъединение между ними.

+0

Да, теперь я понимаю, как это работает. Таким образом, я не могу 'DELETE' запрос, только если на поле' CONFIRM' нажата кнопка ОК?Я просто хочу, чтобы пользователь проверил, допустил ли он ошибку – Hearner

+0

. Ну, вы можете сделать окно подтверждения, а затем отправить форму только на скрипт удаления, если пользователь нажал в порядке. Это будет хорошо. Вы просто добавляете 'onclick' в кнопку отправки, как в ответе Элиера. –

-1
onclick="return confirm('Are you sure you want to delete?');" 
+0

Я знаю, что 'onclick' работает. Но я хочу, чтобы пользователь увидел, что он собирается удалить. Я не хочу, чтобы подтверждение было «Вы хотите удалить это», я хочу «Вы хотите удалить {Name}» – Hearner

+0

Это мой пост. Я не критикую ваш пост, хотя – Hearner

1

вы могли бы поставить подтверждение в

if (isset($_GET['Deleting'])) 
     { 

      $DeleteThis = $_GET['Delete_This']; 
      if(!isset($_GET['ConfirmDelete'])//if confirmation has not been initiated yet 
      { 
      ?> 

      <script type='text/javascript'> 
      function deleteOrNot(formEle) 
      { 
       if (confirm('Are you sure you want to delete <?php echo $DeleteThis ?> ?')) 
        window.location += '&ConfirmDelete=yes';//casue a postback with ConfirmDelete attribute in $_GET 

       else 
       alert('Not deleted'); 
      </script>    
    <?php } 
      else if($_GET['ConfirmDelete'] == 'yes') 
      { 
       $sql_delete="DELETE FROM table WHERE Name like '".$DeleteThis ."'"; 
       mysqli_query($db,$sql_delete); 
      } 
} ?> 

Или вы могли бы использовать флажок в вашей форме с обязательным атрибутом затем установите кнопку отправки, чтобы установить значение флажка перед отправкой с OnClick.

<input type="checkbox" name='ConfirmDelete' 
    required <?php if(isset($_GET['ConfirmDelete'])) 
     echo 'checked=' . $_GET['ConfirmDelete']; ?> > 
<input type="submit" name="Deleting" onclick= 
     'this.form.ConfirmDelete.checked = deleteOrNot(this.form)' value="Delete this"> 

и изменить сценарий, как этот

<script type='text/javascript'> 
    function deleteOrNot(formEle) 
    { 
     if(typeof formEle == 'undefined') 
     { 
      formEle = forms[0]; 
     } 
     var result = confirm('Are you sure you want to delete' + formEle.Delete_This.value + ' ? \nHey'); 
     if (result) 
      alert(formEle.Delete_This.value + ' will be deleted'); 
     else 
      alert('Not deleted'); 
     return result; 
    } 
</script>  

Примечание: Я добавил форму в качестве аргумента функции deleteOrNot и использовать, чтобы получить значение текстового поля. Обязательный флажок запрещает отправку формы, если он не проверен.

Смежные вопросы