PHP和Javascript不能很好地一起玩

时间:2012-06-01 13:33:02

标签: php javascript mysql

免责声明:我是一名iOS开发人员,拥有很少的JQuery,PHP或MySQL经验。

这是交易:我有一个包含电影信息(FilmTitleFilmGenreFilmDirector等)的MySQL数据库。

我的目标是:

  1. 从数据库中抓取电影片名并将其存储在Array我正在使用PHP并且工作正常。
  2. 将此PHP Array传递给JavaScript Array 这也有效。
  3. 最后,使用JavaScript Array,我想使用createElement()填充下拉菜单及其内容。
    NOT 工作。
  4. 我得到了各种各样的愚蠢的东西:有些document.write()命令正在运行,有些则没有;下拉菜单没有填充;等

    第一个问题:这是一个好的策略吗?我认为随着数据库中电影数量的变化,正确更新下拉菜单的唯一方法就是按照我的描述进行操作。

    第二个问题:这应该都是PHP文件,而不是HTML文件,对吗?但是PHP甚至可以执行JavaScript功能吗?或者是否需要采取特殊措施才能使其发挥作用?

    代码

    <?php
    echo "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>";
    echo "<allFilms>";
    
    $link = mysql_connect(" . . . .  ");
    $query = "select * from FilmsSmallTable";
    $result = mysql_query($query);
    // Declare array variable:
    $allFilmTitles = array();
    
        while($row = mysql_fetch_assoc($result))
        {
            echo "<film>";
    
                echo "<FilmName>";
                echo $row['FilmTitle'];
                array_push($allFilmTitles, $row["FilmTitle"]);
                echo "</FilmName>";
    
            echo "</film>";
        }
    
    // Print array out to verify:    
    echo "Here is the array's full contents:<br/>";
    print_r ($allFilmTitles);
    
    //convert array to string using ":#:" as separator
    $stringedArray = implode(":#:",$allFilmTitles);
    
    echo "<br/><br/>";
    echo "PHP Array converted to a PHP String (the 'stringedArray' variable) = <br/>";
    print_r ($stringedArray);
    echo "</allFilms>";
    ?>
    
    <html>
    <head>
    <title>PHP & JS</title>
    
    <script type="text/javascript">
    
    function showArray() {
       //Convert PHP string to JavaScript string
       var JSArrayString = "<? print $stringedArray; ?>";
    
      //Create JavaScript array
       var JSarray = new Array();
    
       var x;
       //Fill JavaScript array from the converted string   
       JSarray = JSArrayString.split(":#:");
       // And sort it:
       JSarray.sort();
    
       //document.write("JSarray's length = ", JSarray.length);
       document.write("JSarray contains: ", JSarray);
    
       // reset the Form's drop-down menu to contain no elements:
       FilmsDropDownMenu.length = 0;
    
       for (counter = 0;  counter < JSarray.length; counter++) {
        document.write("Counter = " + counter + "<br/>");
        var newMenuItem=document.createElement("option");
        newMenuItem.text = JSarray[counter];
        try {
            //currentMenu.add(newMenuItem, null); // standards compliant
            FilmsDropDownMenu.add(newMenuItem, null); // standards compliant
        }
        catch(ex) {
            //currentMenu.add(newMenuItem); // IE only
            FilmsDropDownMenu.add(newMenuItem);
        }
    }
    
    
    function displayUsersChoice() {
    // Grab the INDEX number of the choice the user selected from that menu:
    var tempMenu = document.getElementById("FilmsDropDownMenu").selectedIndex; 
    choice = tempMenu[choiceSelected].value;
    alert ("You chose: " + choice);
    }
    
    </script>
    
    
    </head>
    
    <body onload="showArray()">
    Hello!
    
    <form id="myForm">
    <select id="FilmsDropDownMenu" onChange="displayUsersChoice()">
        <option>==Choose Film to Edit:==</option>
        <option>Star Wars</option>
        <option>Raiders</option>
        <option>2001</option>
    </select>
    
    <input type="submit" value="Display Array" onclick="showArray()" />
    </form>
    
    <br/>
    
    </body>
    </html>
    

1 个答案:

答案 0 :(得分:3)

这只是一个如何直接从PHP创建下拉列表的示例。有时,简单的方法是正确的方式:

$allFilmTitles = array("Godfather", "Colombo", "Naked Gun");
print '<select name="FilmsDropDownMenu" id="FilmsDropDownMenu">';

foreach ($allFilmTitles as $film)
{
    print "<option>{$film}</option>";
}

print "</select>";