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 中添加回显,因此您应该考虑返回这些值。
当我 运行 使用带有表单的 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 中添加回显,因此您应该考虑返回这些值。