Страницы PHP исчезают после метода post

#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 вам следует рассмотреть возможность возврата этих значений.