Почему это скрытое поле не отправляется в базу данных?? Mysql / php

#php #mysql

#php #mysql

Вопрос:

HTML / PHP

             <?php if(!empty($_GET['pID'])) $the_pID = mysql_real_escape_string($_GET['pID']);
                       if(!empty($_POST['cID'])) $the_cID = mysql_real_escape_string($_POST['cID']);

            ?>

            <form action="inc/q/prof.php?pID=<?php echo $the_pID; ?>" method="post">            
        <select id="courseInfoDD" name="courseInfoDD" tabindex="1">
                        <?php while($row3 = $sth3->fetch(PDO::FETCH_ASSOC))
                                {echo "<option>".$row3['prefix']." ".$row3['code']."</option>";}
                        ?>
                </select>       
        <select id="commQuarter" name="commQuarter" tabindex="2">
                         <option value="Fall">Fall</option>
                         <option value="Winter">Winter</option>
                         <option value="Spring">Spring</option>
                         <option value="Summer">Summer</option>
                </select>  
 <select id="commYr" name="commYr" tabindex="3">
                        <?php
                        $startdate = 2000;$enddate = date("Y");$years = range ($startdate,$enddate);foreach($years as $year){echo "<option value='$year'>$year</option>";}?>
          </select>  

        <textarea type="text" id="addComment" name="addComment" tabindex="3" value="Enter comment"> </textarea>
    <input type="hidden" name="pID" value="<?php echo $the_pID; ?>" />
    <?php if($sth3->rowCount() > 0) {
                $row3 = $sth3->fetch(PDO::FETCH_ASSOC);
            echo "<input type='hidden' name='cID' value='<?php echo $the_cID; ?>' />";
    } else {
                echo "<h1>poop</h1>.";
            }
            unset($sth3);
    ?>
    <input type="submit" name="submit" id="submit" />
    </form> 



**PHP/MYSQL**

<?php // Get select box options 
$pID3 = filter_input(INPUT_GET, 'pID', FILTER_SANITIZE_NUMBER_INT);
        $pdo3 = new PDO('mysql:host=##;dbname=###', $u, $p);
        $pdo3->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$sth3 = $pdo3->prepare('
    SELECT pID, cID, C.prefix, C.code
    FROM Department D, Course C, Professor P
    WHERE pID = ?
    AND D.dID = C.dID
    AND D.dID = P.dID; 
');
        $sth3->execute(array(
            $pID3
        ));
?>

    <?php

    $connect = mysql_connect("###", $u, $p) 
      or die ("Error , check your server connection.");
    mysql_select_db("##");

    //Get data in local variable
    if(!empty($_POST['addComment']))
        $INFOO=mysql_real_escape_string($_POST['addComment']);
    if(!empty($_POST['commQuarter']))
        $QTRR=mysql_real_escape_string($_POST['commQuarter']);
    if(!empty($_POST['commYr']))
        $YRR=mysql_real_escape_string($_POST['commYr']);
    if(!empty($_POST['pID']))
        $PIDD=mysql_real_escape_string($_POST['pID']);
    if(!empty($_POST['cID']))
        $CIDD=mysql_real_escape_string($_POST['cID']);
    if(!empty($_POST['courseInfoDD']))
        $COURSEE=mysql_real_escape_string($_POST['courseInfoDD']);

    #print_r($_POST);
    echo $the_pID;
    echo $the_cID;

    // check for null values
    if (isset($_POST['submit'])) {
    $query="INSERT INTO Comment (info, Qtr, Yr, pID, cID, CName) 
            VALUES ('$INFOO', '$QTRR', '$YRR', '$PIDD', '$CIDD','$COURSEE')";
    mysql_query($query)  or die(mysql_error());
    echo "Your message has been received";
    }
    #else if(!isset($_POST['submit'])){echo "No blank entries";}
    #else{echo "Error!";}
    ?>
  

Пример того, что отправлено:
изображение 1

Ноль, показанный в конце, — это поле cID, почему оно не отправляется?? Оно не выдает ошибки.

Кроме того, что в этом плохого:

 <?php if($sth3->rowCount() > 0) {
                    $row3 = $sth3->fetch(PDO::FETCH_ASSOC);
                        echo "<input type='hidden' name='cID' id='cID' value='$row3['cID']' />";
                } else {
                    echo "<h1>poop</h1>.";
                }
                unset($sth3);
                ?>
  

В нем говорится следующее: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in

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

1. Попробуйте напечатать $the_cID значение в вашем HTML-коде.

2. Это дает мне <тип ввода=»скрытое» имя =»cID» значение = «»» /> в исходном коде html при загрузке страницы

3. Я знаю, что вопрос не в pId, но почему вы передаете pId с помощью POST и GET?

4. Это означает, $the_cID что оно пустое перед отправкой.

5. @Robik — пожалуйста, смотрите обновленный код для комментариев в code //Получение данных в локальной переменной

Ответ №1:

Ваш код выглядит нормально, и на самом деле вы, вероятно, получаете значение параметра. Я думаю, что ваше использование empty вызывает проблему. От http://php.net/manual/en/function.empty.php:

 Returns FALSE if var has a non-empty and non-zero value.

The following things are considered to be empty:

    * "" (an empty string)
    * 0 (0 as an integer)
    * 0.0 (0 as a float)
    * "0" (0 as a string)
    * NULL
    * FALSE
    * array() (an empty array)
    * var $var; (a variable declared, but without a value in a class)
  

Другими словами, даже если cID правильно отправлен из браузера на сервер, если значение является любым из значений в приведенном выше списке, проверка пустоты завершится неудачей.

Я бы предложил сделать это:

 if(isset($_POST['cID']))
    $CIDD=mysql_real_escape_string($_POST['cID']);
  

Вы все равно можете получить мусор, но это, по крайней мере, подтвердит, что вы получаете параметр.

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

1. Может ли это помочь удалить любую функцию, такую как isset () или empty () ?

2. Если я использую приведенный выше код, который вы мне дали, это все равно ничего мне не даст??

3. Итак, быстрая проверка: если вы сделаете var_dump($_POST); в самом начале PHP и посмотрите, что это распечатает? Можете ли вы отредактировать свой вопрос и добавить это?

4. Это перед отправкой формы или после публикации?

Ответ №2:

Мне кажется, что cId на самом деле никогда не инициализируется: вы считываете его из массива $ _POST в начале, что означает, что он должен быть установлен перед тем, как вы получите доступ к этой странице, иначе он будет считаться пустым.

Проверьте html-вывод в вашем браузере, и вы, вероятно, увидите, что он гласит

 <input type="hidden" name="cID" value="" />
  

-> нет значения.

Я думаю, вы имеете в виду, что оно должно быть создано на стороне базы данных (автоинкрементирование), а затем вы должны получить это значение с помощью чего-то вроде mysql_last_insert_id / PDO ::lastInsertId()