2013-08-29 60 views
0

我的网站包含几种供用户填写的表单。其中一种形式可能会导致很多工作。这就是为什么我要伸出双手同意。你看,以这种形式,将会有40场比赛。每场比赛都给用户2个输入区域(取决于他们认为游戏结束的方式)。所以在40-50场比赛中,这意味着我有80-90场需要跟踪。这两个字段将与数据库中正确的游戏配对,用户的回答将始终记住。这是我的代码卡:处理几个不同的表单输入字段php

<div class="form-left">England- Italy</div> 
       <div class="form-right"><input type="result" id="g1r1" name="g1r1" class="form-input" /></div> 
       <div class="form-dash">-</div> 
       <div class="form-right"><input type="result" id="g1r2" name="g1r2" class="form-input" /></div> 
       <div class="form-error"></div> 

<div class="form-left">Spain- Mexico</div> 
       <div class="form-right"><input type="result" id="g2r1" name="g2r1" class="form-input" /></div> 
       <div class="form-dash">-</div> 
       <div class="form-right"><input type="result" id="g2r2" name="g2r2" class="form-input" /></div> 
       <div class="form-error"></div> 

我的想法是,命名游戏game1row1和game1row2。能够将它们与数据库中正确的游戏进行匹配。问题在于插入一个带有90个字段的表格似乎很难。所以我的问题是:这怎么能以更好的方式完成?随着在插入数据库侧代码更少行..

insert into tablename (g1r1, g1r2 values 1, 0 where MATCH_ID = MATCHID) 

EDIT

为了澄清,我的表中包含的ID,USER_ID,match_id(克),homeScore(R1),awayScore( R2)。 我对g1r1和g1r2的想法是将r1和r2保存在右边(游戏)。

+0

您可以动态地进行插入查询。我不知道你会怎么做。到目前为止,你有什么? – Halcyon

+0

我没有太多的40个插入查询,但我想的东西符合数组来存储匹配器和行,但我再也不知道,这就是为什么我问。动态是什么意思? – Rocksteady

回答

2

Problem is that an insertion to a table with 90 fields seems hug[e]

user表就可以从你的游戏表和成绩,我认为是你如何使用这第三个表独立。这样,没有任何表格会有90列。这也将允许设计,使数据库的增长

我认为当前的设计是:

usser_id | g1r1 | g1r2 | g2r1 | g2r2 | g3r1 | g3r2 | ... | g50r1 | g50r2 

你的设计应该是什么样子

Users: 
user_id | ..[user info]... 

Games: 
game_id | ...[game info]... 

Scores: 
score_id | game_id | user_id | score_1 | score_2 

,以一切手段也关注@ bart2puck他的建议是用php动态地写html。这会让生活变得如此简单。更改数据库的设计后,您将能够插入分数,如:

$insert = "INSERT INTO Scores (user_id,game_id,homeScore,awayScore) VALUES "; 
foreach ($_POST['games'] as $key => $value){ 
    $insert = "(".$_POST["user_id"].",".$key.",".$value[0].",".$value[1].")"; 
} 
//run query insert 

也就是说,如果你按照name="games[game_id[]]"命名输入字段,其中game_id相当于数据库game_id例如用于游戏1:name="game[1[]]"两个该比赛的比分领域。

重要!

请确保您在运行查询之前使用查询参数或mysql转义您的帖子输入!你将得到保护,免受Bobby Tables AKA SQL注入这样

编辑:

从表名OP评论,你可能需要使用

$insert = "INSERT INTO Scores (user_id, game_id, homeScore, awayScore) VALUES "; 
foreach ($_POST["homeScore"] as $key => $value){ 
    $insert = "(".$_POST["user_id"].",".$key.",".$value.",".$_POST["awayScore"][$key].")"; 
} 
//run query insert 

如果你再命名形式的Fileds homeScore[game_id]awayScore[game_id]因此游戏的主场比分比赛为1将是name="homeScore[1]"

编辑2:

这里也是使用PHP与正确的表格名称写你的HTML,如果你按照我的最后一次编辑一个更好的办法。

for ($i = 1;$i<=40;$i++){ 
    echo "<div class='form-right'><input type='result' id='homeScore[$i]' name='awayScore[$i]' class='form-input' /></div>\n"; 
    } 
} 
+0

我有一个分数表 - > id,user_id,game_id,homeScore,awayScore。但插入部分看起来很有前途,只是要尝试它,然后我离开我的判决,谢谢:) – Rocksteady

+0

@Rocksteady从你的问题和90个领域,我认为你有一个90列的表..反正我希望它可以帮助。并记住要留意[Bobby Tables](http://bobby-tables.com/) – amaster

+0

@Rocksteady请看我编辑的答案,因为我相信这会有所帮助。 – amaster

1

1),你可以使用一个循环写您的页面,表单名称的数组

echo "<form action='$PHP_SELF' method='POST'>"; 
for ($b = 1;$b<=40;$b++) 
{ 
    $gameId = "g" . $b; 
    for ($a = 1;$a<=2;$a++) 
    { 
    $roundId = "r" . $a; 
    $fieldName = $gameId . $roundId; 

     echo "<div class='form-right'><input type='result' id='games[$fieldName]' name='games[$fieldName]' class='form-input' /></div>\n"; 
    } 
} 
echo "<input type='submit' value='submit'>"; 

后的结果会给你这样的:

[games] => Array 
    (
     [g1r1] => a 
     [g1r2] => b 
     [g2r1] => c 
     [g2r2] => d 
     [g3r1] => e 
     [g3r2] => f 
     [g4r1] => g 
     [g4r2] => h 
     [g5r1] => i 
     [g5r2] => j 
     [g6r1] => k 
     [g6r2] => l 
     [g7r1] => m 
     [g7r2] => n 
     [g8r1] => o 
     [g8r2] => p 
     [g9r1] => q 
     [g9r2] => r 
     [g10r1] => s 
     [g10r2] => t 
    ) 

,并在您处理页面:

foreach ($_POST['games'] as $key => $value) 
{ 
    $insert = "INSERT into games (" . $key . ") values ('" . $value. "')"; 
    //or whatever query you need here. 
} 
+1

@Piero通过这种方式,他可以用PHP循环在10行中编写80行表单。 – bart2puck

+0

谢谢我会马上试试这个! – Rocksteady

1

bart2puck,输出html与PHP循环是什么原因?普通的html在那里工作得很好,有助于节省一些服务器资源。表单域只是应适当命名的,像这样:

<input type="text" name="games[g1r1]" value="g1r1" /> 

然后在PHP中获得不只是$_POST$_POST['games'],你有所有表单域的阵列。

然后,你可以像这样创建查询:

$query = 'INSERT INTO `tablename`(`'.implode('`, `', array_keys($_POST['games'])).'`) VALUES("'.implode('", "', $_POST['games']).'")'; 

只是一个衬垫。

请记住在保存到数据库之前清理所有数据,否则您的应用程序可能容易受到SQL注入的影响。

相关问题