0

我知道这个问题已经被间接解释了,但我只是无法把它弄好。我正在为教师创建一个数学工具来创建练习等。数据库由许多人组成,我的数据库为每个练习都有一个表格,它的实际行是唯一的。鉴于给定的练习可以有多个答案,还有另一个表“resolución”链接到在后期动态创建的决议手册。到目前为止,我的代码是这样的:

<?php

$continued = mysql_connect("localhost","root","");
if ($continued) {
   echo ("Connection is succeed");
} else {
   echo ("Connection is fail");
}
mysql_select_db("Problemas Calculo 1");

$provisional = null;
$provisional = mysql_query ("SELECT 'Id_ejercicio' FROM `Problemas Calculo 1`.`Ejercicios` WHERE `Ejercicios`.`ejercicio = '$_POST[ejercicio]'");
if ($provisional === null){
  $Ejer_result = mysql_query("INSERT INTO `Problemas Calculo 1`.`Ejercicios` (`Id_ejercicio`, `Tipo`, `Clase`, `Tema`, `Ejercicio`, `Dificultad`) VALUES (NULL, ".$_POST['tipo'].", ".$_POST['clase'].", ".$_POST['tema'].", '$_POST[ejercicio]', ".$_POST['dificultad'].")");
if ($Ejer_result) {
    echo ("<br> succeed");
    $Ejer_resolucion = mysql_query("INSERT INTO `Problemas Calculo 1`.`Resolucion` (`id_resolucion`,`id_ejercicio`) VALUES (NULL, LAST_INSERT_ID())");
  } else {
      echo ("<br> fail");
  }
} else {
  echo ("Ejercicio ya existe; se creara nueva solucion");
  $Ejer_resolucion = mysql_query("INSERT INTO `Problemas Calculo 1`.`Resolucion` (`id_resolucion`,`id_ejercicio`) VALUES (NULL, '$provisional')");
  if ($Ejer_resolucion) {
      echo ("<br> succeed Resolucion");
  } else {
      echo ("<br> fail Resolucion");
  }    
}

?>

我认为我的问题在于设置变量 $provisional

4

2 回答 2

2

mysql_query 返回一个结果集标识符,你不应该检查它是否为 NULL 或 false,而应该通过 mysql_numrows 计算数字。

此外,您应该使用 mysqli_functions 因为 mysql_* 已被弃用(至少这里的人们一遍又一遍地重复这一点)。FALSE 仅出现在错误中,而不出现在空集中。

于 2013-05-31T22:31:39.043 回答
0

我马上就看到了一个巨大的 SQL 注入漏洞。至少,您应该在清理数据时使用 mysqli_* 函数而不是 mysql_* 函数。最好的情况是学习 PDO。

面向对象的 PDO 可能是一个学习曲线,但非常值得。

于 2013-05-31T22:32:45.563 回答