Почему это публикует идентификатор, если он предназначен для размещения названия компании? - PullRequest
0 голосов
/ 30 декабря 2011

В основном этот код работает.У меня проблема в том, что он публикует 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 ]

2 голосов
/ 30 декабря 2011

Значения параметров - это идентификаторы композиций, и при отправке формы с раскрывающимися списками отправляется значение выбранного параметра для каждого раскрывающегося списка, а не отображаемый текст.

Вы должны изменить эту строку:

       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 голос
/ 31 декабря 2011

Я решил эту проблему, люди здесь помогли, и указали мне в правильном направлении.Проблема заключалась в том, что не один человек дал правильный ответ, а несколько человек дали часть полного ответа.

Вот сценарий целиком.

<?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>';
?>
0 голосов
/ 30 декабря 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...