Как записать в текстовый файл с помощью onClick? - PullRequest
0 голосов
/ 17 мая 2019

Я создал простую страницу php / javascript / html.

Работает так:

  • Получает информацию из запроса SQL;
  • Используется for для отображения всей информации в таблице;
  • В каждой строке есть две кнопки.Каждая кнопка вызывает функцию, которая записывает сообщение в текстовый файл вместе с информацией в этой конкретной строке.

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

Я уже пытался перевести вызовы функций за пределы цикла for, но это не помогло.Я считаю, что, поскольку они находятся внутри цикла, каждый раз, когда я обновляю страницу, обе кнопки «нажимаются».

Я также пытался изменить тип с кнопки на отправку, но это не сработало.

Вот код, который я использую:

<?php   
for($i=0;$i<count($aux);$i++){
?>
 <tr>
 <td><?php echo $i+1; // Simple counter, to have everything in order ?></td>
 <td><?php echo $aux[$i]['NAME']; // Displays the name?></td>
 <td><?php echo $aux[$i]['INFO']; // Display some information?></td>

<script>

function First_Message(){
 <?php  // If the first button is pressed, then this function is called
 $contents .= "Message: ".trim($aux[$i]['NAME'])." message #1 ".date("H:i:s");
 $success = file_put_contents("file.txt", $contents);
 ?>
 }
</script>

<script>
function Second_Message(){
 <?php  If the second button is pressed, then this function is called
 $contents .= "Please,: ".trim($aux[$i]['NAME'])." message #2 ".date("H:i:s");
 $success = file_put_contents("file.txt", $contents);
 ?>
 }
</script>

<!-- Creates the first button -->

<td><input type="button" value="message_1" name = "balcao" onClick = "First_Message()" /></td>

<!-- Creates the second button -->

<td><input type="button" value="message_2" name = "balanca" onClick = 
"Second_Message()" /></td>

</tr>
<?php   
} // End Loop
?>

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

Если кто-то может сказать мне, что я делаю неправильно, или / и предложить мне альтернативу тому, что я сейчас делаю с помощью onClick, которую ядумаю, проблема, я был бы очень признателен.

Не стесняйтесь спрашивать дополнительную информацию, если вам нужно.

Ответы [ 2 ]

1 голос
/ 17 мая 2019

Вы не можете смешивать функции javascript и php таким образом.

Первым решением, которое мне пришло, был простой ajax-запрос.

Что такое AJAX?

AJAX - это техника для создания быстрых и динамичных веб-страниц. AJAX позволяет асинхронно обновлять веб-страницы, обмениваясь небольшими объемами данных с сервером за кулисами. Это означает, что можно обновить части веб-страницы без перезагрузки всей страницы.

Простой код:

<?php
if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest' && isset($_POST['text'])):
    $output = '';
    $filename = 'file.txt';
    if (!file_exists($filename)):
        $myfile = fopen($filename, "w");
    endif;
    file_put_contents($filename, $_POST['text']);   
    $output = array("File content created");
    die(json_encode($output));
else:
?>

<?php
for ($x = 0; $x <= 10; $x++):
?>
    <button id="button" type="button" value="Clicked button <?php echo $x; ?>">A am button <?php echo $x; ?></button>
<?php
endfor;
?>

<script
src="https://code.jquery.com/jquery-3.3.1.min.js"
integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8="
crossorigin="anonymous"></script>     
<script>
$(document).on('click','#button',function(e) {
    var my_text = $(this).val();

    $.ajax({
        type: "POST",
        dataType:"json",
        url: window.location.href,
        data: "text=" + my_text,
        beforeSend: function (data) {
            alert('Sending');
        },
        success: function (data) 
        {
            alert('Success');

        },
        error: function (data) 
        {
            alert('Error');
        }
    });     
});
</script>
<?php endif; ?>
1 голос
/ 17 мая 2019

Это невозможно.Php выполняется на стороне сервера, в то время как JavaScript (и HTML) выполняется на стороне браузера.Вы должны отправить из браузера (с javascript, например, в ajax) на сервер и обработать его в php.

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