Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: PHP: Järjestyksessä menevä kuvaruletti

Teme [14.08.2004 06:19:34]

#

Alla oleva skripta pyörittää kuvia tietyssä järjestyksessä, alusta loppuun päin.

Käyttöön tarvitaan kaksi kappaletta tietueita, toiseen tallennetaan näytettävä banneri ja määrä, kuinka monta kertaa bannereita on klikattu. Toiseen tietueeseen tallennetaan ID, bannerin url ja url, joka avataan kun banneria klikataan. Hallintapaneelista näkyy klikkausten määrä, samasta paikasta pystyy myös lisäämään/poistamaan bannerin.

Tietue 'Banner':

CREATE TABLE Banner (Active INT (2), Count INT (5));

Tietue 'Bannerpic':

CREATE TABLE Bannerpic (ID INT (2), Picurl TEXT, Url TEXT);

index.php

<?php
// Banner script made by Teme //

// Haetaan bannereiden maksimi lkm //
$yhteys = mysql_connect("localhost", "xxxxx", "xxxxx");
mysql_select_db("xxxxx");
$query = "SELECT * FROM Bannerpic";
$temp = mysql_query($query);
$lkm = mysql_num_rows($temp);
mysql_close($yhteys);


// Haetaan nykyisen bannerin tiedot //
$yhteys = mysql_connect("localhost", "xxxxx", "xxxxx");
mysql_select_db("xxxxx");
$query = "SELECT * FROM Banner";
$temp = mysql_query($query);
$tulos = mysql_fetch_array($temp);
$lkm = $tulos['Active'];


$id = $lkm + 1;


// Haetaan bannereiden yhteismäärä //
$yhteys2 = mysql_connect("localhost", "xxxxx", "xxxxx");
mysql_select_db("xxxxx");
$query = "SELECT * FROM Bannerpic";
$temp = mysql_query($query);
$bancnt = mysql_num_rows($temp);
mysql_close($yhteys2);

if ($id > $bancnt) { $id = 1; }

// Korotetaan aktiivisen bannerin numeroa //
$yhteys = mysql_connect("localhost", "xxxxx", "xxxxx");
mysql_select_db("xxxxx");
$query = "UPDATE Banner SET Active = '$id'";
mysql_query($query);
mysql_close($yhteys);

// ------------------------------------------- //
// ------------------------------------------- //

// Haetaan uuden bannerin tiedot //
$yhteys = mysql_connect("localhost", "xxxxx", "xxxxx");
mysql_select_db("xxxxx");

$query = "SELECT * FROM Bannerpic WHERE ID = '$id'";
$temp = mysql_query($query);
$tulos = mysql_fetch_array($temp);
mysql_close($yhteys);

echo ("<a href=\"" . $tulos['Url'] . "\" target=\"_blank\"><img src=\"" . $tulos['Picurl'] . "\" alt=\"\"></a>");

?>

admin.php

<?php
session_start();
if ($_POST['passu'] != "" and $_POST['passu'] == "lol")
{
   $_SESSION['Logged'] = "kyl";
}

