Опрос HTML / PHP не передается в базу данных MySQL должным образом

#php #mysql #html

#php #mysql #HTML

Вопрос:

Я пытаюсь создать небольшой опрос, который заполняет варианты выбора для выпадающего меню из списка имен из базы данных. Опрос выполняет это должным образом. Я хочу отправить предложение, которое пользователь отправляет с этим именем, в базу данных предложений. Текст цитаты, который они вводят в поле, поступает правильно, однако имя, выбранное из меню, не передается. Вместо этого я получаю пустое поле имени.

Я понимаю, что часть моего кода вырвана из контекста, но имя — это единственное, что не передается должным образом.

При отправке формы я включаю php-файл, который отправляет эти данные в базу данных:

 <form action="<?php $name = $_POST['name']; include "formsubmit.php";?>" method="post">
    <label> <br />What did they say?: <br />
    <textarea name="quotetext" rows="10" cols="26"></textarea></label>
    <input type="submit" value="Submit!" />
</form>
  

Переменная $name берется из этого (которая заполняет мое выпадающее меню):

 echo "<select name='name'>";

    while ($temp = mysql_fetch_assoc($query)) {
    echo "<option>".htmlspecialchars($temp['name'])."</option>";
    }                       
echo "</select>";
  

И вот мой formsubmit.php:

 <?php:
    mysql_select_db('quotes');
    if (isset($_POST['quotetext'])) {
            $quotetext = $_POST['quotetext'];                                   
            $ident = 'yankees';
            $sql = "INSERT INTO quote SET 
        quotetext='$quotetext',
        nametext='$name',
        ident='$ident',
        quotedate=CURDATE()";
        header("Location: quotes.php");
    if (@mysql_query($sql)) {
    } else {
        echo '<p> Error adding quote: ' . 
            mysql_error() . '</p>';
    } 
    }
?>
  

Комментарии:

1. к чему преобразуется действие формы при рендеринге HTML-кода?

2. что вы включаете в действие тега формы?

3. @G molvi: Я включаю свой formsubmit.php который я хочу выполнить при отправке формы. Кажется, это происходит правильно, за исключением того, что name вообще не передается.

4. смотрите код ниже, и вы не получали значение name из массива $ _POST. проверьте ниже мой ответ.

5. вам действительно не обязательно включать весь php-файл в тег form action, если вы хотите оставаться на этой странице после отправки страницы, тогда включите php-код в начало того же файла и оставьте действие = »

Ответ №1:

Ваши действия с формой выглядят странно, но, несмотря на это, я думаю, что проблема, с которой вы столкнулись, связана с тем, что вы не устанавливаете $ name = $ _POST[‘name’], как вы делаете с $ quotetext = $ _POST [‘quotetext’]. Сделайте это перед инструкцией sql, и все должно быть готово.

редактировать чтобы попытаться помочь вам в дальнейшем, я укажу, какой должна быть общая структура вашего кода, и вам следует настроить ее в соответствии с вашим реальным кодом (что бы вы ни упустили, например, установив $query для ваших параметров name):

файл 1:

 <form action="formsubmit.php" method="post">
    <label> <br />What did they say?: <br />
    <textarea name="quotetext" rows="10" cols="26"></textarea></label>
    <select name='name'>
    <?php
    while ($temp = mysql_fetch_assoc($query)) {
        echo "<option>".htmlspecialchars($temp['name'])."</option>";
    }
    ?>
    </select>
    <input type="submit" value="Submit!" />
</form>
  

formsubmit.php:

 <?php
    mysql_select_db('quotes');
    if (isset($_POST['quotetext'])) {
        $quotetext = $_POST['quotetext'];
        $name = $_POST['name'];
        $ident = 'yankees';
        $sql = "INSERT INTO quote SET 
                quotetext='$quotetext',
                nametext='$name',
                ident='$ident',
                quotedate=CURDATE()";
        if (@mysql_query($sql)) {
            header("Location: quotes.php");
        } else {
            echo '<p> Error adding quote: ' . 
                mysql_error() . '</p>';
        } 
    }
?>
  

Комментарии:

1. ваша форма action = «» должна быть установлена в файл, в который она будет отправляться, в данном случае это должно быть form action =»formsubmit.php «. Переместите $name = $_POST[‘name’] в строку ниже, где вы устанавливаете $quotetext и тестируете.

2. Я думаю, что эта проблема сводится к отсутствию правильной структуры кода для отправки формы на страницу php. Посмотрите мои правки, надеюсь, они помогут прояснить, что вы должны здесь делать. Проблема с именем ЗАКЛЮЧАЕТСЯ в том, что оно не задается в вашем formsubmit.php , таким образом, тот факт, что предыдущее исправление не сработало, говорит о том, что ваша структура кода немного не в порядке.

Ответ №2:

 echo "<select name='name'>";

    while ($temp = mysql_fetch_assoc($query)) {
     $nyme = htmlspecialchars($temp['name']);
    echo "<option value='$nyme'>$nyme</option>";
    }                       
echo "</select>";-
  

Таким образом, вы получите значение имени в массиве $_POST

и вам также нужно получить это значение из массива $ _POST, вам также нужно изменить код, добавив следующую строку, чтобы получить имя в вашем скрипте.

 $name = $_POST['name'];
  

вам нужно изменить тег действия формы

 <form action='formsubmit.php' .....>
  

и в этом файле после успешной вставки вы можете перенаправить пользователя на whereever.php.
итак, было забавно объяснять вам каждую вещь понемногу, измените это сейчас и в вашем коде.

 if (@mysql_query($sql)) {
          header("Location: quotes.php");

} else {
    echo '<p> Error adding quote: ' . 
        mysql_error() . '</p>';
} 
  

Комментарии:

1. я исправил код, попробуйте сейчас. и что вы включаете в тег действия формы?

2. @G molvi: Что такое «nyme»? Кроме того, я попробовал это … По-прежнему ничего.

3. @G molvi: Хорошо, итак, я попробовал следующее. Теперь мое действие: <form action =»formsubmit.php «метод=»post»> и в верхней части formsubmit.php У меня есть: $name = $ _POST[‘name’]; Но теперь в мою базу данных абсолютно ничего не поступает.

4. это потому, что вы перенаправляете пользователя на страницу перед выполнением инструкции sql. я обновил код .. попробуйте сейчас

5. @G molvi хороший улов в заголовке перед mysql_query, даже не заметил этого