为什么要在发布公司名称时发布ID?

时间:2011-12-30 13:39:07

标签: php mysql post mysqli

我的代码主要用于工作。我在发布comp_id而不是名称的位置存在问题,即公司。

我无法弄清楚原因。有人可以看看这段代码并告诉我错误在哪里?

表格是comp,字段是comp_id和name。

测试页面为:http://kaboomlabs.com/PDI/test4.php

我知道我错过了一些东西,但是我已经盯着这段代码太久了,我不再看到明显的错误了。感谢。

<?php
 require_once('connectvars.php');
        $dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME)
        or die('Error connecting to MySQL .');

if (isset($_POST['submit'])) {
    $comp = mysqli_real_escape_string($dbc,$_POST['comp']);
}


//Access the Database
    if (!empty($comp)) {
        $dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME)
        or die('Error connecting to MySQL server.');

    $query = "INSERT INTO ncmr (comp) VALUES ('$comp')";

    $data = mysqli_query($dbc, $query) or die("MySQL error: " . mysqli_error($dbc) . "<hr>\nQuery: $query");
        mysqli_close($dbc);
    }


echo "<form method='post'>";
        echo '<fieldset>';
            echo'<div id="comp">';
             $mysqli = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME); 
        $mysqli->select_db('comp');
            echo '<span class="b">Company:&nbsp;&nbsp;</span>';
            $result = $mysqli->query("SELECT * FROM comp"); 
            $i = 0;
            echo "<SELECT name='comp'>\n";
            while($row = $result->fetch_assoc()) {
            if ($i == 4) echo '<option value="lines">-----</option>';
            echo "<option value='{$row['name']}'>{$row['name']}                                 </option>\n";
            $i++;}
        echo "</select>\n";
            echo '</div>';
            echo '<div id="button"><input type="submit" value="Submit NCMR" name="submit" /></div>';
    echo '</fieldset>';
echo '</form>';
?>

3 个答案:

答案 0 :(得分:2)

您的选项值是comps的ID,当您提交带有下拉列表的表单时,发送的内容是每个下拉列表的选定选项的值,而不是显示的文本。

您应该更改此行:

       echo "<option value='{$row['comp_id']}'>{$row['name']}</option>\n";

为此:

    echo "<option value='{$row['name']}'>{$row['name']}</option>\n";

如果有帮助,请告诉我!

修改 您的代码实际上有2个错误,第一个是上面的更改,第二个是您的form标记没有action属性的事实。 您需要指定表单以便在某处发布内容。

应该是这样的:

<form method="post" action="your_script.php">

在your_script.php上,您需要使用$_POST['comp']

捕获参数

如果能解决问题,请告诉我!

答案 1 :(得分:1)

我解决了这个问题,这里的人帮助了我,并指出了我正确的方向。问题是没有一个人给出了正确答案,但是有多个人给出了完整答案的一部分。

这是完整的脚本。

<?php
 require_once('connectvars.php');
        $dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME)
        or die('Error connecting to MySQL .');

if (isset($_POST['submit'])) {
    $comp = mysqli_real_escape_string($dbc,$_POST['comp']);
}


//Access the Database
    if (!empty($comp)) {
        $dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME)
        or die('Error connecting to MySQL server.');
    $query = "INSERT INTO ncmr (comp) VALUES ('$comp')";
    $data = mysqli_query($dbc, $query) or die("MySQL error: " . mysqli_error($dbc) . "<hr>\nQuery: $query");
        mysqli_close($dbc);
    }
echo "<form method='post'>";
    echo '<fieldset>';
        echo'<div id="comp">';
            $mysqli = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME); 
                $mysqli->select_db('comp');
            echo '<span class="b">Company:&nbsp;&nbsp;</span>';
                $result = $mysqli->query("SELECT * FROM comp"); 
                $i = 0;
            echo "<SELECT name='comp'>\n";
                while($row = $result->fetch_assoc()) {
                    if ($i == 4) echo '<option value="lines">-----</option>';
            echo "<option value='{$row['name']}'>{$row['name']}</option>\n";
                $i++;
            }
        echo "</select>\n";
        echo '</div>';
        echo '<div id="button"><input type="submit" value="Submit NCMR" name="submit" /></div>';
    echo '</fieldset>';
echo '</form>';
?>

答案 2 :(得分:0)

首先,你真的不应该使用echo来输出你的所有HTML。做这样的事情会更好:

<?php
    // Connect to database, etc...
    $result = $mysqli->query("SELECT * FROM `comp`);
?>
<!-- Output your HTML here, outside of PHP tags -->
<form method="post">
    <fieldset>
        <div id="comp">
<?php while ($row = $result->fetch_assoc()) { ?>
            <option value="lines">-----</option>
            <option value='<?php echo $row['name']; ?>'><?php echo $row['name']; ?></option>
<?php } ?>

我省略了很多代码,但我希望你明白这个想法。

您发布comp_id字段的原因是因为这是<option>元素的值。浏览器不会POST标签之间的内容(“内部HTML”),它会发布value属性。我在上面展示了这一变化:

<option value='{$row['comp_id']}'>{$row['name']}</option>

应该是:

<option value='{$row['name']}'>{$row['name']}</option>

最后,您收到mysqli_real_escape_string错误的原因是因为这一行:

$comp = mysqli_real_escape_string($dbc, trim($_POST['comp']));

来吧:

 $dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME)
        or die("MySQL error: " . mysqli_error($dbc) . "<hr>\nQuery: $query");

因此,当您提供mysqli_real_escape_string $dbc参数时,它不知道那是什么,因为您在尝试将其作为参数提供后定义$dbc