if ($_SESSION['Logged'] == "kyl")
{
     switch ($_GET['action'])
     {
     	case "edit":
     	edit();
     	break;
     	case "delete":
     	delete();
     	break;
     	case "update":
     	update();
     	break;
     	case "add":
     	add();
     	break;
     	case "save":
     	save();
     	break;
     	case "logout":
     	logout();
        break;
     }
}

     // Funktio uloskirjautumiseen //
     function logout() {
     $_SESSION['Logged'] = ""; }

     // Funktio bannerin tietojen päivittämiseen //
     function update() {
     include "top.php";
     $yhteys = mysql_connect("localhost", "xxxxx", "xxxxx");
     mysql_select_db("xxxxx");
     $query = "UPDATE Bannerpic SET ID = '" . $_POST['id'] . "', Picurl = '" . $_POST['picurl'] . "', Url = '" . $_POST['url'] . "' WHERE ID = '" . $_POST['oldid'] . "'";
     mysql_query($query);
     mysql_close($yhteys);
     echo "<b>T</b>ietue päivitetty!<br><br>\n<a href=\"admin.php\">Takaisin</a>\n";
     include "bot.php"; die(); }

     // Funktio bannerin poistamiseen //
     function delete() {
     include "top.php";
     $yhteys = mysql_connect("localhost", "xxxxx", "xxxxx");
     mysql_select_db("xxxxx");
     $query = "DELETE FROM Bannerpic WHERE ID = '" . $_GET['id'] . "'";
     mysql_query($query);
     mysql_close($yhteys);
     echo "<b>T</b>ietue poistettu!<br><br>\n<a href=\"admin.php\">Takaisin</a>\n";
     include "bot.php"; die(); }

     // Funktio bannerin tallentamiseen //
     function save() {
     include "top.php";
     $yhteys = mysql_connect("localhost", "xxxxx", "xxxxx");
     mysql_select_db("xxxxx");
     $query = "INSERT INTO Bannerpic (ID, Picurl, Url) VALUES ('" . $_POST['id'] . "', '" . $_POST['picurl'] . "', '" . $_POST['url'] . "')";
     mysql_query($query);
     mysql_close($yhteys);
     echo "<b>T</b>ietue lisätty!<br><br>\n<a href=\"admin.php\">Takaisin</a>\n";
     include "bot.php"; die(); }

     // Funktio bannerin lisäykseen //
     function add() {
     include "top.php";
     $yhteys = mysql_connect("localhost", "xxxxx", "xxxxx");
     mysql_select_db("xxxxx");
     $query = "SELECT * FROM Bannerpic ORDER BY ID DESC LIMIT 1";
     $temp = mysql_query($query);
     $tulos = mysql_fetch_array($temp);
     mysql_close($yhteys);
     $id = $tulos['ID'] + 1;

     echo "<form action=\"{$PHP_SELF}?action=save\" method=\"post\">\n";
     echo "<li><b>U</b>usi tietue<br>\n";
     echo "<dd><b>B</b>annerin ID:<br>\n";
     echo "<dd><input type=\"text\" name=\"id\" size=\"5\" value=\"$id\"><br>\n";
     echo "<dd><b>B</b>annerin url:<br>\n";
     echo "<dd><input type=\"text\" name=\"picurl\" size=\"40\"><br>\n";
     echo "<dd><b>U</b>rl:<br>\n";
     echo "<dd><input type=\"text\" name=\"url\" size=\"40\"><br><br>\n";
     echo "<dd><input type=\"submit\" value=\"Lisää tiedot!\"><br><br>\n";
     echo "</form>\n";
     include "bot.php"; die();
     }

     // Funktio bannerin muokkaamiseen //
     function edit() {
     include "top.php";
     $yhteys = mysql_connect("localhost", "xxxxx", "xxxxx");
     mysql_select_db("xxxxx");
     $query = "SELECT * FROM Bannerpic WHERE ID = '" . $_GET['id'] . "'";
     $temp = mysql_query($query);
     $tulos = mysql_fetch_array($temp);
     mysql_close($yhteys);

     echo "<form action=\"{$PHP_SELF}?action=update\" method=\"post\">\n";
     echo "<input type=\"hidden\" name=\"oldid\" value=\"" . $_GET['id'] . "\">\n";
     echo "<li><b>M</b>uokkaa banneria (ID " . $_GET['id'] . ")<br>\n";
     echo "<dd><b>B</b>annerin ID:<br>\n";
     echo "<dd><input type=\"text\" name=\"id\" size=\"5\" value=\"" . $_GET['id'] . "\"><br>\n";
     echo "<dd><b>B</b>annerin url:<br>\n";
     echo "<dd><input type=\"text\" name=\"picurl\" size=\"40\" value=\"" . $tulos['Picurl'] . "\"><br>\n";
     echo "<dd><b>U</b>rl:<br>\n";
     echo "<dd><input type=\"text\" name=\"url\" size=\"40\" value=\"" . $tulos['Url'] . "\"><br><br>\n";
     echo "<dd><input type=\"submit\" value=\"Päivitä tiedot!\"><br><br>\n";
     echo "</form>\n";

     $yhteys = mysql_connect("localhost", "xxxxx", "xxxxx");
     mysql_select_db("xxxxx");
     $query = "SELECT Count FROM Banner";
     $temp = mysql_query($query);
     $tulos = mysql_fetch_array($temp);
     mysql_close($yhteys);

     echo "<b>-›</b> Yhteensä klikkauksia: " . $tulos['Count'] . "<br>\n";
     echo "<b>-›</b> <a href=\"" . $PHP_SELF . "?action=logout\">Kirjaudu ulos</a>\n<br>";
     include "bot.php";
     die(); }


     // Bannereiden listaus //
     if ($_SESSION['Logged'] == "kyl") {

     include "top.php";
     $yhteys = mysql_connect("localhost", "xxxxx", "xxxxx");
     mysql_select_db("xxxxx");
     $query = "SELECT * FROM Bannerpic";
     $temp = mysql_query($query);
     mysql_close($yhteys);

     while ($data = mysql_fetch_array($temp))
     {
     	echo "<li><b>ID: " . $data['ID'] . "</b><br>\n";
     	echo "<dd><b>B</b>annerin url: <a href=\"" . $data['Picurl'] . "\">" . $data['Picurl'] . "</a><br>\n";
     	echo "<dd><b>U</b>rl: <a href=\"" . $data['Url'] . "\">" . $data['Url'] . "</a><br>\n";
     	echo "<dd><a href=\"" . $PHP_SELF . "?action=edit&id=" . $data['ID'] . "\">Muokkaa</a> - <a href=\"" . $PHP_SELF . "?action=delete&id=" . $data['ID'] . "\">Poista</a><br>\n";
     	echo "<br><br>\n";
     }
     }
     else { include "top.php"; ?>

     Salasana:<br>
     <form action="<?php echo($PHP_SELF); ?>" method="post">
     <input type="password" name="passu">
     <input type="submit" value="Kirjaudu!">
     </form>
     <?php }
     $yhteys = mysql_connect("localhost", "xxxxx", "xxxxx");
     mysql_select_db("xxxxx");
     $query = "SELECT Count FROM Banner";
     $temp = mysql_query($query);
     $tulos = mysql_fetch_array($temp);
     mysql_close($yhteys);

     if ($_SESSION['Logged'] == "kyl") {
     echo "<b>-›</b> Yhteensä klikkauksia: " . $tulos['Count'] . "<br>\n";
     echo "<b>-›</b> <a href=\"" . $PHP_SELF . "?action=add\">Lisää tietue</a><br>\n";
     echo "<b>-›</b> <a href=\"" . $PHP_SELF . "?action=logout\">Kirjaudu ulos</a>\n<br>"; }
     include "bot.php";
     ?>

