PHP数组不能存储变量
PHP array won't store a variable
我正在做一个网站,在编码的时候,我遇到了一个奇怪的bug。
我将MySQL查询结果存储在一个数组中,然后使用存储的数据调用JavaScript函数。数组最初包含9个元素:8个是tinyint(4)类型(在数据库中-我不知道它是否有用),一个是int(11)类型。后来,我意识到我也必须传递一个String,所以我包含了一个Varchar(40)类型的项。
问题在这里。到目前为止,代码运行没有任何错误—我可以传递变量,在JS代码中使用它们并在站点上显示它们。只要我包含这个字符串,网站就会崩溃(什么都不显示)。
代码如下:
<?php
// Create connection
$con=mysqli_connect("mysql7.000webhost.com","a2248489_admin","SQL123DevAdmin","a2248489_players");
$con2=mysqli_connect("mysql7.000webhost.com","a2248489_admin","SQL123DevAdmin","a2248489_players");
// Check connection
$troopArray = array(array());
$result = mysqli_query($con,"SELECT ID, Name FROM Player");
$counter = 0;
while($row = mysqli_fetch_array($result)) {
$troops = mysqli_query($con,"SELECT * FROM Troops WHERE ID = '" . $row['ID'] . "' ");
while($sor = mysqli_fetch_array($troops)) {
$troopArray[$counter][0] = $sor['archerLvl'];
$troopArray[$counter][1] = $sor['giantLvl'];
$troopArray[$counter][2] = $sor['wizardLvl'];
$troopArray[$counter][3] = $sor['balloonLvl'];
$troopArray[$counter][4] = $sor['dragonLvl'];
$troopArray[$counter][5] = $sor['minionLvl'];
$troopArray[$counter][6] = $sor['hogLvl'];
$troopArray[$counter][7] = $sor['golemLvl'];
$troopArray[$counter][8] = $sor['witchLvl'];
$troopArray[$counter][9] = $row['ID'];
$troopArray[$counter][10] = $row['Name'];
$counter++;
}
}
//------------------Writing the name into a new DIV------------------------
echo '<script type="text/javascript">';
echo 'var nameButton = document.createElement("input");';
echo 'nameButton.setAttribute("type","button");';
echo 'nameButton.setAttribute("value","' . $row['Name'] . '");';
echo 'nameButton.setAttribute("name","' . $row['ID'] . '");';
echo 'nameButton.style.backgroundImage="url('"images/login_button/button_name.png'")";';
echo 'nameButton.style.marginLeft = "5px";';
echo 'nameButton.style.marginTop = "0px";';
echo 'nameButton.style.height="60px";';
echo 'nameButton.style.width="200px";';
echo 'nameButton.style.border ="none";';
echo 'nameButton.style.backgroundColor ="transparent";';
echo 'nameButton.style.fontWeight="900";';
echo 'nameButton.style.paddingLeft="50px";';
echo 'nameButton.style.textAlign="left";';
echo 'nameButton.onclick = function()
{
TableDraw(' . $troopArray[0][0] . ',' . $troopArray[0][1] . ',' . $troopArray[0][2] . ',' . $troopArray[0][3] . ',' . $troopArray[0][4] . ',' . $troopArray[0][5] . ',' . $troopArray[0][6] . ',' . $troopArray[0][7] . ',' . $troopArray[0][8] . ',' . $troopArray[0][9] . ',' . $troopArray[0][10] . ');
};';
echo 'document.body.appendChild(nameButton);';
echo '</script>';
echo '<br>';
?>
一切都好,直到$troopArray[$counter][10] = $row['Name'];
,我甚至使用它以后,当我把它设置为一个按钮的文本。如果我将'Name'更改为'ID',代码将运行。
据我所知,我可以在PHP数组中存储任何类型的变量,因为它不是真正的数组。但是为什么我不能在整数中存储字符串呢?
我在你的代码中没有看到任何错误,但是有一件事对我来说很奇怪:
$troopArray = array(array());
你应该把这一行改成:
$troopArray = array();
检查问题是否仍然存在
一个额外的事情是你的$counter
总是0。它不会引起问题但也许你想在循环结束前增加它?
编辑
如果问题仍然发生,你应该向我们展示整个循环代码(现在它在第一个循环后结束,也许以后你在某个地方改变你的$row
变量
我看不出问题,但是可以重新编码使用JOIN并将循环保存在循环内吗?假设它们都在同一个数据库
$troopArray = array();
$counter = 0;
$sql = "SELECT a.ID, a.Name, b.archerLvl, b.giantLvl, b.wizardLvl, b.balloonLvl, b.dragonLvl, b.minionLvl, b.hogLvl, b.golemLvl, b.witchLvl
FROM Player a
INNER JOIN Troops b
ON a.ID = b.ID";
$result = mysqli_query($con,$sql);
while($row = mysqli_fetch_array($result))
{
$troopArray[$counter] = array();
$troopArray[$counter][0] = $row['archerLvl'];
$troopArray[$counter][1] = $row['giantLvl'];
$troopArray[$counter][2] = $row['wizardLvl'];
$troopArray[$counter][3] = $row['balloonLvl'];
$troopArray[$counter][4] = $row['dragonLvl'];
$troopArray[$counter][5] = $row['minionLvl'];
$troopArray[$counter][6] = $row['hogLvl'];
$troopArray[$counter][7] = $row['golemLvl'];
$troopArray[$counter][8] = $row['witchLvl'];
$troopArray[$counter][9] = $row['ID'];
$troopArray[$counter][10] = $row['Name'];
$counter++;
}
如果你这样做,你可以尝试做每个$row的print_r和$troopArray的print_r当它已经填充,并检查它们看起来正确。
作为题外话,名字是否恰好是一个数字?
编辑-问题似乎是你从这个数组分配值到一个javascript数组。您已经将它分配到javascript数组中,没有周围的引号。这可能会导致javascript试图找到一个名为Name的值的变量来分配到数组中。
- 当我按下getroute按钮时,我希望我的javascript变量存储在数据库中
- Javascript全局变量存储在哪个对象中
- 将javascript变量存储到HTML文本框中
- 如何将angular.js模型变量存储在javascript变量中
- 如何使用 AngularJS 将变量存储在数组中
- 简单的事情,如何将变量存储到数组中
- 将变量存储到数组 JavaScript 中
- 全局变量存储在 Node.JS 中的什么位置?节点中是否有类似窗口的对象
- 将变量存储到我的服务器
- Selenium IDE - 我可以将Selenium变量存储到javascript变量中吗?
- 如何将这三个变量存储到本地存储中
- 有没有办法将会话变量存储在 AJAX 调用的 javascript 中或仅存储在方法中
- 如何将javascript变量存储到php中
- mootools将变量存储在IE中iframe的父级中
- 将包含数据的变量存储到Mysql中
- 变量存储函数作为基元类型或引用类型
- 将javascript变量存储在mysql数据库中
- 对于Loop/Each Loop变量存储和比较(jQuery或Javascript
- 如何使用AJAX将javascript变量存储到我的sql数据库中
- 将javascript变量存储在数据属性中并进行检索