-2

我尝试在我的 JavaScript 代码中嵌入 PHP,看看会发生什么。实际上什么也没发生。有人可以建议我这样做吗?

<head>
<script>
function myF() {
    n=document.getElementById("name").value
    r=document.getElementById("reason").value
    <?php
        $f = fopen("VisitorLog.txt", "w");
        fwrite($f, "Profile viewed on "+Date()+" by "+n+" Reason= "+r);
        fclose($f);
    ?>
    document.getElementById("name").disabled=true;
    document.getElementById("reason").disabled=true;
    document.getElementById("register").disabled=true;
    document.getElementById("link").style.display="inline";
    alert("You have successfully registered.");
}
</script>
</head>

我对所有这些东西都很陌生,还在学习。请尝试用更简单的术语解释。:P

4

7 回答 7

2

首先请记住,PHP 是在服务器上呈现的,而 Javascript 将在您的客户端(Web 浏览器)上进行解释。因此,如果您从 PHP 中回显某些内容,它将与 html 一起发送,并且不会像您在此处假设的那样使用 Javascript 执行。

要在此处完成您想要的操作,您需要对 PHP 脚本进行 AJAX 调用,该脚本将更新您的视图日志。

编辑:

在 update.php 文件上

<?php
$n = $_POST['n'];
$r = $_POST['r'];
$f = fopen("VisitorLog.txt", "w");
fwrite($f,"Profile viewed on ".date("Y-m-d H:i:s")." by ".$n." Reason= "+$r);
fclose($f);

在你的 javascript 上(假设你已经加载了 jquery)

<script>
function myF()
{
    $.post("update.php",
                { 
                    n : document.getElementById("name").value, 
                    r : document.getElementById("reason").value
                },
                function({
        document.getElementById("name").disabled=true;
        document.getElementById("reason").disabled=true;
        document.getElementById("register").disabled=true;
        document.getElementById("link").style.display="inline";
        alert("You have successfully registered.");
    }));
}
</script>
于 2013-10-16T07:16:55.033 回答
2

您需要了解的主要概念是Javascript在客户端运行,即Web浏览器,而PHP在服务器上运行。您添加到页面的 PHP 代码在处理任何 Javascript 之前执行。

如果您希望您的 Javascript 将数据发送到您的 PHP 应用程序,您需要使用 Ajax。使用像jQuery这样的库会让你的生活变得更轻松。这是一个如何使用 jQuery 工作的示例。

PHP - 日志.php

<?php
$string = sprintf('Profile viewed on %s by %s Reason= %s', 
                  $_POST['date'], $_POST['name'], $_POST['reason']);
$f = fopen("VisitorLog.txt", "w");
fwrite($f, $string);
fclose($f);
?>

Javascript

var n = $("#name").val();
var r = $("#reason").val();
var d = new Date();

$.ajax({
    url: '/path/to/log.php',
    method: 'POST',
    data: {name: n, reason: r, date: d}
}).done(function(response){
    // response contains the output of log.php

});

参考

于 2013-10-16T07:34:21.393 回答
1

PHP 在服务器端呈现。JavaScript 在客户端呈现。

于 2013-10-16T07:18:01.350 回答
1

就像大家说的那样。您不能将服务器端代码与客户端代码混合使用.. php 在服务器端呈现/执行,而客户端浏览器中的 js..

如果可能的话,分开 js 和 php。一个可行的解决方案可能是:(假设 jQuery 用于 ajax 调用,实际上可以使用另一个框架甚至纯 js)

在您的 js 文件中(或在标题中的脚本标记中)

function log(message, success, failure){
    $.ajax({
        url: "logger.php",
        data: {
            message: message
        },
        success: success,
        error: failure
    })
}
function myF(){
    var n=document.getElementById("name").value,
        r=document.getElementById("reason").value;

    log( "Profile viewed on "+Date()+" by "+n+" Reason= "+r, function(){
        console.log('I successfully logged');
    }, function(jqXHR, textStatus, errorThrown){
        console.log('something went wrong', jqXHR, textStatus, errorThrown);
    });

    document.getElementById("name").disabled=true;
    document.getElementById("reason").disabled=true;
    document.getElementById("register").disabled=true;
    document.getElementById("link").style.display="inline";
    alert("You have successfully registered.");
}

在一个文件中logger.php

<?php
    if(isset($_GET['message'])){
        $f = fopen("VisitorLog.txt", "w");
        fwrite($f, $_GET['message']);
        fclose($f);
    }
?>
于 2013-10-16T07:33:31.020 回答
0

只有服务器可以解释和运行 php 代码。确保您正在编辑的文件存储在安装了 php 的服务器中(如果您想在计算机上进行本地测试,可以尝试 WAMP 或 XAMPP)。

于 2013-10-16T07:41:24.127 回答
0

PhP 在页面加载之前在服务器上执行。所以你的 PhP 将执行,然后页面加载。然后加载javascript。所以你的javascript不会触发PhP。

执行此操作的两种方法: - 当页面加载到服务器上时运行 PhP 脚本 - 使用 AJAX 运行服务器端 php 脚本来注册用户详细信息。

于 2013-10-16T07:17:58.150 回答
0

Javascript在客户端运行,php在服务器端运行。例如,您需要对服务器端的某些方法进行 ajax 调用,该方法将执行服务器端任务。

于 2013-10-16T07:18:02.843 回答