重定向不适用于云 SQL



我是编码新手。我的离线软件生成的 php 代码与本地主机和 mysql 配合得很好。但是一旦它链接到Google App Engine Standard Environment的云sql,php表单就不会重定向到成功页面。虽然使用云 sql,表单数据已成功提交,但随后出现一个空白屏幕,网址没有变化。使用本地主机时,提交表单后会出现成功页面。为了使代码适应 GAE 云 sql,我手动插入了 $mysql_port 和 $mysql_Socket 变量,这些变量在 localhost 上运行的原始代码中不存在。

代码是:-

<?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提交表单后.html如何成功重定向到成功页面?另外,成功页面可以是.php页面还是必须.html页面?

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

提前谢谢你。

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

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

此外,此行应产生语法错误:

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

应该是这样的:

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

或者也可以是这样的(似乎喜欢双引号样式):

header("Location: /$success_url");

要准确弄清楚出了什么问题,您有两种可能性:

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

重定向标头命令中也可能不需要前导斜杠。

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

  1. 尽量不要在每次打开与数据库架构的连接时创建数据库架构。在外部执行此任务,并在脚本中假定数据库已经存在。大多数提供程序不支持创建数据库。您主要必须通过提供商为您提供的 Web 界面执行此操作。所以,在你的例子中,谷歌的云SQL。
  2. 尽量不要在每次使用时更改表。这说不通。我认为您每次都有相同的HTML表单。因此,最好为所有HTML表单字段创建一次列。否则,您可以使用 HTML 表单数据表示的序列化形式(例如.PHP的序列化命令,或者为了更好地阅读和在其他语言中使用 json_encode)。

在这里和其他地方的所有支持下,我学会了阅读和理解 App Engine 中的错误日志。我的代码有 3 个空白:

第一个是在 yaml 中,其中缺少 URL 处理程序。我从 yaml 上的 GAE 文档中复制了它。

第二个是 PHP 形式的一个隐藏变量。这是从会话数据中检索用户名。我删除了该变量。 和

第三个是标头已发送错误。我使用$File和$Line函数来知道它首先发送到哪里。日志显示它是在第 1 行发送的。我找不到原因。虽然在 php 脚本的第 1 行没有回显或打印。虽然HTML低于php代码,但这始于<!doctype html>。 我尝试了ob_start()OB-flush().我也正确地使用了exit。在 If-Else 的多次变体之后,我终于用 Meta Refresh 替换了header('Location: '.$success_url);函数

,这echo "<META http-equiv='refresh' content='0;URL=success_url'>";

这奏效

:) 非常感谢堆栈溢出社区的所有帮助,包括@alpham8。

相关内容

  • 没有找到相关文章

最新更新