Прежде всего, вы действительно не должны использовать 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>
элементов.Браузер не размещает то, что находится между тегами («внутренний 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
после того, как пытаетесь его предоставитьв качестве параметра.