Php 为什么要在发布公司名称时发布ID?
大多数情况下,我都是用这个代码工作的。我有一个问题,它在哪里发布公司id而不是公司名称 我不明白为什么。这里有人能看看这个代码并告诉我错误在哪里吗 表是comp,字段是comp_id和name 测试页面为: 我知道我遗漏了一些东西,但我已经盯着这段代码看太久了,我再也看不到明显的错误了。谢谢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,
<?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: </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: </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: </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中的表单