0

オンラインで何時間も検索しましたが、フォームに正しく表示されているのに、mysql データベースに正しく保存されない理由がわかりません。

私のフォームには、学生の名前を表示するドロップダウンがあり、次のコードを使用してドロップダウンの姓名を取得します。

<?php
$stud_sql = "SELECT CONCAT (First_name,' ', Last_name) AS fullname FROM students";
$stud_results = mysqli_query($db_conx, $stud_sql);
        echo "<select  name='fullname'>";
        while ($row = mysqli_fetch_array($stud_results, MYSQLI_ASSOC)){
            $fullname = $row['fullname'];
            echo "<option  value=".$row['fullname'].">" . $row['fullname'] . "</option>";
            }
            echo "</select>";
            ?>

フォームのドロップダウンには名と姓が完全に表示されますが、mysql データベースに投稿しようとすると、両方ではなく名のみが保存されますか?

以下は、データベースに投稿するためのコードです。

if (isset($_POST['fullname']) && ($_POST['fullname'] !='')){
$studentname = $_POST['fullname'];

    if (empty($studentname))
    {
        $errors[] = "Missing student name.";
    }

if (count($errors) > 0)
    {
        //there were validation errors, prepare error message
        $response = "<span style=\"color:red;\">";
        $response .= "the following errors occured:\n";
        $response .= "<ul>";
        $response .= '<li>' .implode('</li><li>', $errors) . '</li>';
        $response .= "</ul>\n";
        $response .= "</span>\n";
    }
else
    {
        //No validation errors, save the dat to database
        $studentname = mysqli_real_escape_string($db_conx, $studentname);
$sql = "INSERT INTO incidentform  (`studentname`) value ('$studentname')";
$query = mysqli_query($db_conx, $sql);

明確にするために、連結はたとえばファンキーモンキーを表示しますが、ファンキーのみがデータベースに保存されます。

OK marc B はフルネームをデータベースに保存するこれらの変更を提案しましたが、ドロップダウンには 1 つの名前しか表示されませんか?

Name of Student:
        <select  name='fullname'>
        <option  value="$id"><?php echo $fullname; ?></option>
        </select>
and
$stud_sql = "SELECT id, CONCAT (First_name,' ', Last_name) AS fullname FROM students";
$stud_results = mysqli_query($db_conx, $stud_sql);


   while ($row = mysqli_fetch_array($stud_results, MYSQLI_ASSOC)){

            $fullname = $row['fullname'];
}

完全なリストを取り戻す方法について何か提案はありますか?

4

3 に答える 3

0

データベースを正しく使用していないようです。生徒の ID と名前を選択する必要があります。

SELECT id, CONCAT(first_name, ' ', last_name)
FROM students

そして使用する

<option value="$id">$fullname</option>

あなたの形で。

送信時に、その $id 値をインシデントフォームに挿入すると、その共通の id フィールドに基づいて、インシデントと学生の間のリンクが得られます。あなたのシステムは、たまたま同じ名前の生徒を台無しにしてしまうでしょう。たとえば、"John Smith" (id #42) は拘留されますが、インシデント レポートには "John Smith" のみが保存されます。現在、ジョン・スミス (#37) とジョン・スミス (#203) も困っています。

于 2013-03-28T15:19:07.053 に答える
-1

フルネームを保持するフィールド「studentname」に挿入しようとしていますが、「First_name」と「Last_name」から取得しています。右のフィールドに姓名を挿入するか (これをお勧めします)、フルネームをフィールドに挿入します。

編集 - 誰かが答えを即座に反対票を投じて楽しんでいるように見えます。

于 2013-03-28T15:12:29.153 に答える
-1

HTML エラーがあります。

この行で

"<option  value=".$row['fullname'].">" 

$row['fullnane']...の間に一重引用符を追加する必要があります。

"<option  value='".$row['fullname']."'>" 
于 2013-03-28T15:12:35.047 に答える