top.php

<html>
<head>
<title>Banneriruletin hallintapaneeli</title>
<style>
.td1 { border-bottom: 1px dotted silver; font-size: 15px; }
.td2 { font-size: 12px; }
b { color: #E97E02; }

a { color: gray; }
a:visited { color: gray; }
a:active { color: silver; }
a:hover { color: silver; }

</style>
</head>
<body topmargin="10" style="font-family: Lucida Sans Unicode; font-size: 12px;">


     <table align="center" cellpadding="3" border="0" style="border-bottom: 1px dotted gray; border-top: 1px dotted gray; border-left: 1px dotted gray; border-right: 1px dotted gray">
     <tr>
     <td class="td1">
     <b>B</b>anneriruletin <b>h</b>allintapaneeli
     </td>
     </tr>

     <tr>
     <td class="td2">
     <br>

bot.php

     </td>
     </tr>

</table>
</body>
</html>

tkr7 [15.08.2004 11:52:32]

#

Tuon saman tietokannan avauksia olisit voinu vähän rajottaa. Nuo kaikki viisi joka perusajolla suoritettavaa ja admin-sivullakin yhteensä seitsemän avausta ja sulkemista kasvattavat varmasti scriptin suoritusaikaa, vievät mysql-palvelimelta kapasiteettia ja repivät joka paikkaan salasanoja, käyttäjä- ja palvelinnimiä kirjoittavan scriptin käyttäjän hermoja kyllä vähintääkin riittävästi.
Melkein kannattaisi käyttää yhtä php-sivua yhteyden luomiseen ja kutsua sitä sitten indexiin ja admin-sivulle tai sitten ympätä nuo kaikki samaan tiedostoon.
Lisäksi koodin sisennys voisi olla selkeämpi ja echo-kutsuja himpun verran vähemmän.

ajv [16.08.2004 09:20:00]

#

Tietokannan avauksen ja taulun valitsemisen olisi voinut laittaa vaikka "top.php":hen ja sulkemisen "bot.php":n.

akx [16.08.2004 18:12:10]

#

Ja lisäksi tuo lukumääräquery on HUONO (ajatellaan esimerkiksi 35000 banneria, köh),
"SELECT COUNT(*) FROM Bannerpic" toimii kevyemmin.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta