concat显示名字和姓氏,但只有第一个名称保存到mysql数据库

时间:2013-03-28 15:08:07

标签: php mysql mysqli

我已在网上搜索了几个小时,我无法找到原因,如果它在表单中正确显示为什么它不能正确保存到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);

所以只是为了说明concat会显示例如funky monkey但只有funky会被保存到数据库中。

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'];
}

关于我如何获得完整名单的任何建议?

3 个答案:

答案 0 :(得分:0)

看起来您没有正确使用数据库。你应该为学生选择一个ID,以及他们的名字,例如

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

然后使用

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

在您的表单中。

提交后,您将$ id值插入您的eventsform,现在您已根据该公共ID字段在事件与学生之间建立了链接。你的系统基本上会搞砸任何碰巧分享名字的学生。例如“John Smith”(身份#42)被拘留,但您只在事件报告中存储“John Smith”。现在John Smith(#37)和John Smith(#203)也陷入困境。

答案 1 :(得分:-1)

您正在尝试插入包含全名的“studentname”字段,但您可以从“First_name”和“Last_name”中检索它。您可以在右侧字段中插入名字和姓氏(我建议使用),也可以在字段中插入全名。

编辑 - 看起来像某人正在玩得很开心,直接低估答案,长大。

答案 2 :(得分:-1)

您有HTML错误。

在这一行

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

您需要在$row['fullnane'] ....

之间添加单引号
"<option  value='".$row['fullname']."'>"