添加';价值';仅使用PHP/HTML/Javascript从多个无线电类型选择到mySQL中的特定行/列

添加';价值';仅使用PHP/HTML/Javascript从多个无线电类型选择到mySQL中的特定行/列,php,html,mysql,wordpress,survey,Php,Html,Mysql,Wordpress,Survey,我已经用mySQL/myPHPAdmin创建了一个大约100个单词的数据库。我希望一个网页的用户能够“投票”的话,并保持一个连续的票数 mySQL表的格式如下: 数据库名称:paulcook_wrdp2 表名:words_首字母 id|word|排名|得分 INT | VARCHAR | INT | INT “id”自动递增1,等级和分数最初都设置为0 我创建了一个WordPress页面,该页面使用以下PHP脚本在表格中显示单词,旁边有单选按钮和提交按钮: <?php //DB Conf

我已经用mySQL/myPHPAdmin创建了一个大约100个单词的数据库。我希望一个网页的用户能够“投票”的话,并保持一个连续的票数

mySQL表的格式如下:

数据库名称:paulcook_wrdp2

表名:words_首字母

id|word|排名|得分

INT | VARCHAR | INT | INT

“id”自动递增1,等级和分数最初都设置为0

我创建了一个WordPress页面,该页面使用以下PHP脚本在表格中显示单词,旁边有单选按钮和提交按钮:

<?php

//DB Config

$servername = "localhost";
$username = "xxxx";
$password = "xxxx";
$dbname = "paulcook_wrdp2";

// Create Connection

$conn = new mysqli($servername, $username, $password, 
$dbname);

// Check Connection

if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
} 

// Table Header and Initialize Form

 echo "<table><tr><th>ID</th><th>Word</th> 
<th>Applicable?</th></tr><form name='selections' 
method='post'>";

// Fetch Required Fields

$sql = "SELECT id, word FROM words_initial";
$result = $conn->query($sql);

if ($result->num_rows > 0) {

// Output Data of Each Row and Radio Buttons

while($row = $result->fetch_assoc()) {
echo "<tr> <td>". $row["id"]. "</td><td>". 
$row["word"] . "</td><td>Y&nbsp<input type=\"radio\" 
name=\"w". $row["id"]."\" 
value=\"1\">&nbsp&nbsp&nbsp&nbsp&nbspN&nbsp<input 
type=\"radio\" name=\"w". $row["id"]."\"  
value=\"-1\"></td></tr>";
}

} else {
echo "0 results";
}

// Submit Button and Close Form and Table

echo "</table><br><input type='submit' name='submit' 
value='submit' style='background:black; 
cursor:pointer; border:none; display: block; margin- 
left: auto; margin-right: auto;'/></form>";
$conn->close();
<pre>
<?php var_dump($_POST); ?>
</pre>

如何编写process.php,使其不显示上述内容,而是使用相应的行ID将值添加到“score”列中?

您的方法有什么问题

每次投票时,您都试图更新数据库条目。(这与将您的年龄存储在数据库中并每年更新相同。相反,您可以在php脚本中存储出生日期并计算年龄。)

更好的方法
您应该跟踪用户的投票结果(通过将其存储到数据库中)。根据投票结果,你应该计算一个词的“是”和“否”的数目。然后,您可以在php脚本中计算分数。

您的方法有什么问题

每次投票时,您都试图更新数据库条目。(这与将您的年龄存储在数据库中并每年更新相同。相反,您可以在php脚本中存储出生日期并计算年龄。)

更好的方法
您应该跟踪用户的投票结果(通过将其存储到数据库中)。根据投票结果,你应该计算一个词的“是”和“否”的数目。然后,您可以在php脚本中计算分数。

您在概念上提出了一个清晰的想法,但没有服务器端代码

所以我会给你一些伪代码指导

1) 在服务器上接收提交的数据
-使用数组命名输入


2) 服务器将处理 例如:

SELECT * FROM words ORDER BY score **asc/desc** ( depending on your preference )
应该可以处理你的更新

