gpt4 book ai didi

php - 重定向不适用于 Cloud SQL

转载 作者:行者123 更新时间:2023-11-30 21:46:20 26 4
gpt4 key购买 nike

我是编码新手。我的离线软件生成的 php 代码适用于 localhost 和 mysql。但是一旦链接到 Google App Engine 标准环境的云 sql,php 表单就不会重定向到成功页面。尽管使用云 sql,表单数据已成功提交,但随后出现空白屏幕且 url 没有变化。使用本地主机时,成功页面会在提交表单后出现。为了调整 GAE 云 sql 的代码,我手动插入了 $mysql_port 和 $mysql_Socket 变量,这些变量在本地主机上工作的原始代码中不存在。

代码是:-

<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['formid']) && $_POST['formid'] == 'My-Form-Name')
{
$success_url = './success-page.html';
$error_url = './error-page.html';
$error = '';
$mysql_server = null;
$mysql_database = 'My-DB';
$mysql_table = 'My-Table';
$mysql_username = 'My-Username';
$mysql_password = 'My-Password';
$mysql_port = null;
$mysql_socket = '/cloudsql/CloudSql-Instance-Connection-Name';
$eol = "\n";
$db = mysqli_connect($mysql_server, $mysql_username, $mysql_password, $mysql_database, $mysql_port, $mysql_socket) or die('Failed to connect to database server!<br>'.mysqli_error($db));
mysqli_set_charset($db, 'utf8');
mysqli_query($db, "CREATE DATABASE IF NOT EXISTS $mysql_database");
mysqli_select_db($db, $mysql_database) or die('Failed to select database<br>'.mysqli_error($db));
mysqli_query($db, "CREATE TABLE IF NOT EXISTS $mysql_table (ID int(9) NOT NULL auto_increment, `DATESTAMP` DATE, `TIME` VARCHAR(8), `IP` VARCHAR(15), `BROWSER` TINYTEXT, PRIMARY KEY (id))");
foreach($form_data as $name=>$value)
{
mysqli_query($db ,"ALTER TABLE $mysql_table ADD $name VARCHAR(255)");
}
mysqli_query($db, "INSERT INTO $mysql_table (`DATESTAMP`, `TIME`, `IP`, `BROWSER`, `REFERER`)
VALUES ('".date("Y-m-d")."',
'".date("G:i:s")."',
'".$_SERVER['REMOTE_ADDR']."',
'".$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF']."',
'".$_SERVER['HTTP_USER_AGENT']."')")or die('Failed to insert data into table!<br>'.mysqli_error($db));
$id = mysqli_insert_id($db);
foreach($form_data as $name=>$value)
{
mysqli_query($db, "UPDATE $mysql_table SET $name='".mysqli_real_escape_string($db, $value)."' WHERE ID=$id") or die('Failed to update table!<br>'.mysqli_error($db));
}
mysqli_close($db);
header('Location: '.$success_url);
exit;
}

成功和错误页面是项目的内部页面。应用程序 yaml 具有以下处理程序:

# TO serve static
- url: /(.*\.(html$|css$|js$|svg$|))
static_files: \1
upload: (.*\.(html$|css$|js$|svg$))
application_readable: true


# to serve all php scripts
- url: /(.+\.php)$
script: \1

如何在使用云 sql 提交表单后成功重定向到 success-page.html?另外,成功页面可以是.php页面还是必须是.html页面?

经过下面的第一个帮助,发现Redirect 或Cloud SQL 同时起作用。如果我们删除 cloud sql 部分,Redirect 会起作用,如果我们忽略 Redirect 部分,Cloud SQL 会成功地将数据放入表中,但不会重定向。在这里,我特别命名 Cloud SQL,因为重定向在本地主机上使用 MySQL。 请进一步帮助了解如何使用云 sql 表单重定向 php 页面。

提前谢谢你。

最佳答案

空白页意味着 php 遇到运行时错误。在您的情况下,这可能是多种情况:

  • 缺少创建表的 SQL 权限
  • 缺少更改表的 SQL 权限
  • 缺少插入/更新的 sql 权限
  • mysqli 未加载到您的在线网站上
  • 等等

另外,这一行应该产生一个语法错误:

header('Location: './$success_url);

应该是这样的:

header('Location: /'.$success_url);

或者也可以这样(好像喜欢双引号风格):

header("Location: /$success_url");

要准确找出问题出在哪里,您有两种可能性:

  • 在 php.ini 中打开显示错误
  • 查看服务器上的错误日志

您可能也不需要在重定向 header 命令中使用前导斜杠。

编辑:由于下面的评论,提问者需要一些额外的帮助来解决这个问题:

  1. 尽量不要在每次打开数据库连接时都创建数据库架构。在外部执行此任务并在您的脚本中假设数据库已经存在。大多数提供商不支持创建数据库。您通常必须通过网络界面执行此操作,该界面由您的提供商提供给您。因此,在您的情况下是 Google 的 Cloud SQL。
  2. 尽量不要在每次使用时都更改表格。那没有意义。我认为您每次都有相同的 HTML 表单。因此,最好为所有 HTML 表单字段创建列一次。否则,您可以使用 HTML 表单数据表示的序列化形式(例如 PHP 的序列化命令,或者为了更好的可读性和在其他语言中的使用,请使用 json_encode)。

关于php - 重定向不适用于 Cloud SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49307470/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com