0

この質問が間接的に説明されていることは知っていますが、それを正しく理解することはできません. 教師が演習などを作成するための数学ツールを構築しています。データベースには多くの個人が入力されており、データベースには演習ごとにテーブルがあり、実際の行は一意に設定されています。特定の演習には複数の回答がある可能性があるため、後の段階で動的に作成される解決策マニュアルにリンクする別のテーブル「解決策」があります。これまでの私のコードは次のとおりです。

<?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 を介して数値をカウントする必要があります。

また、mysql_* は非推奨であるため、mysqli_functions を使用する必要があります (少なくとも、ここにいる人々はそれを何度も繰り返しています)。FALSE は、空のセットではなく、エラーでのみ発生します。

于 2013-05-31T22:31:39.043 に答える
0

すぐに大規模な SQL インジェクションの脆弱性が見られます。少なくとも、データのサニタイズ中は mysql_* 関数ではなく mysqli_* 関数を使用する必要があります。最良のケースは、PDO を学ぶことです。

オブジェクト指向の PDO は習得に時間がかかるかもしれませんが、それだけの価値があります。

于 2013-05-31T22:32:45.563 に答える