mysql — Google Cloud SQL & amp; Учебник по PHP не редактирует базу данных?

Я учусь использовать Google Cloud SQL и пытаюсь подключиться к базе данных с помощью PHP. Я следую за Инструкции Google здесь.

Я создал 3 файла (guestbook.php, sign.php, а также app.yaml) и скопировал код, представленный в статье. Для подключения к базе данных я использовал PDO_MySQL вариант.

В guestbook.php а также sign.php, в if Скажите: я заменил <your-project-id> а также <your-instance-name> по мере необходимости. Я оставил '' для пароля пусто.

В guestbook.php а также sign.php, в else Скажите: я заменил 127.0.0.1 а также <password> по мере необходимости. Я оставил 3306 как есть.

В app.yaml: Я заменил <your-application-name> по мере необходимости.

Затем я сохранил 3 файла в локальном каталоге, а затем развернул его, используя GoogleAppEngineLauncher,

Когда я загрузил первую страницу, все выглядело нормально. Я набрал что-то и нажал Submit, Затем я был перенаправлен на страницу /guestbook, но потом было сказано:

Error: Not Found

The requested URL /guestbook was not found on this server.

Я очень новичок в веб-приложениях и PHP в целом. Я понятия не имею, что это сообщение об ошибке просит меня сделать. Я уже загрузил файлы на сервер Google с помощью панели запуска приложений. Я уверен, что внимательно следовал инструкциям.

Некоторые вещи, которые я пытался сделать:

  1. В guestbook.php а также sign.phpЯ заполнил '' с соответствующим паролем.

  2. В guestbook.php а также sign.phpЯ удалил по умолчанию 3306,

  3. В guestbook.php а также sign.phpЯ удалила if заявление и использовал только содержание else заявление.

  4. В app.yaml: Я добавил -url: /guestbook,

  5. В guestbook.php а также sign.phpЯ перешел с PDO_MySQL в mysqli,

Ни одна из вышеперечисленных попыток ничего не сделала для решения проблемы. Попытки 1 также привели к сообщению Unable to connect.,

РЕДАКТИРОВАТЬ:

В sign.php, Я изменился header('Location: '."/guestbook"); в header('Location: '."/");, Это, кажется, избавилось от URL not found ошибка, но кажется, что ничего в моей базе данных не изменяется. PHP ничего не делает для изменения базы данных.

Что я делаю неправильно? Как я могу решить эту проблему и подключиться, прочитать и написать в моей базе данных?

1

Решение

Догадаться. Их PHP-код гостевой книги сломан, прост и понятен. Они пытаются выполнить перенаправление (используя заголовок Location) после того, как они уже выдают теги и, что недопустимо.

В результате, если вы не вошли в систему, код предполагаемый чтобы перенаправить вас на страницу входа, но это не так. И затем, когда вы пытаетесь опубликовать в гостевой книге, «$ user» имеет значение null, поэтому страница не работает.

О, да, и страница sign.php перенаправляет в / guestbook, который вы правильно определили, не существует. И он перенаправляет вверх в коде sign.php, что, очевидно, заставит код впоследствии ничего не делать. Вот некоторый фиксированный код.

Guestbook.php:

<?php
use google\appengine\api\users\User;
use google\appengine\api\users\UserService;

$user = UserService::getCurrentUser();

if ($user === null) {
header('Location: ' . UserService::createLoginURL($_SERVER['REQUEST_URI']));
}
?>

<html>
<body>
<h2>Guestbook Entries</h2>
<?php
// Create a connection.
echo 'Hello, ' . htmlspecialchars($user->getNickname()) . '<br>';

$db = null;
if (isset($_SERVER['SERVER_SOFTWARE']) &&
strpos($_SERVER['SERVER_SOFTWARE'],'Google App Engine') !== false) {
// Connect from App Engine.
try{
$db = new pdo(mysql:unix_socket=/cloudsql/<your-project-id>:<your-instance-name>;dbname=guestbook', 'root', '');
}catch(PDOException $ex){
die(json_encode(
array('outcome' => false, 'message' => 'Unable to connect.')
)
);
}
} else {
// Connect from a development environment.
try{
$db = new pdo('mysql:host=127.0.0.1:3306;dbname=guestbook', 'root', '<password>');
}catch(PDOException $ex){
die(json_encode(
array('outcome' => false, 'message' => 'Unable to connect')
)
);
}
}
try {
// Show existing guestbook entries.
foreach($db->query('SELECT * from entries') as $row) {
echo "<div><strong>" . $row['guestName'] . "</strong> wrote <br> " . $row['content'] . "</div>";
}
} catch (PDOException $ex) {
echo "An error occurred in reading or writing to guestbook.";
}
$db = null;
?>

<h2>Sign the Guestbook</h2>
<form action="/sign" method="post">
<div><textarea name="content" rows="3" cols="60"></textarea></div>
<div><input type="submit" value="Sign Guestbook!!"></div>
</form>
</body>
</html>

И sign.php

<?php
use google\appengine\api\users\User;
use google\appengine\api\users\UserService;

$user = UserService::getCurrentUser();
if (!$user) {
die("Not logged in");
}

$db = null;
if (isset($_SERVER['SERVER_SOFTWARE']) &&
strpos($_SERVER['SERVER_SOFTWARE'],'Google App Engine') !== false) {
// Connect from App Engine.
try{
$db = new pdo('mysql:unix_socket=/cloudsql/<your-project-id>:<your-instance-name>;dbname=guestbook', 'root', '');
}catch(PDOException $ex){
die(json_encode(
array('outcome' => false, 'message' => 'Unable to connect.')
)
);
}
} else {
// Connect from a development environment.
try{
$db = new pdo('mysql:host=127.0.0.1:3306;dbname=guestbook', 'root', '<password>');
}catch(PDOException $ex){
die(json_encode(
array('outcome' => false, 'message' => 'Unable to connect')
)
);
}
}
try {
if (array_key_exists('content', $_POST)) {
$stmt = $db->prepare('INSERT INTO entries (guestName, content) VALUES (:name, :content)');
$stmt->execute(array(':name' => htmlspecialchars($user->getNickname()), ':content' => htmlspecialchars($_POST['content'])));
$affected_rows = $stmt->rowCount();
// Log $affected_rows.
}
} catch (PDOException $ex) {
// Log error.
}
$db = null;
header('Location: '."/");
?>
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]