为了账号安全,请及时绑定邮箱和手机立即绑定

ID 在 PHP 的 while 循环中未按预期工作

ID 在 PHP 的 while 循环中未按预期工作

PHP
萧十郎 2023-07-01 15:30:24
我正在尝试创建一个 while 循环,为每个 $version 值回显一个按钮。shell_exec() 从 Python 文件返回一个值,并响应唯一的 $version 值。为此,基本目标是创建一个页面,其中按钮的数量取决于版本值。然后,用户可以单击任何特定按钮并访问该特定按钮(版本)的数据。为此,我尝试将变量与 ID 混合使用,但似乎不起作用。我可以做什么来解决这个问题?目前所有按钮都没有响应。代码:<?php                                          while ($version != 0) {                echo '                <br>                <br>                <button id="toggle-' . $version . '">TOGGLE</button>                <div style= "display:none;" id="content-' . $version . '">                ';                $command = escapeshellcmd("C:/Python38/python.exe C:/xampp/htdocs/Ensemble/login/test.py $email $version");                 $output = shell_exec("$command 2>&1");                echo($output);                echo '                </div>                <script>                var toggle  = document.getElementById("toggle-' . $version . '");                var content = document.getElementById("content-' . $version . '");                toggle.addEventListener("click", function() {                  content.style.display = (content.dataset.toggled ^= 1) ? "block" : "none";                });                </script>                '                ;                $version--;              }            ?>编辑一个新的问题出现了。只有其中一个按钮起作用。单击这两个按钮时会输出相同的内容,而不是不同的版本。在 SQL 中,所有版本都不同,因此这很可能是 html/JS 的错误。
查看完整描述

2 回答

?
HUX布斯

TA贡献1876条经验 获得超6个赞

也许以下内容可能会有所帮助 - 尽管就 Python 调用而言还没有经过测试,但我认为如果我理解正确的话,其他代码应该可以正常工作。


每个 ID 在 DOM 中都必须是唯一的,我猜这就是为什么你试图通过$version向每个 ID 添加数字来使它们如此。querySelectorAll如果您使用合适的表达式,这并不是真正必要的。与普通 javascript 中存在的一个或多个父/同级选择器结合执行此操作可以相当轻松地进行 DOM 导航和操作。这也意味着您可以对所有按钮使用同一段代码......希望它有所帮助。


<?php

    while( $version > 0 ) {

    

        $command = escapeshellcmd( "C:/Python38/python.exe C:/xampp/htdocs/Ensemble/login/test.py $email $version" ); 

        $output = shell_exec("$command 2>&1");




        printf('

            <br />

            <br />

            

            <button data-version="%d">Toggle</button>

            <div style="display:none">%s</div>', 

            $version,

            $output 

        );


        $version--;

    }

    

    echo "

    <script>

        Array.from( document.querySelectorAll('button') ).forEach( bttn=>{

            bttn.addEventListener('click', function(e){

                let version=this.dataset.version;

                let div=this.nextElementSibling;

                    div.style.display=div.style.display=='block' ? 'none' : 'block';

                

            });

        })

    </script>";

?>


查看完整回答
反对 回复 2023-07-01
?
守着星空守着你

TA贡献1799条经验 获得超8个赞

代替

<div style= "display:none;" "id="content-' . $version . '">

<div style= "display:none;" id="content-' . $version . '">

并尝试。


查看完整回答
反对 回复 2023-07-01
  • 2 回答
  • 0 关注
  • 152 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号