如何在数据库列中存储数组

时间:2014-07-22 20:19:06

标签: php mysql database forms

我一直在尝试将数组存储在数据库列中,但还没有成功。

我一直在研究php和sql两周了,而且我没有编程背景。所以请原谅我的无知。我确定我犯了很多错误。

让我进一步解释一下我的情况。

我创建了一个网页,以便管理员可以填写一些有关某些游戏的数据。这是在登录过程之后。 当管理员到达这一点时,我没有打扰'正确的'此刻输入。我只想获取数据库中的数据。

我用mysql创建了一个名为games的表,并用我迄今为止的数据填充它:

+--------+--------+-----+-----+------+------+------+
|game_id |round_id|team1|team2|score1|score2|result| 
+--------+--------+-----+-----+------+------+------+
| 1      | 1      | A   | B   | NULL | NULL | NULL |
| 2      | 1      | C   | D   | NULL | NULL | NULL |
| 3      | 1      | E   | F   | NULL | NULL | NULL |
| 4      | 2      | E   | C   | NULL | NULL | NULL |
| 5      | 2      | A   | D   | NULL | NULL | NULL |
| 6      | 2      | F   | B   | NULL | NULL | NULL |
+--------+--------+-----+-----+------+------+------+

然后我在php页面中创建了一个表单,该页面使用此表中的数据来显示每个游戏的团队。

管理员使用此表单填写游戏分数和结果。请参阅下面的表格。此表格也需要在上表中存储值。

input.php

<?php

mysql_connect("xxx", "xxx", "xxx") or die(mysql_error()); 
mysql_select_db("xxx") or die(mysql_error()); 

$query="SELECT games_team1, games_team2 FROM games WHERE round_id = 1";

$result = mysql_query($query);

?>

<form action="someform.php" method="post">
    <table id="inputgameresults">
        <tbody>
            <tr>
                <th>Home</th>
                <th>Score 1</th>
                <th>-</th>
                <th>Score 2</th>
                <th>Away</th>
                <th>Result</th>
                </tr>   

    <?php while($row = mysql_fetch_array($result)) { ?>  

            <tr>
                <td><?php echo $row['team1']; ?></td>
                <td><input type="text" name="score1[]"/></td>
                <td> - </td>
                <td><input type="text" name="score2[]"/></td>
                <td><?php echo $row['team2']; ?></td>
                <td><input type="text" name="result[]"/></td>
            </tr>   

    <?php } ?>

            <tr>
                <td></td>
                <td</td>
                <td</td>
                <td</td>
                <td</td>
                <td><input type="submit" value="Submit"/></td>
            </tr>
        </tbody>
    </table>                    
</form>

这导致上表中表格中的3行。此表显示每个匹配的团队以及分数和结果的输入字段。 标题,游戏的三行,游戏背后的输入字段以及下面的一个sumbit按钮。

管理员可以使用下面的表单提交输入。我添加了回声,所以我可以检查输出是否正确。回声就像一个魅力。 这就是我不喜欢他们去的方式。我使用的SQL查询在表单中说明。它失败了,可能是因为我缺乏知识。

form1.php

<?php

mysql_connect("xxx", "xxx", "xxx") or die(mysql_error()); 
mysql_select_db("xxx") or die(mysql_error()); 

$sc1 = $_POST['score1'];
$sc2 = $_POST['score2'];
$res = $_POST['result'];

foreach($sc1 as $value) {
    echo "score team 1 $value<br/>";
    mysql_query("UPDATE games SET game_score1 = '".$value[]"' WHERE games_id = [1,2,3] ");
}

foreach($sc2 as $value) {
    echo "score team 2$value<br/>";

}

foreach($res as $value) {
    echo "res $value<br/>";
}

?>

除了我可以改进的主要问题或者提高效率之外,我确信还有很多东西。虽然目前这不是我的主要关注点,但欢迎任何帮助:D

现在主要关注的是从数据库中的正确位置获取表单的输入。表单中的数据需要以score1,score2和游戏结果的形式发送到数据库。

非常欢迎任何帮助或建议!

3 个答案:

答案 0 :(得分:0)

将整个数组存储在数据库列中的一种简单方法是将数组编码为json ...在示例中,$ sc1是要存储的数组

mysql_query("UPDATE games SET game_score1 = '". json_encode($sc1) . "' WHERE        
     games_id = [1,2,3,4,5,6,7,8,9] ");

然后当你从colomnu获得数组时,它仍然是json格式,所以你需要这样做

$array = json_decode($result);

有时您的数组包含带有''的元素,您只需要使用

addslashes(json_encode($sc1))

而不是使用

json_encode($sc1);

答案 1 :(得分:0)

看起来您只需要使用语法向mysql插入新行。如果game_id自动递增,则您不必在语句中指定它:

INSERT games (round_id, team1, team2, score1, score2, result) 
VALUES (3, 4, 6, 18, 1, 0, 1);

答案 2 :(得分:0)

事先,谢谢你们解决我的问题。我肯定会调查它们。

我的一位朋友告诉我,我应该使用一把钥匙&#39;这样它就可以在数据库中循环。有点像从数据库中检索数据。这似乎有效。

我使用了$ key ++,所以它会从第一个games_id开始。

foreach($sc1 as $key => $value) {
    $key++; 
    mysql_query("UPDATE games SET game_score1 = '".$value[]"' WHERE games_id = '".$key."' ");
}

我的下一个挑战是每round_id进行一次检索,并且每个round_id进行存储。 为了使它更有趣,当前的日期将指向当前的round_id:D