我知道这个话题已经讨论过几次,但我似乎无法找到我做错的事。
我正在尝试做什么: 用户键入一个数字,然后单击该按钮将创建一个包含该列数的表。
继承人的PHP:
<?php
$twig = require_once('bootstrap.php');
$hostname = 'localhost';
$username = 'root';
$password = '';
$conn = new PDO("mysql:host=$hostname;dbname=mydb", $username, $password);
echo $twig->render('index.html', array());
$numOfRows = 1;
if(isset($_POST['button'])){
$numOfRows = $_POST['num_input'];
}
HTML / JavaScript的:
<html>
<head>
<script>
function insertRows(){
var numOfRows = <?php echo json_encode($numOfRows) ?>;
var out = "<table><tr><th>test</th>";
for (i = 0; i < numOfRows; i++){
out += "<th>test</th>";
}
out += "</tr></table>";
document.getElementById("table").innerHTML = out;
}
</script>
</head>
<body>
<form action="index.php" method="post">
<textarea id="num_input" name ="num_input"></textarea>
<button type="button" name="button" onclick="insertRows()"> Go </button>
</form>
<p id="table"></p>
</body>
</html>
没有任何错误或任何事情,因为我没有使用IDE,只是在vim中执行它但错误就是不会发生。如果我将for循环中的“numOfRows”更改为它的数字,那么我很确定json_encode是问题所在。
谢谢!
编辑:
只是为了测试它,我使用了一个字符串变量$str = "test";
的php文件,而不是使用for循环,我只是编辑了javascript到
var str = <?php echo json_encode($str); ?>;
alert(str);
我也试过
var str = <?php echo $str; ?>;
alert(str);
但没有任何作用。
答案 0 :(得分:3)
json_encode
不是必需的。
简单地替换
var numOfRows = <?php echo json_encode($numOfRows); ?>;
与
var numOfRows = <?php echo (int)$numOfRows; ?>;
答案 1 :(得分:0)
编辑:你错过了;在
<?php echo json_encode($numOfRows) ?>
应该是
<?php echo json_encode($numOfRows);?>
在这些情况下,如果检查服务器日志会很好,这将自动使您更好地自己发现这些错误。
你正在混合整数和字符串。 PHP中的数据库总是返回字符串以及在for循环中将变量用作int的方式。
我认为以下改变将取得正确的结果。
$numOfRows = intval($_POST['num_input']);
在使用PHP转换为整数函数的地方,存在全局级别。
答案 2 :(得分:-1)
你没有忘记任何$。 JS不需要$ for变量。
就你的json_encode而言,如果你只是将一个整数从PHP传递给JS,则不需要json_encode。只需将变量传递给JS,作为JS源代码中的<?=$numOfRows?>
。