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

Php 为什么要在发布公司名称时发布ID?,php,mysql,post,mysqli,Php,Mysql,Post,Mysqli,大多数情况下,我都是用这个代码工作的。我有一个问题,它在哪里发布公司id而不是公司名称 我不明白为什么。这里有人能看看这个代码并告诉我错误在哪里吗 表是comp,字段是comp_id和name 测试页面为: 我知道我遗漏了一些东西,但我已经盯着这段代码看太久了,我再也看不到明显的错误了。谢谢 <?php require_once('connectvars.php'); $dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD,

大多数情况下,我都是用这个代码工作的。我有一个问题,它在哪里发布公司id而不是公司名称

我不明白为什么。这里有人能看看这个代码并告诉我错误在哪里吗

表是comp,字段是comp_id和name

测试页面为:

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

<?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>';
?>

您的选项值是comps的id,当您提交带有下拉列表的表单时,发送的是每个下拉列表中所选选项的值,而不是显示的文本

您应该更改此行:

       echo "<option value='{$row['comp_id']}'>{$row['name']}</option>\n";
$comp = mysqli_real_escape_string($dbc, trim($_POST['comp']));
echo“{$row['name']}\n”;
为此:

    echo "<option value='{$row['name']}'>{$row['name']}</option>\n";
echo“{$row['name']}\n”;
如果这对你有帮助,请告诉我

编辑 您的代码上实际上有两个错误,第一个是上面的更改,第二个是您的
表单
标记没有
操作
属性。 您需要指定它,以便表单在某处发布内容

应该是这样的:

<?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 } ?>

在_script.php上,您需要使用
$\u POST['comp']


让我知道这是否解决了问题

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

您应该更改此行:

       echo "<option value='{$row['comp_id']}'>{$row['name']}</option>\n";
$comp = mysqli_real_escape_string($dbc, trim($_POST['comp']));
echo“{$row['name']}\n”;
为此:

    echo "<option value='{$row['name']}'>{$row['name']}</option>\n";
echo“{$row['name']}\n”;
如果这对你有帮助,请告诉我

编辑 您的代码上实际上有两个错误,第一个是上面的更改,第二个是您的
表单
标记没有
操作
属性。 您需要指定它,以便表单在某处发布内容

应该是这样的:

<?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 } ?>

在_script.php上,您需要使用
$\u POST['comp']


让我知道这是否解决了问题

首先,您真的不应该使用
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 } ?>
应该是:

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

 $dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME)
        or die("MySQL error: " . mysqli_error($dbc) . "<hr>\nQuery: $query");
$dbc=mysqli\u connect(DB\u主机、DB\u用户、DB\u密码、DB\u名称)
或者死(“MySQL错误:.mysqli_错误($dbc)。”
\nQuery:$query”);

因此,当您给
mysqli\u real\u escape\u string
提供
$dbc
参数时,它不知道那是什么,因为您在尝试将其作为参数提供后定义了
$dbc

首先,您真的不应该使用
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 } ?>
应该是:

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

 $dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME)
        or die("MySQL error: " . mysqli_error($dbc) . "<hr>\nQuery: $query");
$dbc=mysqli\u connect(DB\u主机、DB\u用户、DB\u密码、DB\u名称)
或者死(“MySQL错误:.mysqli_错误($dbc)。”
\nQuery:$query”);

因此,当您给
mysqli\u real\u escape\u string
参数
$dbc
时,它不知道那是什么,因为您在尝试将其作为参数提供后定义了
$dbc

我解决了这个问题,这里的人提供了帮助,并为我指明了正确的方向。问题是,不是一个人给出了正确的答案,而是多个人给出了部分完整的答案

这是完整的脚本

<?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>';
?>

我解决了这个问题,这里的人帮了我的忙,为我指明了正确的方向。问题是,不是一个人给出了正确的答案,而是多个人给出了部分完整的答案

这是完整的脚本

<?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>';
?>


嗯。。。不要只是盯着代码看。执行一些主动调试,例如在浏览器中检查生成的HTML,使用
var\u dump()
显示收到的post值,检查生成的SQL代码……您的页面上会出现
mysqli\u real\u escape\u string()
警告。是
mysqli_connect()中的第一个参数功能链接标识符?@Sooper,我不知道。我也注意到了。@阿尔瓦罗,怎么做?最重要的是:请停止将数据库查询和HTML混合在一起。将所有查询分解成一个函数库,这些函数返回所需的数据数组,然后用foreach()构建表单,这样调试和升级就更清晰、更容易了。@DampeS8N您是如何做到的?嗯。。。不要只是盯着代码看。执行一些主动调试,例如在浏览器中检查生成的HTML,使用
var\u dump()
显示收到的post值,检查生成的SQL代码……您的页面上会出现
mysqli\u real\u escape\u string()
警告。是
mysqli_connect()中的第一个参数功能链接标识符?@Sooper,我不知道。我也注意到了。@阿尔瓦罗,怎么做?最重要的是:请停止将数据库查询和HTML混合在一起。将所有查询分解成一个函数库,这些函数返回所需的数据数组,然后在其上使用foreach()来构建表单,这样调试和升级就会更清晰、更容易。@DampeS8N怎么做?我现在遇到一个错误:警告:mysqli_real_escape_string()希望参数1是mysqli,第5行的\kaboomlabs.com/PDI/test4.php中给出了null,这是因为您在尝试将其用作
mysqli\u real\u escape\u string
的参数后定义了
$dbc
。请看我答案的底部。很抱歉没有将其切换为php和html的混合。我花了太长时间试图用php来完成这项工作。我只想要一个php用法的答案。@Deleteman我已经照你说的做了,现在根本没有发布。@MattRidge你可能在那里有另一个错误,因为我提出的更改不会影响该wa中的表单