PHP 和 Javascript 不能很好地协同工作

标签 php javascript mysql

免责声明:我是一名 iOS 开发人员,几乎没有 JQuery、PHP 或 MySQL 经验。

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

我的目标是:

  1. 只从数据库中获取电影标题并将它们存储在数组中。
    我为此使用 PHP,它运行良好。
  2. 将此 PHP Array 传递给 JavaScript Array
    这也行。
  3. 最后,使用 JavaScript Array,我想使用 createElement() 用其内容填充下拉菜单。
    有效。

我得到了各种愚蠢的东西:一些 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>

最佳答案

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

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

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

print "</select>";

关于PHP 和 Javascript 不能很好地协同工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10851275/

相关文章:

php - 如何在CodeIgniter中表示SQL的 `having count(' *')`?

php - 使用 PHP 和 xPath 从 HTML 中提取数据

php - 为什么 SQL 查询返回 0?实际查询是什么?

Mysql 报告 - 无法获得匹配的数字

mysql - phpMyadmin中重新设置表自动增量的触发器

php - mysql真实转义字符串和Cookies

javascript - NuCaptcha 未渲染

javascript - 用于除 id 之外的其他属性的 jQuery 选择器不以相同的方式工作

javascript - 如何使用 JSDocs 描述具有默认值的可选对象参数

php - MySQL - 列组合的唯一约束 : avoiding error?