У меня есть веб-форма, которая вводит сведения о событии в базу данных, которая будет указана на веб-сайте. Форма фиксирует имя фотографии, название события, дату исключения события из списка, номер сортировки, описание и битовый флаг «Масса».
Поле описания представляет собой обычное текстовое поле. Я знаю, что мне, вероятно, следует изменить поле на форматированный текст, но это на день, когда у меня будет время изучить, как это сделать. В любом случае... Я добавляю символы HTML в свой текст, чтобы отформатировать его. Я обнаружил, что косая черта закрывающих символов, таких как </ strong>, рассматривается как escape-символ, а не как часть текста. Как мне сказать моему коду, чтобы он не убегал?
Код:
//connect to the database.
$serverName = "livedata";
$connectionInfo = array( "Database"=>"administration", "UID"=>"User", "PWD"=>"PASSWORD", "LoginTimeout"=>60 );
$conn = sqlsrv_connect( $serverName, $connectionInfo);
if ( $conn === false ) {
die( print_r( sqlsrv_errors(), true));
}
/* Set up the parameterized query. */
$tsql = "insert into tblevents (Photo, title, Unlist, Sort, Description, Par_num, mass ) values(?,?,?,?,?,?,?)";
/* Set parameter values. */
$dt = $_POST['unlist'];
if ($dt == ""){
$dt = null;
}
$Sort = $_POST['sort'];
if ($Sort == "" ){
//query to get the max of sort in the database items
//+1 sort
$sql2 = "SELECT tblevents.Par_Num, Max(tblevents.Sort) AS MaxOfSort FROM parishevents.dbo.tblevents GROUP BY tblevents.Par_Num HAVING (((tblevents.Par_Num) = " . $_POST['par_num'] . "));";
//echo "SQL2: " . $sql2 . "<br><br>";
$stmt2 = sqlsrv_query( $conn, $sql2);
if ( $stmt2 === false ) {
die( print_r( sqlsrv_errors(), true));
}
$result2 = sqlsrv_query($conn, $sql2);
while($row2 = sqlsrv_fetch_array($result2)) {
$Sort = $row2['MaxOfSort'] +1;
}
if (isset($_POST['mass'])){
if ($_POST['mass'] == "on"){
$mass = -1;
}
else{
$mass = 0;
}
}else{
$mass = 0;
}
$params = array($_POST['photo'], $_POST['title'], $dt, $Sort, $_POST['description'], $_POST['par_num'], $mass);
/* Prepare and execute the query. */
$stmt = sqlsrv_query($conn, $tsql, $params);
/* Free statement and connection resources. */
sqlsrv_free_stmt($stmt);
}
Что касается рассматриваемого вопроса, я не понимаю, с чем у вас возникла проблема, но я почти уверен, что это не проблема с сервером sql.
Прежде чем опубликовать свой вопрос... Я получил предупреждение PHP, и запись не записывалась в базу данных. Я только что попробовал еще раз, и теперь я получаю другое предупреждение: Предупреждение PHP: sqlsrv_free_stmt() ожидает, что параметр 1 будет ресурсом, логическим значением, заданным в add_event.php в строке 59. Я прокомментировал строку, и предупреждение исчезло, но что делать? предупреждение значит?
@RCDAWebmaster Предупреждение ясно: $stmt — это false после вызова $stmt = sqlsrv_query($conn, $tsql, $params);. Пожалуйста, включите проверку ошибок if ( $stmt === false ) {die( print_r( sqlsrv_errors(), true));} и, если возможно, опубликуйте сообщение об ошибке.
Я добавил код и не получил сообщения об ошибке. Я обязательно раскомментировал строку, которая выдавала предупреждение. Теперь страница работает. Я не знаю почему.
Я проверил свой запрос в Access, и он выдает синтаксическую ошибку, если я использую WHERE. Мне нужно использовать HAVING, так как я нахожу максимальное значение сортировки событий в определенном месте.






Возможно, вы захотите взглянуть на свой запрос. HAVING используется для фильтрации групп, WHERE используется для фильтрации строк (это то, что вы пытаетесь сделать здесь).