0

可能使我的代码过于复杂。我有 2 个在 JavaScript onclick 函数中动态生成的单选按钮表单:

function displayForm(){

document.getElementById("buildlist").innerHTML = '<?php
    echo '<form id="MB" name="MB" method="GET">';
    while ($row = mysql_fetch_assoc($mbquery_run))
        {
        echo '<input type="radio" class="'.$row['socket'].'" name="MB" value="'.$row['model'].'"><a href="'.$row['link'].'" class="radiolinks" target="_blank">'.$row['model'].'</a><br>';
        }
    echo '<input type="radio" class="dunno" name="MB" value="dunno">Don't know';
    echo '</form>';
        ?><br><br>';}

这是代码的一部分,我还有另一个类似这样的函数,用于另一个无线电表单。这完美地工作。再往下走,我必须保存输入以备后用。所以我制作了一个 onclick JS 函数,目的是使用 PHP 输出选择(然后可能将其存储在数据库中),定义如下:

function submitInput(){
<?php
        if (isset($_GET['MB']) && isset($_GET['CPU']))
    {
    $MB = $_GET['MB'];
    $CPU = $_GET['CPU'];
    print $MB;
    print $CPU;
    }
    else{
        $hey = "11111111111111111111111111111111111111111";
        echo ''.$hey.'';
    }?>}

这不起作用,我什至没有从 else 检查中得到 $hey 的输出。我对编程很陌生,这可能有点超出我的范围。我正在考虑将输入存储在会话变量中。考虑到目前的功能,这是否是一个可行的选择?非常感谢您的帮助!

PS:如果您想知道,表单和 mySQL 查询的输出工作正常,问题是在第二个函数中从 PHP 获取输入。

4

3 回答 3

0

我假设您在提交表单时正在使用“发布”操作?如果是这种情况,您需要将 $_GET 变量更改为 $_POST。

$_GET 用于将变量附加到要解析的 URL 的地方。$_POST 接受通过表单提交的输入。

同样重要的是要注意,您无法使用 javascript 将 PHP 代码写入您的页面。PHP 需要在服务器上处理并传送到您的浏览器。你试图做的事情是不可能的。

您需要废弃您的代码并重新开始,以更好地了解 HTML/PHP/JS 如何协同工作。

于 2013-10-11T02:49:26.020 回答
0

PHP是服务器端,也就是说它是在服务器上执行的,也就是说php标签里面的一切都是在服务器上完成的,然后以纯html的形式传递给客户端(浏览器)...

Javascript 是客户端,这意味着它只处理浏览器上已经存在的东西,有一些技术可以在服务器上使用 javascript(例如 node.js),但这与这里无关。

您正在尝试做的是使用 php 编写 javascript 函数的一部分,这既错误又疯狂。

你应该完全理解这些概念。

但无论如何,这就是我在这种情况下会做的事情:

PHP代码:

<?php

    function createForm(){
        echo: '<form id="MB" name="MB" method="GET" action="yourphpfile.php">'; //it's your choice, but i prefer to use POST methods on forms and add the action property pointing to your php.file
        while ($row = mysql_fetch_assoc($mbquery_run)){
            echo '<input type="radio" class="'.$row['socket'].'" name="RADIO" value="'.$row['model'].'">"'; //keep names and ids unique for easy access. (form and input share the same name)
            echo "<a href="'.$row['link'].'" class="radiolinks" target="_blank">'".$row['model']."'</a>"
            echo "<br>'";
        }
        echo '<input type="radio" class="dunno" name="RADIO" value="dunno">Don''t know';
        echo '<input type="submit" id="btnSubmit" value="Submit" />' //your form doesn't have a submit button
        echo '</form>';
    }

    function readFormData(){
        var radioValue = $_GET["RADIO"];
        //or if it's a POST
        var radioValue = $_POST["RADIO"];
    }

    //this should be ok
    if (isset($_GET['RADIO'])){ //only will work if form method is GET
        readFormData(); //execute the function if a parameter is found
    }

    //but this is the way to go (imho)
    if($_SERVER['REQUEST_METHOD']=='POST'){ //only will work if form method is POST
        readFormData();
    }

    createForm(); // create the form 
?>

Javascript代码:

没有任何

在您的示例中,您没有提交按钮,您需要做的就是有一个提交按钮,以便将数据发布回服务器,然后您可以检索选择的单选按钮和内容......

如果您想在此示例中使用 javascript,除非您想使用 som ajax 调用,否则我认为不需要它,因此使用 javascript,您将获取所选单选按钮的值,然后通过 ajax 将这些值发送到服务器,做你的工作并通过警报或类似的东西通知用户......

希望对小伙伴有所帮助。干杯。

于 2013-10-11T04:25:16.040 回答
0

好的,这是一个完整的示例,它当然不会访问 mySql 数据库,但它会创建一个包含来自数组的动态数据的表单。

它还会判断是否有一个url参数叫做hide,例如index.php?hide=1,这个参数会导致表单被隐藏并显示一个按钮,这个按钮会被javascript触发来显示表单。

此外,一旦发布,它将从表单中读取值。

希望这能让事情变得直截了当,没有任何疑问。

<!doctype html>
<html>
    <head>
        <title>Testing!</title>
    </head>
    <body>
        <h2> This is a test </h2>
        <hr/>
            <?php
                //this function creates the form
                function createForm(){
                    if(isset($_GET["hide"])){ //checks if a url parameter called hide exists
                        //if the parameter exists, lets hide the form
                        $isHidden = "style='display:none;'";
                        //and create a button to display the form
                        echo "<input type='button' id='btnShowForm' value='Show Form' />";
                    }else{
                        $isHidden = "";
                    }
                    $data = ["hello", "world"]; //simulated data
                    $i = 0;
                    $dataLength = count($data)-1;
                    //this is the form
                    echo "<form id='frmTest' name='frmTest' method='POST' action='index.php' ".$isHidden.">";
                    while ($i <= $dataLength){
                        echo "<p>";
                            echo "<input type='radio' name='RB' value='".$data[$i]."'/>";
                            echo "<label>".$data[$i]."</label>";
                        echo "</p>";
                        $i++;
                    }
                    echo "<input type='submit' value='Submit Form' />";
                    echo "</form>";
                }
                //this function reads the data from the form on POST
                function readFormData(){
                    if(isset($_POST["RB"])){ //if the page is requested as a POST
                        $radioValue = $_POST["RB"]; //read the RB value inside the POST data
                        if(isset($radioValue)) //if there's data on the variable let's display it
                            echo "selected value: ".$radioValue;
                        else
                            echo ":(";
                    }
                }

                if($_SERVER['REQUEST_METHOD']=='POST'){ //check if it's a post
                    readFormData(); //read the data
                }else{
                    createForm(); //create the form
                }
            ?>

    </body>
    <script>
        var btn; //holder for the button (if exists)
        window.onload = function(){ //when the page is fully loaded, jquery's $(window).load
            btn = document.getElementById("btnShowForm"); //store the button, jquery's $("#btnShowForm")
            if(!btn){ return; } //if no button exists, abort, jquery's if(!btn.size())
            if( btn.addEventListener ){ //Every browser (except IE < 9)
                btn.addEventListener("click",  showForm, false); //add a click event to the button, function showForm will be fired on click, jquery's btn.click(showForm);
            }else{ //IE 6,7,8
                btn.attachEvent("onclick", showForm);
            }
        }

        function showForm(){ //function to display the form
            var form = document.getElementById("frmTest"); //holder for the form jquery's $("#frmTest")
            form.style.display=""; //let's show the form jquery's form.show();
            btn.style.display = "none"; //let's hide the button jquery's btn.hide();
        }
    </script>
</html>

如您所见,PHP 与 JS 完全分离,这就是它的本意。

服务器端与客户端无关,但您可以(并且应该)留下痕迹让 JS 对服务器发送的数据做一些事情。

让我们总结一下:

PHP - 创建一个表单并根据 url 参数是否隐藏它,如果它被隐藏,那么它将显示一个按钮

JS - 将寻找一个按钮,如果它存在则添加一个事件,否则,什么都不做。

是不是很轻松。。

于 2013-10-11T19:51:57.543 回答