ホーム>source

私の目標は、 INSERT INTO testquiz に使用する一般的なテンプレートを作成することです(MySQLテーブル)。これは、クイズの結果とクイズ受験者からのユーザー情報(名前と電子メールはデータベースでの唯一のユーザー入力です)を格納するために使用されます。私はPHP/MySQLを初めて使用するので、つまずくように感じます。

私の問題は、 $_POST を取得できないことですクイズによって生成され、データベースに表示される値。基本的なエコーで表示されるため、値が生成されていることはわかっています。同様に機能している値で機能する「電子メールに送信」機能があります。 $_POST に値を手動で割り当てれば、このコードを機能させることができます最初のコメントブロックのコメントを外して配列。

ここで何が欠けていますか?

補足:セキュリティに関する提案も行います。ありがとうございました。

以下のコード(ユーザー固有の情報は省略):

<前>ウィズウィズ <?php //disable magic quotes (PHP book says it's a good idea) if (get_magic_quotes_gpc()) { $process = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST); while (list($key, $val) = each($process)) { foreach ($val as $k => $v) { unset($process[$key][$k]); if (is_array($v)) { $process[$key][stripslashes($k)] = $v; $process[] = &$process[$key][stripslashes($k)]; } else { $process[$key][stripslashes($k)] = striplashes($v); } } } unset($process); } /* //Manually declare $_POST variables (can be disabled) $_POST['v'] = '6.5.1'; $_POST['sp'] = 80; $_POST['psp'] = 75; $_POST['tp'] = 80; $_POST['sn'] = 'user'; $_POST['se'] = 'abc123@fake.com'; $_POST['qt'] = 'Test Quiz'; */ //Assign $_POST values to static variables??? $version = $_POST['v']; $points = $_POST['sp']; $passing_percent = $_POST['psp']; $gained_score = $_POST['tp']; $username = $_POST['sn']; $email = $_POST['se']; $quiz_title = $_POST['qt']; //MySQL database connection PDO try { $pdo = new PDO('mysql:host=localhost;dbname=quizresults', 'user', 'password'); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $pdo->exec('SET NAMES "utf8"'); } catch (PDOException $e) { $error = 'Unable to connect to the database server.'; include 'error.html.php'; exit(); } //Prepare input for database entry try { $sql = $pdo->prepare("INSERT INTO testquiz (version, points, passing_percent, gained_score, username, email, quiz_title, date) VALUES (:version, :points, :passing_percent, :gained_score, :username, :email, :quiz_title, CURDATE())"); $sql->execute(array(":version" => $version, ":points" => $points, ":passing_percent" => $passing_percent, ":gained_score" => $gained_score, ":username" => $username, ":email" => $email, ":quiz_title" => $quiz_title)); //echo for debugging purposes echo $version . '<br />', $points . '<br />', $passing_percent . '<br />', $gained_score . '<br />', $username . '<br />', $email . '<br />', $quiz_title . '<br />', date(DATE_ATOM); } catch (PDOException $e) { $error = 'Error adding quiz results to database: ' . $e->getMessage(); include 'error.html.php'; exit(); } //Calculate user score $points_num = (int)$points; $passing_num = ((int)$passing_percent)/100 * (int)$gained_score; //Write results to a text file $f = fopen("result.txt", "w") or die("Error opening file 'result.txt' for writing"); fwrite($f, "--------------------------\n"); fwrite($f, "User name: ".$username."\n"); fwrite($f, "User email: ".$email."\n"); fwrite($f, "Quiz title: ".$quiz_title."\n"); fwrite($f, "Points awarded: ".$points."\n"); fwrite($f, "Total score: ".$gained_score."\n"); fwrite($f, "Passing score: ".$passing_num."\n"); if ($points_num >= $passing_num) { fwrite($f, "User passes\n"); } else { fwrite($f, "User fails\n"); } fwrite($f, "--------------------------\n"); if($f) { fclose($f); } ?>
あなたの答え
  • 解決した方法 # 1

    これですべてが解決するかどうかはわかりませんが

    <前>ウィズウィズ

    でなければなりません:

    <前>ウィズウィズ

    $sql->execute(array(":version" => $version, ":points" => $points, ":passing_percent" => $passing_percent, ":gained_score" => $gained_score, ":username" => $username, ":email" => $email, ":quiz_title" => $quiz_title)); を削除します  配列から。 PDOが変数に「名前を付ける」だけです。

    $sql->execute(array("version" => $version, "points" => $points, "passing_percent" => $passing_percent, "gained_score" => $gained_score, "username" => $username, "email" => $email, "quiz_title" => $quiz_title));

関連記事

  • 前へ java - JPAクエリ:サブクエリをグループ化条件に結合する
  • 次へ angular - エラーTS1005: ':'にはTypeScript Angular6が必要です