js脚本可以干扰php吗?

时间:2017-07-19 21:21:57

标签: javascript php

我正在为一个委员会拼凑一个网站,我已经采用了一个iso框模板,现在我想从json文件中生成个人资料卡片。但是当我加载页面时,php无法生成卡片,但据我所知,它没有明显的错误。

<?php
$json = json_decode(file_get_contents("data/committee.json"), true);
if ($json !== false) {
    foreach ($json as $officer => $content) {
        $role = $content["role"];
        $name = $content["name"];
        $tags = $content["tags"];

        echo "<div class='iso-box $tags col-md-3 col-sm-3'>";
            echo "<div class='portfolio-thumb'>";
            echo "<img src=\"files/committee_pictures/$role.jpg\" class='img-responsive' alt='Portfolio'>";
                echo "<div class='portfolio-overlay'>";
                        echo "<div class='portfolio-item'>";
                        echo "<a href=mailto:$role.@website.co.uk><i class='fa fa-envelope'></i></a>";
                        echo "<h2>$officer</h2>";
                        echo "<p> $name </p>";
                    echo "</div>";
                echo "</div>";
            echo "</div>";
        echo "</div>";
      }
    }
?>

2 个答案:

答案 0 :(得分:0)

but there are no obvious errors - 是的,因为您的代码会主动尝试隐藏/忽略错误。尝试而不是隐藏错误,每当发生错误时抛出异常,这样的代码更容易调试,错误不会无声地传播(正如当前代码所发生的那样),并且错误会尽早被捕获,如下所示:

<?php
$json = json_decode ( file_get_contents ( "data/committee.json" ), true );
if (empty ( $json )) {
    throw new \RuntimeException ( 'failed to parse the json!: ' . json_last_error () . ': ' . json_last_error_msg () );
}
foreach ( $json as $officer => $content ) {
    foreach ( array (
            'role',
            'name',
            'tags' 
    ) as $required ) {
        if (! array_key_exists ( $required, $content )) {
            throw new \Exception ( 'invalid data! officer missing ' . $required );
        }
        ${$required} = $content [$required];
    }
    echo "<div class='iso-box $tags col-md-3 col-sm-3'>";
    echo "<div class='portfolio-thumb'>";
    echo "<img src=\"files/committee_pictures/$role.jpg\" class='img-responsive' alt='Portfolio'>";
    echo "<div class='portfolio-overlay'>";
    echo "<div class='portfolio-item'>";
    echo "<a href=mailto:$role.@website.co.uk><i class='fa fa-envelope'></i></a>";
    echo "<h2>$officer</h2>";
    echo "<p> $name </p>";
    echo "</div>";
    echo "</div>";
    echo "</div>";
    echo "</div>";
}

编辑:你明显在这里构建HTML,除非角色,名称和标签已经在json中进行了html编码,你应该在将它们放入html之前对它们进行html编码,这样可以防止黑客试图通过$ name(或任何其他变量)注入代码,并防止标记意外包含HTML中具有特殊含义的字符,例如:

function tohtml(string $str): string {
    return htmlentities ( $str, ENT_QUOTES | ENT_HTML401 | ENT_SUBSTITUTE | ENT_DISALLOWED, 'UTF-8', true );
}
...
 ${$required}=tohtml($content[$required]);

答案 1 :(得分:-1)

除非你故意让他们这样做,否则Javascript和PHP很难进行交互。

PHP始终将在服务器端执行,并且在PHP完成后,通常会在客户端处理Javascript。

如果你在这里没有看到PHP的任何结果,那么你的PHP代码肯定是错误的。

我建议您将$json$json !== false作为文字进行排查。这个变量肯定是空的,假的,或者没有按你认为的那样格式化,当你试图循环它时会导致错误。

你还应该弄清楚你的PHP /服务器日志的保存位置,因为那里会输出任何错误。