#php #mysql #google-app-engine #google-cloud-platform #google-cloud-sql
#php #mysql #google-app-engine #google-облачная платформа #google-cloud-sql
Вопрос:
Мои страницы PHP становятся почти пустыми, когда я запускаю метод post с формой. Я хочу знать, является ли это проблемой с облачной платформой Google или проблемой с тем, как я загрузил приложение на облачную платформу Google. Вот мое приложение.yaml:
runtime: php
env: flex
runtime_config:
document_root: .
handlers:
- url: /(. .(html|png|jpg|js|css))$
static_files: 1
upload: . .(html|png|jpg|js|css)$
- url: /.*
script: auto
entrypoint:
serve handler.php
env_variables:
CLOUDSQL_USER: root
CLOUDSQL_DB: COSGymPatronData
CLOUDSQL_PASSWORD: ************
CLOUDSQL_DSN: /cloudsql/cosgym:us-central1:cosgympatrondata
Вот мой handler.php:
<?php
ini_set('allow_url_fopen',1);
switch(@parse_url($_SERVER['REQUEST_URI'])['path']) {
case '/':
require 'index.php';
case '/index':
require 'index.php';
case '/index.php':
require 'index.php';
case '/result_contact.php':
require 'result_contact.php';
case '/checkout.php':
require 'checkout.php';
case '/loginAction.php':
require 'loginAction.php';
case 'signinAction.php':
require 'signinAction.php';
}
?>
И вот мой database.php страница:
<?php
function prepare_string($dbc, $string) {
$string = mysqli_real_escape_string($dbc, trim($string));
return $string;
}
define('DB_USER', get_env('CLOUDSQL_USER'));
define('DB_PASSWORD', get_env('CLOUDSQL_PASSWORD'));
define('DB_HOST', get_env('CLOUDSQL_DSN'));
define('DB_NAME', get_env('CLOUDSQL_DB'));
$dbc = @mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME)
OR die('Could not connect to MySQL: ' . mysqli_connect_error());
mysqli_set_charset($dbc, 'utf8');
?>
И, наконец, вот пример php, который выполняется на странице действий для предыдущей формы:
<?php
require 'database.php';
$errors=[];
if(!empty($_POST['name'])) {
$name = $_POST['name'];
} else {
$name = NULL;
$errors[] = "<p>We need your name </p>";
}
if(!empty($_POST['email'])) {
$email = $_POST['email'];
if(!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$errors[] = "<p>Your email is incorrect '$email' </p>";
$email = NULL;
}
}else{
$errors[] = "<p>We need your email </p>";
$email = NULL;
}
if(!empty($_POST['subject'])) {
$subject = $_POST['subject'];
} else {
$subject = NULL;
$errors[] = "<p>We need your subject </p>";
}
if(!empty($_POST['message'])) {
$message = $_POST['message'];
} else {
$message = NULL;
$errors[] = "<p>We need your message </p>";
}
$name_clean = prepare_string($dbc, $name);
$email_clean = prepare_string($dbc, $email);
$subject_clean = prepare_string($dbc, $subject);
$message_clean = prepare_string($dbc, $message);
$q = "INSERT INTO Contact(name, email, subject, message) VALUES(?, ?, ?, ?)";
$stmt = mysqli_prepare($dbc, $q);
mysqli_stmt_bind_param(
$stmt,
'ssss',
$name_clean,
$email_clean,
$subject_clean,
$message_clean
);
$result = mysqli_stmt_execute($stmt);
if (!$result)
{
$errors[]="<p>Error Access DB</p>";
}
if(count($errors)==0) {
echo "<p>Welcome to COS GYM Our managers will contact you</p>";
}else
{
foreach($errors as $err)
{
echo $err;
}
}
?>
Я должен отметить, что с меня взимают бесплатные кредиты за то, что работает на CloudSQL и App Engine, и эти данные выглядят так, как будто они поступают в базу данных, поэтому кажется, что код на странице результатов работает. Помощь в этом будет оценена.
Комментарии:
1. Привет, проблема решена?
2. Пока нет. У меня все еще есть проблема.
3. работает ли ваш код в локальной среде? Если вы еще не пробовали, то я рекомендую вам попробовать это перед загрузкой приложения на Google Cloud Platform. Можете ли вы также предоставить свой HTML-код?
4. Он работает локально. Вот код, который я использую для примера страницы контактов:
5. github.com/CShingiro/Group2Project/blob/main/result_contact.php
Ответ №1:
Конфигурация AppEngine при просмотре app.yaml определена некорректно. Давайте разберем его по одному элементу за раз. время выполнения — это должно быть явным, т.Е. php73 или php74 или php55 runtime_config: это неверно и не является частью этого контекста, поскольку оно относится к параметрам среды выполнения python в AppEngine
Обработчики кажутся нормальными, но затем у нас есть; точка входа:
Это означает, что handler.php файл определяет, куда отправлять запросы.
Из этого файла мы видим ‘/result_contact.php » требуется «result_contact.php ‘, так что ‘contact.html ‘будет источником в строках с 42 по 52 для запроса POST, о котором идет речь.
Поскольку в коде нет элементов, которые могли бы привести к тому, что дисплей станет пустым (явно), это управляется PHP, скорее всего, связано с кодом. Поскольку PHP только добавляет эхо в result_contact.php через строки 109 или 115 вам следует рассмотреть возможность возврата этих значений.