对于按顺序阅读,SQL是您的朋友

$vote = (int) $vote;
"UPDATE `votes` SET score = ( score + $value ) WHERE id = $vote"
Round Robin需要一个接口,更新和检索的逻辑基本保持不变

编辑:

添加SQL SQL将如下所示:

注意,由于我们对$value进行了检查,它只能是1、-1或0,因此我们知道该值是一个安全值

确保$vote是安全的:在//此处检查该投票是否存在 //只需将其转换为int

我建议您对所有SQL事务使用PDO
请参见此处:

您在概念上提出了一个清晰的想法,但没有服务器端代码

所以我会给你一些伪代码指导

1) 在服务器上接收提交的数据
-使用数组命名输入


2) 服务器将处理 例如:

SELECT * FROM words ORDER BY score **asc/desc** ( depending on your preference )
应该可以处理你的更新

对于按顺序阅读,SQL是您的朋友

$vote = (int) $vote;
"UPDATE `votes` SET score = ( score + $value ) WHERE id = $vote"
Round Robin需要一个接口,更新和检索的逻辑基本保持不变

编辑:

添加SQL SQL将如下所示:

注意,由于我们对$value进行了检查,它只能是1、-1或0,因此我们知道该值是一个安全值

确保$vote是安全的:在//此处检查该投票是否存在 //只需将其转换为int

我建议您对所有SQL事务使用PDO
请参见此处:

我同意@ujjwal verma的观点,即您的方法应该是存储反馈并计算总反馈感谢@ujjwal和Craig Bezuidenhout提供您的提示。用户方法可能更好,但我正试图将代码开销降至最低,因为我没有什么技能。也就是说,我不确定是否有必要——这是为了促进研讨会,与会者将被要求进入网页并立即填写调查(他们将有15分钟的时间,届时他们将被要求提交,然后我们将进入第二轮)。跟踪谁投了不重要的票。Craig,对于你的代码,这会被插入到我已经拥有的同一个PHP脚本中吗?SQL位呢?我需要手动初始化吗?在您的PHP中,它如何知道将什么投票属性指定给什么行ID?这会增加它,还是仅仅改变它的值?再次感谢!我在phpMyAdmin中看到我可以设置触发器-所以我假设我可以设置它,以便在更新之后,我可以让它按SQL命令的顺序运行。。。现在来看看我如何能真正有它的更新!我试过上面的方法,但不幸的是,它不起作用。“进程”页面只是挂起,从不加载。我所做的是用“插入PHP”插件创建一个PHP代码片段,并将其放在一个页面上(我试着简单地通过FTP上传,但上面写着“找不到页面”。然后我在表单属性中添加了“action=/inded.php/process vots”。真糟糕。我同意@ujjwal verma的观点,你的方法应该是存储反馈并计算总反馈谢谢@ujjwal和Craig Bezuidenhout的提示。用户方法可能更好,但我正在尝试由于我的技能很低,我不确定是否有必要将代码开销降至最低。这是为了促进研讨会,与会者将被要求进入网页并立即填写调查(他们将有15分钟的时间,届时他们将被要求提交,然后我们将进入第二轮).Tracking who vote what not important.Craig,对于你的代码来说,这会被插入到我已经拥有的同一个PHP脚本中吗?SQL位呢?我会手动初始化吗?在你的PHP中,我会怎么做
$votes = filter_input(INPUT_POST, 'words');
// validate $votes
if( !is_array( $votes ) ) die( 'untimely death' );
foreach( $votes as $vote => $value ){
  // make sure it is a valid vote and value
  // if not valid SAY ASTA LA VISTA BABY
  // check here that the vote exists
  $value = (int) $value;
  if( $value !== 1 && $value !== -1 ){
     $value = 0; // 0 will have no effect
  }
  // apply the value to the database, this will be a simple SQL update
}
SELECT * FROM words ORDER BY score **asc/desc** ( depending on your preference )
$vote = (int) $vote;
"UPDATE `votes` SET score = ( score + $value ) WHERE id = $vote"