#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!";}
?>
Пример того, что отправлено:
Ноль, показанный в конце, — это поле 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()