PHP 页面在 post 方法后消失

PHP pages disappear after post method

当我 运行 使用带有表单的 post 方法时,我的 PHP 页面几乎变成空白。我想知道是Google云平台的问题还是我把应用加载到Google云平台的方式有问题。这是我的 app.yaml:

runtime: php

env: flex

runtime_config:
  document_root: .

handlers:
- url: /(.+\.(html|png|jpg|js|css))$
  static_files: 
  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 的免费积分付费,而且数据看起来像是进入数据库,所以它看起来像代码结果页面上的工作正常。帮助解决这个问题将不胜感激。

查看 app.yaml 时,AppEngine 的配置未正确定义。让我们一次分解一个元素。 runtime - 这应该是明确的,即 php73 或 php74 或 php55 runtime_config:这是不正确的,不是此上下文的一部分,因为它属于 AppEngine

中的 python runtime options

处理程序看起来不错,但接下来我们有; 入口点:

这意味着 handler.php 文件决定将请求发送到哪里。

从这个文件中我们看到“/result_contact.php”需要 'result_contact.php',因此 'contact.html' 将是第 42 行到第 52 行的 POST 请求的来源问题。

由于代码中没有任何元素会导致显示空白(明确),这是 PHP 驱动的,很可能与代码有关。 由于 PHP 仅通过第 109 或 115 行在 result_contact.php 中添加回显,因此您应该考虑返回这些值。