Commit 09fe91ee authored by Stephan Kreutzer's avatar Stephan Kreutzer

tutorial_text_browsergames_mit_ajax_und_php: MySQL zu MySQLi für PHP7.

parent fb038c9f
Pipeline #47798722 failed with stages
in 1 minute and 23 seconds
Jan-Hinrich Behne, 29525 Uelzen, GERMANY (http://www.jhb.lima-city.de, <jhbskater@web.de>).
Story design and text.
Stephan Kreutzer, Bahnhofstraße 71, 74321 Bietigheim-Bissingen, GERMANY (http://www.skreutzer.de, <skreutzer@fsfe.org>).
Stephan Kreutzer, Bahnhofstraße 71, 74321 Bietigheim-Bissingen, GERMANY (https://skreutzer.de, <skreutzer@fsfe.org>).
All files.
File mode changed from 100755 to 100644
File mode changed from 100755 to 100644
This package contains a tutorial on how to implement a text adventure game
with AJAX and PHP, where the most parts are in German language.
with AJAX and PHP, with most parts in German language.
Tutorial "Text-Browsergames mit AJAX und PHP" (C) 2012-2013 Stephan Kreutzer
Tutorial "Text-Browsergames mit AJAX und PHP" (C) 2012-2019 Stephan Kreutzer
Tutorial "Text-Browsergames mit AJAX und PHP" is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, version 3 of the License.
it under the terms of the GNU Affero General Public License version 3 or any later version,
as published by the Free Software Foundation.
Tutorial "Text-Browsergames mit AJAX und PHP" is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
......
......@@ -3,12 +3,12 @@
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!--
Copyright (C) 2012-2013 Stephan Kreutzer
Copyright (C) 2012-2019 Stephan Kreutzer
This file is part of Tutorial "Text-Browsergames mit AJAX und PHP".
Tutorial "Text-Browsergames mit AJAX und PHP" is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License version 3 only,
it under the terms of the GNU Affero General Public License version 3 or any later version,
as published by the Free Software Foundation.
Tutorial "Text-Browsergames mit AJAX und PHP" is distributed in the hope that it will be useful,
......@@ -56,10 +56,10 @@ along with Tutorial "Text-Browsergames mit AJAX und PHP". If not, see <http://ww
<div>
<h3>Copyright</h3>
<pre>
Tutorial "Text-Browsergames mit AJAX und PHP" (C) 2012-2013 Stephan Kreutzer
Tutorial "Text-Browsergames mit AJAX und PHP" (C) 2012-2019 Stephan Kreutzer
Tutorial "Text-Browsergames mit AJAX und PHP" is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License version 3 only,
it under the terms of the GNU Affero General Public License version 3 or any later version,
as published by the Free Software Foundation.
Tutorial "Text-Browsergames mit AJAX und PHP" is distributed in the hope that it will be useful,
......@@ -70,16 +70,16 @@ GNU Affero General Public License 3 for more details.
You should have received a copy of the GNU Affero General Public License 3
along with Tutorial "Text-Browsergames mit AJAX und PHP". If not, see &lt;<a href="http://www.gnu.org/licenses/">http://www.gnu.org/licenses/</a>&gt;.
The complete source code is available at &lt;<a href="http://www.skreutzer.de/browsergames/technologien/text_browsergames_mit_ajax_und_php.html">http://www.skreutzer.de/browsergames/technologien/text_browsergames_mit_ajax_und_php.html</a>&gt;.
The complete source code is available at &lt;<a href="https://gitlab.com/homebrew-browsergames/technologietutorials/tree/master/tutorial_text_browsergames_mit_ajax_und_php">https://gitlab.com/homebrew-browsergames/technologietutorials/tree/master/tutorial_text_browsergames_mit_ajax_und_php</a>&gt;.
</pre>
</div>
<p>
Download des vollständigen Quellcodes (Version <a href="tutorial_text_browsergames_mit_ajax_und_php_20130915T1503.tar.gz">20130915T1503</a>). <!-- Kurzes <a href="http://www.youtube.com/playlist?list=PLF1A3D26D320AFB38">Beschreibungsvideo</a> auf youtube.com. Ausführlicheres <a href="http://www.youtube.com/playlist?list=PLF1A3D26D320AFB38">Code Review</a> zum Tutorial-Beispielcode auf youtube.com. -->
Der vollständige Quellcode ist verfügbar unter <a href="https://gitlab.com/homebrew-browsergames/technologietutorials/tree/master/tutorial_text_browsergames_mit_ajax_und_php">https://gitlab.com/homebrew-browsergames/technologietutorials/tree/master/tutorial_text_browsergames_mit_ajax_und_php</a>. <!-- Kurzes <a href="https://www.youtube.com/playlist?list=PLF1A3D26D320AFB38">Beschreibungsvideo</a> auf youtube.com. Ausführlicheres <a href="https://www.youtube.com/playlist?list=PLF1A3D26D320AFB38">Code Review</a> zum Tutorial-Beispielcode auf youtube.com. -->
</p>
<div>
<h3>Einführung</h3>
<p>
Rein textbasierte Browsergames lassen sich naturgemäß sehr leicht umsetzen, da das Web von Haus aus als Dokumenten-System konzipiert ist. Wie beispielsweise im <a href="http://www.skreutzer.de/browsergames/technologien/text_browsergames_mit_php.html">Tutorial &bdquo;Text-Browsergames mit PHP&ldquo;</a> demonstriert, können dafür die Standard-Bedienelemente für Web-Formulare verwendet werden. Diese Technik allein genügt jedoch nicht, um das typische Spielgefühl von Textadventures zu erzeugen, da ein Medienbruch zwischen dem Lesen und der Eingabe hingenommen werden muss. Daher wird der Formular-Übermittlungsmechanismus durch asynchronen Nachrichten-Austausch ersetzt, was eine traditionelle Terminal-Interaktion nachbildet. Dementsprechend erfolgt die Steuerung nicht mehr länger mittels einer Art Multiple-Choice, sondern durch die Formulierung von Anweisungen. Der Spieler muss nun erstens gültige und zweitens die jeweils passenden Befehle finden, um das Spielgeschehen in seinem Sinne voranzutreiben.
Rein textbasierte Browsergames lassen sich naturgemäß sehr leicht umsetzen, da das Web von Haus aus als Dokumenten-System konzipiert ist. Wie beispielsweise im <a href="https://skreutzer.de/browsergames/technologien/text_browsergames_mit_php.html">Tutorial &bdquo;Text-Browsergames mit PHP&ldquo;</a> demonstriert, können dafür die Standard-Bedienelemente für Web-Formulare verwendet werden. Diese Technik allein genügt jedoch nicht, um das typische Spielgefühl von Textadventures zu erzeugen, da ein Medienbruch zwischen dem Lesen und der Eingabe hingenommen werden muss. Daher wird der Formular-Übermittlungsmechanismus durch asynchronen Nachrichten-Austausch ersetzt, was eine traditionelle Terminal-Interaktion nachbildet. Dementsprechend erfolgt die Steuerung nicht mehr länger mittels einer Art Multiple-Choice, sondern durch die Formulierung von Anweisungen. Der Spieler muss nun erstens gültige und zweitens die jeweils passenden Befehle finden, um das Spielgeschehen in seinem Sinne voranzutreiben.
</p>
<p>
Da bei diesem Ansatz AJAX zum Einsatz kommt, ergibt sich die Notwendigkeit der Client-Programmierung, die allerdings ob der primitiven Spiel-Oberfläche relativ einfach mit wenig zusätzlichem JavaScript über das reine AJAX hinaus realisiert werden kann, da sich das Spiel auf Darstellung und Entgegennahme von Text beschränkt. Serverseitig müssen die Eingaben geparst (d.h. zerlegt und interpretiert) werden, um daraufhin Datenbank-Manipulationen und die Generierung der Ausgabe auszulösen. Zu diesem Zweck sind programmatische Hilfsmittel (Libraries) erforderlich, um dem Entwickler Verwaltungsaufgaben abzunehmen und die Erstellung der eigentlichen Spielinhalte zu erleichtern. Ein Vorteil der Technologie liegt in dem modularen Aufbau der Spiel-Engine begründet, was sich insbesondere in der strikten Trennung zwischen Libraries und der Spiel-Szenen zeigt, sodass das Spiel jederzeit veränderbar ist, in den meisten Fällen sogar im Live-Betrieb (solange die Daten durch eine Anpassung nicht in einen inkonsistenten Zustand geraten). Der Entwickler erhält damit die Möglichkeit, Variationen und Erweiterungen ohne großen Aufwand einpflegen zu können.
......
<?php
/* Copyright (C) 2012 Stephan Kreutzer
/* Copyright (C) 2012-2019 Stephan Kreutzer
*
* This file is part of Tutorial "Text-Browsergames mit AJAX und PHP".
*
* Tutorial "Text-Browsergames mit AJAX und PHP" is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License version 3 only,
* it under the terms of the GNU Affero General Public License version 3 or any later version,
* as published by the Free Software Foundation.
*
* Tutorial "Text-Browsergames mit AJAX und PHP" is distributed in the hope that it will be useful,
......
<?php
/* Copyright (C) 2012 Stephan Kreutzer
/* Copyright (C) 2012-2019 Stephan Kreutzer
*
* This file is part of Tutorial "Text-Browsergames mit AJAX und PHP".
*
* Tutorial "Text-Browsergames mit AJAX und PHP" is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License version 3 only,
* it under the terms of the GNU Affero General Public License version 3 or any later version,
* as published by the Free Software Foundation.
*
* Tutorial "Text-Browsergames mit AJAX und PHP" is distributed in the hope that it will be useful,
......
<?php
/* Copyright (C) 2012 Stephan Kreutzer
/* Copyright (C) 2012-2019 Stephan Kreutzer
*
* This file is part of Tutorial "Text-Browsergames mit AJAX und PHP".
*
* Tutorial "Text-Browsergames mit AJAX und PHP" is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License version 3 only,
* it under the terms of the GNU Affero General Public License version 3 or any later version,
* as published by the Free Software Foundation.
*
* Tutorial "Text-Browsergames mit AJAX und PHP" is distributed in the hope that it will be useful,
......@@ -105,22 +105,22 @@ function CMDHANDLER_Inventar($args, &$output)
if ($mysql_connection != false)
{
$result = mysql_query("SELECT `name`,\n".
" `amount`\n".
"FROM `inventory`\n".
"WHERE `user_id`=".$_SESSION['user_id']."\n".
"ORDER BY `name`\n",
$mysql_connection);
$result = mysqli_query($mysql_connection,
"SELECT `name`,\n".
" `amount`\n".
"FROM `inventory`\n".
"WHERE `user_id`=".$_SESSION['user_id']."\n".
"ORDER BY `name`\n");
if ($result !== false)
{
if (@mysql_num_rows($result) > 0)
if (@mysqli_num_rows($result) > 0)
{
$itemCount = 0;
while (1)
{
if (($row = @mysql_fetch_array($result, MYSQL_ASSOC)) != false)
if (($row = @mysqli_fetch_array($result, MYSQLI_ASSOC)) != false)
{
if ($row['amount'] > 0)
{
......@@ -149,7 +149,7 @@ function CMDHANDLER_Inventar($args, &$output)
$output = "Nichts.";
}
mysql_free_result($result);
mysqli_free_result($result);
}
}
}
......
<?php
/* Copyright (C) 2012 Stephan Kreutzer
/* Copyright (C) 2012-2019 Stephan Kreutzer
*
* This file is part of Tutorial "Text-Browsergames mit AJAX und PHP".
*
* Tutorial "Text-Browsergames mit AJAX und PHP" is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License version 3 only,
* it under the terms of the GNU Affero General Public License version 3 or any later version,
* as published by the Free Software Foundation.
*
* Tutorial "Text-Browsergames mit AJAX und PHP" is distributed in the hope that it will be useful,
......
<?php
/* Copyright (C) 2012 Stephan Kreutzer
/* Copyright (C) 2012-2019 Stephan Kreutzer
*
* This file is part of Tutorial "Text-Browsergames mit AJAX und PHP".
*
* Tutorial "Text-Browsergames mit AJAX und PHP" is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License version 3 only,
* it under the terms of the GNU Affero General Public License version 3 or any later version,
* as published by the Free Software Foundation.
*
* Tutorial "Text-Browsergames mit AJAX und PHP" is distributed in the hope that it will be useful,
......
<?php
/* Copyright (C) 2012 Stephan Kreutzer
/* Copyright (C) 2012-2019 Stephan Kreutzer
*
* This file is part of Tutorial "Text-Browsergames mit AJAX und PHP".
*
* Tutorial "Text-Browsergames mit AJAX und PHP" is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License version 3 only,
* it under the terms of the GNU Affero General Public License version 3 or any later version,
* as published by the Free Software Foundation.
*
* Tutorial "Text-Browsergames mit AJAX und PHP" is distributed in the hope that it will be useful,
......
<?php
/* Copyright (C) 2012 Stephan Kreutzer
/* Copyright (C) 2012-2019 Stephan Kreutzer
*
* This file is part of Tutorial "Text-Browsergames mit AJAX und PHP".
*
* Tutorial "Text-Browsergames mit AJAX und PHP" is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License version 3 only,
* it under the terms of the GNU Affero General Public License version 3 or any later version,
* as published by the Free Software Foundation.
*
* Tutorial "Text-Browsergames mit AJAX und PHP" is distributed in the hope that it will be useful,
......
<?php
/* Copyright (C) 2012 Stephan Kreutzer
/* Copyright (C) 2012-2019 Stephan Kreutzer
*
* This file is part of Tutorial "Text-Browsergames mit AJAX und PHP".
*
* Tutorial "Text-Browsergames mit AJAX und PHP" is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License version 3 only,
* it under the terms of the GNU Affero General Public License version 3 or any later version,
* as published by the Free Software Foundation.
*
* Tutorial "Text-Browsergames mit AJAX und PHP" is distributed in the hope that it will be useful,
......@@ -25,13 +25,13 @@
global $mysql_connection;
$mysql_connection = @mysql_connect("localhost", "tutuser", "password");
$mysql_connection = @mysqli_connect("localhost", "tutuser", "password");
if ($mysql_connection != false)
{
if (@mysql_query("USE tutorial", $mysql_connection) == false)
if (@mysqli_query($mysql_connection, "USE tutorial") == false)
{
@mysql_close($mysql_connection);
@mysqli_close($mysql_connection);
$mysql_connection = false;
}
}
......
<?php
/* Copyright (C) 2012 Stephan Kreutzer
/* Copyright (C) 2012-2019 Stephan Kreutzer
*
* This file is part of Tutorial "Text-Browsergames mit AJAX und PHP".
*
* Tutorial "Text-Browsergames mit AJAX und PHP" is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License version 3 only,
* it under the terms of the GNU Affero General Public License version 3 or any later version,
* as published by the Free Software Foundation.
*
* Tutorial "Text-Browsergames mit AJAX und PHP" is distributed in the hope that it will be useful,
......@@ -71,16 +71,16 @@ if (isset($_SESSION['scene']) == false)
if ($mysql_connection != false)
{
$szene = mysql_query("SELECT `scene`".
"FROM `user`\n".
"WHERE `id`=".$_SESSION['user_id']."\n",
$mysql_connection);
$szene = mysqli_query($mysql_connection,
"SELECT `scene`".
"FROM `user`\n".
"WHERE `id`=".$_SESSION['user_id']."\n");
}
if ($szene != false)
{
$result = mysql_fetch_assoc($szene);
mysql_free_result($szene);
$result = mysqli_fetch_assoc($szene);
mysqli_free_result($szene);
$_SESSION['scene'] = $result['scene'];
}
}
......
<?php
/* Copyright (C) 2012 Stephan Kreutzer
/* Copyright (C) 2012-2019 Stephan Kreutzer
*
* This file is part of Tutorial "Text-Browsergames mit AJAX und PHP".
*
* Tutorial "Text-Browsergames mit AJAX und PHP" is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License version 3 only,
* it under the terms of the GNU Affero General Public License version 3 or any later version,
* as published by the Free Software Foundation.
*
* Tutorial "Text-Browsergames mit AJAX und PHP" is distributed in the hope that it will be useful,
......@@ -38,7 +38,7 @@ function insertNewUser($name, $passwort)
return -1;
}
if (mysql_query("BEGIN", $mysql_connection) !== true)
if (mysqli_query($mysql_connection, "BEGIN") !== true)
{
return -2;
}
......@@ -48,62 +48,62 @@ function insertNewUser($name, $passwort)
// werden!
$passwort = hash('sha512', $salz.$passwort);
if (mysql_query("INSERT INTO `user` (`id`,\n".
" `name`,\n".
" `salt`,\n".
" `password`,\n".
" `scene`)\n".
"VALUES (NULL,\n".
" '".$name."',\n".
" '".$salz."',\n".
" '".$passwort."',\n".
" 'start')\n",
$mysql_connection) !== true)
{
mysql_query("ROLLBACK", $mysql_connection);
if (mysqli_query($mysql_connection,
"INSERT INTO `user` (`id`,\n".
" `name`,\n".
" `salt`,\n".
" `password`,\n".
" `scene`)\n".
"VALUES (NULL,\n".
" '".$name."',\n".
" '".$salz."',\n".
" '".$passwort."',\n".
" 'start')\n") !== true)
{
mysqli_query($mysql_connection, "ROLLBACK");
return -3;
}
$id = mysql_insert_id($mysql_connection);
$id = mysqli_insert_id($mysql_connection);
if ($id == 0)
{
mysql_query("ROLLBACK", $mysql_connection);
mysqli_query($mysql_connection, "ROLLBACK");
return -4;
}
// Initialisierung der Spieler-Daten.
if (mysql_query("INSERT INTO `variables_user` (`variable`,\n".
" `user_id`,\n".
" `value`)\n".
"VALUES\n".
"('status_start', ".$id.", '0')",
$mysql_connection) !== true)
if (mysqli_query($mysql_connection,
"INSERT INTO `variables_user` (`variable`,\n".
" `user_id`,\n".
" `value`)\n".
"VALUES\n".
"('status_start', ".$id.", '0')") !== true)
{
mysql_query("ROLLBACK", $mysql_connection);
mysqli_query($mysql_connection, "ROLLBACK");
return -5;
}
if (mysql_query("INSERT INTO `inventory` (`user_id`,\n".
" `name`,\n".
" `amount`)\n".
"VALUES\n".
"(".$id.", 'SPACENTS', 0),\n".
"(".$id.", 'BANKKARTE', 1)\n",
$mysql_connection) !== true)
if (mysqli_query($mysql_connection,
"INSERT INTO `inventory` (`user_id`,\n".
" `name`,\n".
" `amount`)\n".
"VALUES\n".
"(".$id.", 'SPACENTS', 0),\n".
"(".$id.", 'BANKKARTE', 1)\n") !== true)
{
mysql_query("ROLLBACK", $mysql_connection);
mysqli_query($mysql_connection, "ROLLBACK");
return -6;
}
if (mysql_query("COMMIT", $mysql_connection) === true)
if (mysqli_query($mysql_connection, "COMMIT") === true)
{
return $id;
}
mysql_query("ROLLBACK", $mysql_connection);
mysqli_query($mysql_connection, "ROLLBACK");
return -7;
}
......@@ -116,10 +116,10 @@ function setScene($userID, $newScene, &$description)
return -1;
}
if (mysql_query("UPDATE `user`\n".
"SET `scene`='".$newScene."'\n".
"WHERE `id`=".$userID."\n",
$mysql_connection) !== true)
if (mysqli_query($mysql_connection,
"UPDATE `user`\n".
"SET `scene`='".$newScene."'\n".
"WHERE `id`=".$userID."\n") !== true)
{
return -2;
}
......@@ -208,7 +208,7 @@ function getUserVariables($userID, $names)
$sqlString = substr($sqlString, 0, -4);
$sqlString .= ") AND `user_id`=".$userID."\n";
$variables = mysql_query($sqlString, $mysql_connection);
$variables = mysqli_query($mysql_connection, $sqlString);
if ($variables == false)
{
......@@ -218,7 +218,7 @@ function getUserVariables($userID, $names)
{
$result = array();
while ($temp = mysql_fetch_assoc($variables))
while ($temp = mysqli_fetch_assoc($variables))
{
if (isset($result[$temp['variable']]) == true)
{
......@@ -231,7 +231,7 @@ function getUserVariables($userID, $names)
$result[$temp['variable']] = $temp['value'];
}
mysql_free_result($variables);
mysqli_free_result($variables);
$variables = $result;
}
......@@ -341,30 +341,30 @@ function setUserVariables($userID, $variables)
}
if (mysql_query("BEGIN", $mysql_connection) !== true)
if (mysqli_query($mysql_connection, "BEGIN") !== true)
{
return -5;
}
foreach ($variables as $name => $value)
{
if (mysql_query("UPDATE `variables_user`\n".
"SET `value`='".((string)$value)."'\n".
"WHERE `variable` LIKE '".$name."' AND\n".
" `user_id`=".$userID."\n",
$mysql_connection) !== true)
if (mysqli_query($mysql_connection,
"UPDATE `variables_user`\n".
"SET `value`='".((string)$value)."'\n".
"WHERE `variable` LIKE '".$name."' AND\n".
" `user_id`=".$userID."\n") !== true)
{
echo "<p>\n".
" Setzen der Benutzervariable <code>".$name."</code> auf <tt>'".$value."'</tt>\n".
" fehlgeschlagen.\n".
"</p>\n";
mysql_query("ROLLBACK", $mysql_connection);
mysqli_query($mysql_connection, "ROLLBACK");
return -6;
}
}
if (mysql_query("COMMIT", $mysql_connection) !== true)
if (mysqli_query($mysql_connection, "COMMIT") !== true)
{
return -7;
}
......@@ -432,7 +432,7 @@ function getGlobalVariables($names)
$sqlString = substr($sqlString, 0, -4);
$sqlString .= ")\n";
$variables = mysql_query($sqlString, $mysql_connection);
$variables = mysqli_query($mysql_connection, $sqlString);
if ($variables == false)
{
......@@ -442,7 +442,7 @@ function getGlobalVariables($names)
{
$result = array();
while ($temp = mysql_fetch_assoc($variables))
while ($temp = mysqli_fetch_assoc($variables))
{
if (isset($result[$temp['variable']]) == true)
{
......@@ -455,7 +455,7 @@ function getGlobalVariables($names)
$result[$temp['variable']] = $temp['value'];
}
mysql_free_result($variables);
mysqli_free_result($variables);
$variables = $result;
}
......@@ -565,29 +565,29 @@ function setGlobalVariables($variables)
}
if (mysql_query("BEGIN", $mysql_connection) !== true)
if (mysqli_query($mysql_connection, "BEGIN") !== true)
{
return -5;
}
foreach ($variables as $name => $value)
{
if (mysql_query("UPDATE `variables_global`\n".
"SET `value`='".((string)$value)."'\n".
"WHERE `variable` LIKE '".$name."'\n",
$mysql_connection) !== true)
if (mysqli_query($mysql_connection,
"UPDATE `variables_global`\n".
"SET `value`='".((string)$value)."'\n".
"WHERE `variable` LIKE '".$name."'\n") !== true)
{
echo "<p>\n".
" Setzen der globalen Variable <code>".$name."</code> auf <tt>'".$value."'</tt>\n".
" fehlgeschlagen.\n".
"</p>\n";
mysql_query("ROLLBACK", $mysql_connection);
mysqli_query($mysql_connection, "ROLLBACK");
return -6;
}
}
if (mysql_query("COMMIT", $mysql_connection) !== true)
if (mysqli_query($mysql_connection, "COMMIT") !== true)
{
return -7;
}
......
<?php
/* Copyright (C) 2012-2013 Stephan Kreutzer
/* Copyright (C) 2012-2019 Stephan Kreutzer
*
* This file is part of Tutorial "Text-Browsergames mit AJAX und PHP".
*
* Tutorial "Text-Browsergames mit AJAX und PHP" is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License version 3 only,
* it under the terms of the GNU Affero General Public License version 3 or any later version,
* as published by the Free Software Foundation.
*
* Tutorial "Text-Browsergames mit AJAX und PHP" is distributed in the hope that it will be useful,
......@@ -47,10 +47,10 @@ if (isset($_POST['name']) !== true ||
" </form>\n".
"\n".
" <pre>\n".
"Tutorial \"Text-Browsergames mit AJAX und PHP\" (C) 2012-2013 Stephan Kreutzer, Jan-Hinrich Behne\n".
"Tutorial \"Text-Browsergames mit AJAX und PHP\" (C) 2012-2019 Stephan Kreutzer, Jan-Hinrich Behne\n".
"\n".
"Tutorial \"Text-Browsergames mit AJAX und PHP\" is free software: you can redistribute it and/or modify\n".
"it under the terms of the GNU Affero General Public License version 3 only,\n".
"it under the terms of the GNU Affero General Public License version 3 or any later version,\n".
"as published by the Free Software Foundation.\n".
"\n".
"Tutorial \"Text-Browsergames mit AJAX und PHP\" is distributed in the hope that it will be useful,\n".
......@@ -61,7 +61,7 @@ if (isset($_POST['name']) !== true ||
"You should have received a copy of the GNU Affero General Public License 3\n".
"along with Tutorial \"Text-Browsergames mit AJAX und PHP\". If not, see &lt;<a href=\"http://www.gnu.org/licenses/\">http://www.gnu.org/licenses/</a>&gt;.\n".
"\n".
"The complete source code is available at &lt;<a href=\"http://www.skreutzer.de/browsergames/technologien/text_browsergames_mit_ajax_und_php/\">http://www.skreutzer.de/browsergames/technologien/text_browsergames_mit_ajax_und_php/</a>&gt;.\n".
"The complete source code is available at &lt;<a href=\"https://gitlab.com/homebrew-browsergames/technologietutorials/tree/master/tutorial_text_browsergames_mit_ajax_und_php\">https://gitlab.com/homebrew-browsergames/technologietutorials/tree/master/tutorial_text_browsergames_mit_ajax_und_php</a>&gt;.\n".
" </pre>\n";
}
else
......@@ -72,7 +72,7 @@ else
// werden, bevor sie in ein SQL-Query eingefügt werden dürfen.
// Es könnten unerlaubte Zeichen enthalten sein mit dem Ziel,
// die Datenbank zu manipulieren.
$name = @mysql_real_escape_string($_POST['name']);
$name = @mysqli_real_escape_string($mysql_connection, $_POST['name']);
$user = false;
......@@ -80,17 +80,17 @@ else
if ($name != false &&
$mysql_connection != false)
{
$user = mysql_query("SELECT `id`,\n".
" `salt`,\n".
" `password`\n".
"FROM `user`\n".
"WHERE `name` LIKE '".$name."'\n",
$mysql_connection);
$user = mysqli_query($mysql_connection,
"SELECT `id`,\n".
" `salt`,\n".
" `password`\n".
"FROM `user`\n".
"WHERE `name` LIKE '".$name."'\n");
}
if ($user != false)
{
if (mysql_num_rows($user) == 0)
if (mysqli_num_rows($user) == 0)
{
// Den Benutzer gibt es noch nicht, also anlegen.
......@@ -112,8 +112,8 @@ else
// Den Benutzer gibt es bereits, er will sich
// wiederholt anmelden.
$result = mysql_fetch_assoc($user);
mysql_free_result($user);
$result = mysqli_fetch_assoc($user);
mysqli_free_result($user);
$user = $result;
if ($user['password'] === hash('sha512', $user['salt'].$_POST['passwort']))
......
<?php
/* Copyright (C) 2012 Stephan Kreutzer
/* Copyright (C) 2012-2019 Stephan Kreutzer
*
* This file is part of Tutorial "Text-Browsergames mit AJAX und PHP".
*
* Tutorial "Text-Browsergames mit AJAX und PHP" is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License version 3 only,
* it under the terms of the GNU Affero General Public License version 3 or any later version,
* as published by the Free Software Foundation.
*
* Tutorial "Text-Browsergames mit AJAX und PHP" is distributed in the hope that it will be useful,
......@@ -39,20 +39,20 @@ class Inventory
if ($mysql_connection != false)
{
$items = mysql_query("SELECT `name`,\n".
" `amount`\n".
"FROM `inventory`\n".
"WHERE `user_id`=".$this->userID."\n",
$mysql_connection);
$items = mysqli_query($mysql_connection,
"SELECT `name`,\n".
" `amount`\n".
"FROM `inventory`\n".
"WHERE `user_id`=".$this->userID."\n");
if ($items != false)
{
while ($item = mysql_fetch_assoc($items))
while ($item = mysqli_fetch_assoc($items))
{
$this->inventory[$item['name']] = $item['amount'];
}
mysql_free_result($items);
mysqli_free_result($items);
}
}
}
......@@ -65,17 +65,17 @@ class Inventory
if ($mysql_connection != false)
{
if (mysql_query("BEGIN", $mysql_connection) === true)
if (mysqli_query($mysql_connection, "BEGIN") === true)
{
foreach ($this->modified as $name)
{
if (mysql_query("UPDATE `inventory`\n".
"SET `amount`=".$this->inventory[$name]."\n".
"WHERE `user_id`=".$this->userID." AND\n".
" `name` LIKE '".$name."'\n",
$mysql_connection) !== true)
if (mysqli_query($mysql_connection,
"UPDATE `inventory`\n".