2016-07-05 6 views
0

Я пытаюсь передать переменную из таблицы, заполненной запросом PHP.Передача переменной PHP функции JavaScript в таблицу

В каждой строке таблицы есть три кнопки. Один из них - кнопка удаления, которая при нажатии будет запускать оповещение JavaScript, которое передает переменную на другую страницу PHP, где она удаляется из базы данных. Проблема в том, что при нажатии кнопки переменная, переданная всегда, является переменной из последней строки таблицы. Не нажимается строка.

Код:

<table class="table table-bordered table-striped js-dataTable-full-pagination"> 
<?php while($row = mysqli_fetch_assoc($result)) { ?> 
    <tr> 
     <td class="text-center"><a href="/record.php?report=<?php echo $row['recordnumber']; ?>"><?php echo $row['recordnumber']; ?></a></td> 
     <td class="font-w600"><?php echo $row["description"];?></td> 
     <td class="hidden-xs"><?php echo $row["type"];?></td> 
     <td class="hidden-xs"><?php echo $row["user"];?></td> 
     <td class="hidden-xs"><?php echo $row["edate"];?></td> 
     <td class="text-center"> 
      <a class="btn btn-xs btn-primary" href="/updaterecordform.php?id=<?php echo $row["recordnumber"];?>" data-toggle="tooltip" title="Edit Record"><i class="fa fa-pencil"></i></a> 
      <a class="btn btn-xs btn-danger" onclick="myFunction()" data-toggle="tooltip" title="Delete Prefix"><i class="fa fa-close"></i><script> 
       function myFunction() { 
        swal({ 
         title: 'Are you sure?', 
         text: 'You will not be able to recover this Record!', 
         type: 'warning', 
         showCancelButton: true, 
         confirmButtonColor: '#d26a5c', 
         confirmButtonText: 'Yes, delete it!', 
         closeOnConfirm: false, 
         html: false 
        }, function() { 
         window.location.href = 'deleterecord.php?id=<?php echo $row['recordnumber']; ?>' 
        }); 
       } 
       </script></a> 
      <a class="btn btn-xs btn-primary" href="/record.php?id=<?php echo $row["recordnumber"];?>" data-toggle="tooltip" title="View Details"><i class="fa fa-list-ul"></i></a> 
     </td> 
    </tr> 
<?php } ?> 
</table> 
+0

Если вы используете jQuery, вы можете заполнить поле данных и использовать его на своей кнопке, чтобы вызвать специальную ссылку. Обычно это намного проще, чем писать скрипт за кнопку. – tadman

+0

onclick = "myFunction ()" Получить значение в функции и установить функцию js myFunction (recordnum) { –

+0

у вас есть? @Lawrence Pepper –

ответ

2

while($row = mysqli_fetch_assoc($result)) цикла объявляет яваскрипт функции myFunction количество раз, все с тем же именем.

<?php while($row = mysqli_fetch_assoc($result)) { ?> 
    <script> 
    function myFunction() {} // this function name is repeated in the while loop 
    <script> 
<?php } ?> 

Функции не могут иметь то же имя. Самое простое решение - использовать разные имена.

<td class="text-center"> 
    <a class="btn btn-xs btn-primary" href="/updaterecordform.php?id=<?php echo $row["recordnumber"];?>" data-toggle="tooltip" title="Edit Record"><i class="fa fa-pencil"></i></a> 
    <a 
     class="btn btn-xs btn-danger" 
     onclick="myFunction<?php echo $row["recordnumber"];?>()" // <-- edited line 
     data-toggle="tooltip" title="Delete Prefix" 
    > 
    <i class="fa fa-close"></i> 
     <script> 
      function myFunction<?php echo $row["recordnumber"];?>() { // <-- edited line 
       swal({ 
        title: 'Are you sure?', 
        text: 'You will not be able to recover this Record!', 
        type: 'warning', 
        showCancelButton: true, 
        confirmButtonColor: '#d26a5c', 
        confirmButtonText: 'Yes, delete it!', 
        closeOnConfirm: false, 
        html: false 
       }, function() { 
        window.location.href = 'deleterecord.php?id=<?php echo $row['recordnumber']; ?>' 
       }); 
      } 
     </script></a> 
    <a class="btn btn-xs btn-primary" href="/record.php?id=<?php echo $row["recordnumber"];?>" data-toggle="tooltip" title="View Details"><i class="fa fa-list-ul"></i></a> 
</td> 

Лучше, а также простое решение заключается в использовании RecordNumber в качестве параметра функции

<td class="text-center"> 
    <a class="btn btn-xs btn-primary" href="/updaterecordform.php?id=<?php echo $row["recordnumber"];?>" data-toggle="tooltip" title="Edit Record"><i class="fa fa-pencil"></i></a> 
    <a 
     class="btn btn-xs btn-danger" 
     onclick="myFunction(<?php echo $row["recordnumber"];?>)" 
     data-toggle="tooltip" title="Delete Prefix" 
    > 
    <i class="fa fa-close"></i> 
    <a class="btn btn-xs btn-primary" href="/record.php?id=<?php echo $row["recordnumber"];?>" data-toggle="tooltip" title="View Details"><i class="fa fa-list-ul"></i></a> 
</td> 

Где вы положили яваскрипта функцию вне цикла while так, чтобы она не повторялась

<script> 
function myFunction(recordnumber) { 
    swal({ 
     title: 'Are you sure?', 
     text: 'You will not be able to recover this Record!', 
     type: 'warning', 
     showCancelButton: true, 
     confirmButtonColor: '#d26a5c', 
     confirmButtonText: 'Yes, delete it!', 
     closeOnConfirm: false, 
     html: false 
    }, function() { 
     window.location.href = 'deleterecord.php?id=recordnumber'; 
    }); 
} 
</script></a> 
+0

Да! Спасибо, что работает! –

0

Ответ прост, вы называете функцию myFunction() для ВСЕХ элементов вашей таблицы.

Затем, когда вы вызываете myFunction(), который должен быть выполнен? Javascript решил выполнить последний.

Вы должны реорганизовать этот код с помощью идентификатора данных для каждого элемента и вызвать только одну функцию, использующую этот идентификатор.

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