我目前正在为高中的班级进行测验。
我需要从表单中获取数据然后插入,之后它应该更新插入的行以及测验所获得的点。
我目前正在使用以下代码,但我没有在成员数据库中获得积分更新。
$conn= mysql_connect($servername,$username,$password)or die(mysql_error());
mysql_select_db("kiggeded_marketingmix",$conn);
mysql_query("SET NAMES 'utf8'");
mysql_query("SET CHARACTER SET utf8");
$q1="SELECT point FROM questions WHERE dif = '1'";
$q2="SELECT point FROM questions WHERE dif = '2'";
$q3="SELECT point FROM questions WHERE dif = '3'";
$q4="SELECT point FROM questions WHERE dif = '4'";
$q5="SELECT point FROM questions WHERE dif = '5'";
$q6="SELECT point FROM questions WHERE dif = '6'";
$q7="SELECT point FROM questions WHERE dif = '7'";
$q8="SELECT point FROM questions WHERE dif = '8'";
$q9="SELECT point FROM questions WHERE dif = '9'";
$q10="SELECT point FROM questions WHERE dif = '10'";
$q11="SELECT point FROM questions WHERE dif = '11'";
$q12="SELECT point FROM questions WHERE dif = '12'";
$q13="SELECT point FROM questions WHERE dif = '13'";
$q14="SELECT point FROM questions WHERE dif = '14'";
$q15="SELECT point FROM questions WHERE dif = '15'";
$q16="SELECT point FROM questions WHERE dif = '16'";
$q17="SELECT point FROM questions WHERE dif = '17'";
$q18="SELECT point FROM questions WHERE dif = '18'";
$q19="SELECT point FROM questions WHERE dif = '19'";
$q20="SELECT point FROM questions WHERE dif = '20'";
$q21="SELECT point FROM questions WHERE dif = '21'";
$q21="SELECT point FROM questions WHERE dif = '22'";
$point= $q1 + $q2 + $q3 + $q4 + $q5 + $q6 + $q7 + $q8 + $q9 + $q10 + $q11 + $q12 + $q13 + $q14 + $q15 + $q16 + $q17 + $q18 + $q19 + $q20 + $q21 + $q22;
$sql="INSERT INTO members
(uid, username, first_name, last_name, q2, q3, q4, q5, q6,
q7, q8, q9, q10, q11, q12, q13, q14, q15, q16, q17, q18,
q19, q20, q21, q22) VALUES
('$_GET[uid]', '$_GET[username]', '$_GET[first_name]', '$_GET[last_name]', '$_GET[q2]',
'$_GET[q3]', '$_GET[q4]', '$_GET[q5]', '$_GET[q6]', '$_GET[q7]', '$_GET[q8]',
'$_GET[q9]', '$_GET[q10]', '$_GET[q11]', '$_GET[q12]', '$_GET[q13]', '$_GET[q14]',
'$_GET[q15]', '$_GET[q16]', '$_GET[q17]', '$_GET[q18]', '$_GET[q19]', '$_GET[q20]',
'$_GET[q21]','$_GET[q22]')";
$sql2="UPDATE members SET point='$point' WHERE uid='$_GET[uid]'";
$result=mysql_query($sql,$conn) or die(mysql_error());
$result=mysql_query($sql2,$conn) or die(mysql_error());
header("Location: http://kiggede.dk/quiz/?tak=1");
答案 0 :(得分:1)
你的SELECT墙是没用的。将它们减少为:
SELECT point FROM questions WHERE dif BETWEEN 1 AND 22;
在使用任何结果数据之前,必须执行选择查询 并将其作为任何其他查询提取。上面的代码定义了字符串并执行了字符串的添加。
不要用php计算,让数据库决定是否应该添加,取决于应该更新(或不更新)。
最后:在任何情况下都没有直接联系$ _GET VALUES到QUERY STRING。您必须首先将它们转义为数据库所需的安全性(请查看mysql_real_escape_string())。
作为对未来的暗示:我建议在任何情况下使用预备语句。我还建议使用MySQLi(或更好的PDO)进行数据库交互。 PHP MySQL扩展不推荐使用PHP 5.5。
答案 1 :(得分:0)
如果这是您的完整代码,您忘记实际从数据库中选择点。
$q1="SELECT point FROM questions WHERE dif = '1'";
$result1=mysql_query($q1,$conn)
$q2="SELECT point FROM questions WHERE dif = '2'";
$result2=mysql_query($q2,$conn)
[...]
我还建议像
一样计算所有内容$q="SELECT count(point) FROM questions WHERE dif between 1 and 22";
$result=mysql_query($q,$conn)
答案 2 :(得分:-1)
uid
时,应引用 $_GET
$sql2="UPDATE members SET point='$point' WHERE uid = '" . $_GET['uid'] . "'";
但是,此代码极易出现SQL注入。您应该清理用户输入。