В настоящее время я использую Chatfuel, чтобы открыть index.php-файл моего сайта, который отправляет пользователю html-код в его браузер. Там он может зарегистрироваться и настроить свой аккаунт.
Пример URL может выглядеть следующим образом:
https://my.domain.com?key_value='123456789'
В зависимости от того, является ли этот пользователь новым или существующим, я хочу представить ему другую форму. Чтобы проверить это, я делаю простой запрос к базе данных MySQL и проверяю, находится ли переданное key_value уже в базе данных и безопасно ли true или false для логического значения. Утверждение очевидного: если он не существующий пользователь, должна появиться «пустая» форма без значений. Если он зарегистрирован, он должен увидеть информацию, которую он заполнил в прошлый раз.
Моя идея:
Вверху моего index.php я проверяю, является ли он существующим клиентом или нет (Примечание: это уже работает). Затем я хочу использовать выходной буфер для изменения html-кода в зависимости от логического значения перед его отправкой клиенту.
Моя проблема:
Я разработал план сайта в виде обычного HTML (см. Код ниже). И OB только ловит его как вывод, если он находится внутри строки. Поскольку я использую "
, а также '
в документе, строка прерывается каждые несколько строк. Есть ли простой способ обойти это? Потому что функция OB не может получить доступ к чему-либо внутри тегов <html>...</html>
.
Или мне нужно использовать перенаправление после проверки (в моем index.php) и создать отдельную форму + скрипт для редактирования данных клиента и добавления новых данных клиента?
<?php
//Connection stuff
// Prepare statment: !TODO: string needs to be escaped properly first
$query_string = "SELECT * FROM tbl_customer WHERE unique_url = '$uniqueurl'";
$query_rslt = mysqli_query($conn, $query_string);
if($query_rslt == FALSE)
{
// Failure
echo "<br> Oops! Something went wrong with the querying of the db. " . $conn->connect_error;
//Handle error
}
else
{
if ($query_rslt->num_rows > 0)
{
// Set boolean
$existing_customer = TRUE;
// Create an array called row to store all tuples that match the query string
while($row = mysqli_fetch_assoc($query_rslt)) {
//...
}
}
}
// Custom post processing function
function ob_postprocess($buffer)
{
// do a fun quick change to our HTML before it is sent to the browser
$buffer = str_replace('Testing', 'Working', $buffer);
// Send $buffer to the browser
return $buffer;
}
// start output buffering at the top of our script with this simple command
// we've added "ob_postprocess" (our custom post processing function) as a parameter of ob_start
if (!ob_start('ob_postprocess'))
{
// Failure
echo "<br> Oops! Something went wrong with output buffering. Check that no HTML-Code is sent to client before calling this start function.";
// Handle error
}
else
{
// Success
// This is where the string should get accessed before sending to the client browser
echo "Testing OB.";
}
?>
<!--DOCTYPE html-->
<html lang="en">
<head>
<meta charset="utf-8">
//...
</body>
</html>
<?php
// end output buffering and send our HTML to the browser as a whole
ob_end_flush();
?>
Выход: "Working OB."
РЕДАКТИРОВАТЬ: я добавил пример исходного кода. Этот код не скомпилируется.