Koodi sisältää kolme tiedostoa (kysely_admin.php, kysely.php, sekä install.php). Tämän lisäksi sinun pitää luoda tiedosto nimeltä mysql.php ja antaa sille oikeudet 777 (chmod).
Pakettina koodin saa ladattua osoitteesta http://tontsa.arkku.net/dl/koodivinkki-kysely.zip
Olen testannut koodia moneen kertaan, mutta kuten kaikki tietävät, on mahdollista että siinä on myös aukkoja/bugeja. Siksi toivonkin että näistä ilmoitettaisiin minulle kommentilla tai ircissä Tontsa-san@Quakenet.
Tämä on ensimmäinen koodini Ohjelmointiputkaan, Otan mielelläni vastaan kommentteja, palautetta ja kehitysehdotuksia koskien koodia.
kysely_admin.php
<?php
$admin_salasana = "sanasala"; // Määrittää adminin salasanan.
include("mysql.php"); // Sisällyttää mysql.php:n
session_start(); // Aloittaa session.
$do = $_GET["do"];
if ($do == login) { // Jos käyttäjä yrittää kirjautua.
if ($_POST["salasana"] == $admin_salasana) { // Jos salasana on oikein.
$_SESSION["admin"] = 1; // Lisää sessioniin tunnuksen "admin".
} else {
echo "<font color=\"red\">
<p> Väärä salasana </p>
</font>";
}
}
if ($do == "logout") // Käyttäjä yrittää kirjautua ulos.
unset($_SESSION["admin"]); // Poistetaan sessionista tunnus "admin".
if (!$_SESSION["admin"]) { // Jos käyttäjä EI ole kirjautunut.
echo "<p> Kirjaudu sisään: </p> // Kirjautumisformi.
<form method=\"post\" action=\"kysely_admin.php?do=login\">
Salasana: <input type=\"password\" name=\"salasana\"> <br>
<p> <input type=\"submit\" value=\"Kirjaudu\"> </p>
</form>";
exit;
}
echo "<p> Admin: </p>
<p> <a href=\"kysely_admin.php?do=logout\"> Kirjaudu ulos </a> <br>
<a href=\"kysely_admin.php?do=ohje\"> Ohje </a> <br>";
if (!$mysql)
echo "<b> <a href=\"kysely_admin.php?do=install\">Luo taulut tietokantaan </a> </b> <br>";
if ($mysql) {
echo "<a href=\"kysely_admin.php?do=new\"> Luo uusi kysely </a> <br>
<a href=\"kysely_admin.php?do=selaa\"> Selaa kyselyitä </a> <br>
<a href=\"kysely_admin.php?do=kysely\"> Näytä tämänhetkinen kysely</a> </p>";
}
if ($do == "install") {
// Lisätään tietoturvaa. Varmistetaan, että
// installia ei avata ellei kysely_admin.php ole auki.
define('install', TRUE);
include("install.php");
}
if ($do == "kysely") { // Käyttäjä haluaa esikatsella kyselyä.
$included = 1;
include("kysely.php"); // Sisällytetään kysely.
}
if ($do == "selaa") {
$poista = $_GET["poista"];
$varmistus = $_GET["varmistus"];
echo "<p>Listataan kaikki kyselyt uusimmasta vanhimpaan:</p>
Toiminnot: <br>
- <a href=\"kysely_admin.php?do=selaa&poista=all\">Poista kaikki</a><br>
( Poistaa kaikki paitsi nykyisen kyselyn )";
if ($poista == "all") {
if ($varmistus == 1) {
@mysql_query("DELETE from kyselyt where kaytossa = '0'", $mysql);
echo "<p> Poistettiin kaikki kyselyt tietokannasta. </p>";
} else {
echo "<p> Haluatko varmasti poistaa kyselyt? <br>
- <a href=\"kysely_admin.php?do=selaa&poista=" . $poista . "&varmistus=1\">Kyllä</a> <br>
- <a href=\"kysely_admin.php?do=selaa\">Ei</a>";
exit;
}
} else {
if (!mysql_query("DELETE from vastaukset where kyselyn_id = '$poista'", $mysql))
echo "Kyselyn poistaminen epäonnistui";
@mysql_query("DELETE from kyselyt where id = '$poista'", $mysql);
@mysql_query("DELETE from vastaukset where kyselyn_id = '$poista'", $mysql);
}
$haku = mysql_query("SELECT * from kyselyt ORDER BY id desc", $mysql);
for ($i = 0; $i < mysql_num_rows($haku); $i++) {
$id = mysql_result($haku, $i, "id");
$kysymys = mysql_result($haku, $i, "kysymys");
$aania = mysql_result($haku, $i, "vastauksia");
$kaytossa = mysql_result($haku, $i, "kaytossa");
if ($kaytossa)
echo "<b>";
echo "<p>#" . $id . ": " . $kysymys . "</b>
- <a href=\"kysely_admin.php?do=selaa&poista=" . $id . "\">poista</a>";
echo "</p>";
$query = mysql_query("SELECT * from vastaukset where kyselyn_id = '$id'", $mysql);
for ($j = 0; $j < mysql_num_rows($query); $j++) {
$vastaus = mysql_result($query, $j, "vastaus");
$vastauksia = mysql_result($query, $j, "vastauksia");
if ($vastauksia == "0")
echo $vastaus . " - 0%<br>";
if ($vastauksia <> "0")
echo $vastaus . " - " . round(100 * $vastauksia / $aania) . "% <br>";
}
echo "<br> Ääniä yhteensä: " . $aania;
}
}
if ($do == "new") {
// Käyttäjä haluaa luoda uuden kyselyn.
if ($_POST["kysymys"]) {
$kysymys = $_POST["kysymys"];
mysql_query("UPDATE kyselyt set kaytossa = '0' where kaytossa = '1'", $mysql);
if ($_POST["vastaus1"] && $_POST["vastaus2"]) {
mysql_query("INSERT into kyselyt (kysymys, vastauksia, kaytossa)
values ('$kysymys','0','1')", $mysql);
$haku = mysql_query("SELECT * from kyselyt where kysymys = '$kysymys'", $mysql);
while ($rivi = mysql_fetch_array($haku, MYSQL_ASSOC)) {
$kyselyn_id = $rivi["id"];
}
$vastaus1 = $_POST["vastaus1"];
$vastaus2 = $_POST["vastaus2"];
mysql_query("INSERT into vastaukset (kyselyn_id, vastauksia, vastaus)
values ('$kyselyn_id','0','$vastaus1')", $mysql);
mysql_query("INSERT into vastaukset (kyselyn_id, vastauksia, vastaus)
values ('$kyselyn_id','0','$vastaus2')", $mysql);
if ($_POST["vastaus3"]) {
$vastaus3 = $_POST["vastaus3"];
mysql_query("INSERT into vastaukset (kyselyn_id, vastauksia, vastaus)
values ('$kyselyn_id','0','$vastaus3')", $mysql);
}
if ($_POST["vastaus4"]) {
$vastaus4 = $_POST["vastaus4"];
mysql_query("INSERT into vastaukset (kyselyn_id, vastauksia, vastaus)
values ('$kyselyn_id','0','$vastaus4')", $mysql);
}
mysql_query("DELETE from kysely_ips", $mysql);
echo "<p>Tekemäsi kysely:</p>";
@include("kysely.php");
exit;
}
}
echo "<p><b>HUOM!</b> Uusi kysely nollaa vanhan kyselyn tilastot, <br>
mutta tallentaa tämänhetkiset tiedot. Vähintään kaksi vastausvaihtoehtoa,<br>
jos haluat alle neljä, voit jättää muut vaihtoehdot tyhjäksi.</p>
<form method=\"post\" action=\"kysely_admin.php?do=new\">
Kysymys: <input type=\"text\" name=\"kysymys\"><br><br>
Vastaukset: <OL>
<LI><input type=\"text\" name=\"vastaus1\">
<LI><input type=\"text\" name=\"vastaus2\">
<LI><input type=\"text\" name=\"vastaus3\">
<LI><input type=\"text\" name=\"vastaus4\">
</OL>
<input type=\"submit\" value=\"Luo kysely\">
</form> ";
}
if ($do == "ohje") { // Käyttäjä haluaa tarkastella ohjeita.
echo "Kysely-adminpaneelin ohjeet:
<ol>
<li> Jos sinulla on ongelmia kyselyn asennuksessa tarkista seuraavat asiat:
<ol class=\"a\">
<li> Olet luonut mysql.php tiedoston.
<li> Olet antanut sille oikeudet (chmod) 777
<li> Tarkista antamasi mysql-tiedot
<li> Jos mikään ei auta, niin kysy ohjeita minulta Quakenetissä /msg Tontsa-san
</ol>
<br>
<li> Ongelmia uuden kyselyn teossa:
<ol class=\"b\">
<li> Tarkista että olet täyttänyt tarvittavat kentät
<li> Muussa tapauksessa kysy apua minulta Quakenetissä /msg Tontsa-san
</ol>
</ol>
<br><br> Jos sinulla on muuta kysyttävää scriptistä, tee se Quakenetissä<br>
lähettämällä minulle viestiä: /msg Tontsa-san. Ja jos mahdollista, lisää<br>
jonnekin Copyright merkintä, tai linkki ohjelmointiputkan koodivinkkiin.";
}
?>kysely.php
<?php
@include("mysql.php"); // Sisällytetään mysql.php
$user_ip = $_SERVER["REMOTE_ADDR"]; // Haetaan käyttäjän IP muuttujaan.
$v = $_GET["v"];
$haku = mysql_query("SELECT * from kyselyt where kaytossa = '1'", $mysql);
while ($rivi = mysql_fetch_array($haku, MYSQL_ASSOC)) {
$kyselyn_id = $rivi["id"];
$kysymys = $rivi["kysymys"];
$aania = $rivi["vastauksia"];
}
$haku = mysql_query("SELECT * from kysely_ips where ip = '$user_ip'", $mysql);
while ($rivi = mysql_fetch_array($haku, MYSQL_ASSOC))
$check_ip = $rivi["ip"];
if ($v && !$check_ip) { // Käyttäjä vastaa kyselyyn
// Tallennetaan tiedot tietokantaan.
mysql_query("INSERT into kysely_ips (ip) values ('$user_ip')", $mysql);
@mysql_query("UPDATE kyselyt set vastauksia = vastauksia + 1 where id = '$kyselyn_id'", $mysql);
@mysql_query("UPDATE vastaukset set vastauksia = vastauksia + 1 where vastaus_id = '$v'", $mysql);
$aania = $aania + 1;
}
if (!$kysymys)
die("Ei kyselyä"); // Jos kyselyä ei ole, "die: Ei kyselyä"
echo "<p>" . $kysymys . "</p>";
$query = mysql_query("SELECT * from vastaukset where kyselyn_id = '$kyselyn_id'", $mysql);
for ($i = 0; $i < mysql_num_rows($query); $i++) {
$vastaus = mysql_result($query, $i, "vastaus");
$vastauksia = mysql_result($query, $i, "vastauksia");
$vastaus_id = mysql_result($query, $i, "vastaus_id");
if ($check_ip || $_SESSION["admin"] || $v) {
if ($vastaus_id == $v)
$vastauksia == $vastauksia + 1;
if ($vastauksia == "0")
echo $vastaus . " - 0%<br>";
if ($vastauksia <> "0")
echo $vastaus . " - " . round(100 * $vastauksia / $aania) . "%<br>";
} else {
if ($vastauksia == "0")
echo "<a href=\"kysely.php?v=" . $vastaus_id . "\">" . $vastaus . "</a> - 0%<br>";
if ($vastauksia <> "0")
echo "<a href=\"kysely.php?v=" . $vastaus_id . "\">" . $vastaus . "</a> - " . round($vastauksia / $aania * 100) . "%<br>";
}
}
echo "<br>Ääniä yhteensä: " . $aania;
if (!$_SESSION["admin"]) // Jos admin ei ole kirjautuneena
echo "<p> <a href=\"kysely_admin.php\">Admin</a>";
?>install.php
<?php
defined('install') or header('Location: kysely_admin.php');
if ($mysql) {
echo "<p><b>Tarvittava asennus on jo tehty.</b></p>";
exit;
}
$mysql_osoite = $_POST["mysql_osoite"]; // Haetaan postin tiedot muuttujiin. (osoite)
$mysql_tunnus = $_POST["mysql_tunnus"]; // mysql-tunnus
$mysql_passwd = $_POST["mysql_passwd"]; // mysql:n salasana.
$mysql_db = $_POST["mysql_db"]; // Valittava tietokanta.
if ($mysql_osoite) {
$mysql = @mysql_connect($mysql_osoite, $mysql_tunnus, $mysql_passwd)
or die("<p>Yhdistäminen ei onnistunut!<br> <a href=\"kysely_admin.php?do=install\"> Takaisin </a>");
mysql_select_db($mysql_db, $mysql)
or die("<p>Tietokantaa ei löytynyt!<br> <a href=\"kysely_admin.php?do=install\"> Takaisin </a>");
if ($mysql)
echo "<p><b>Yhdistäminen tietokantaan onnistui!<br>"; // Käyttäjä antoi oikeat tiedot.
// Yritetään luoda taulut tietokantaan
// Sekä tallennetaan tiedot mysql.php:hen
mysql_query("CREATE TABLE if not exists kyselyt (
id INT(11) default NULL auto_increment, PRIMARY KEY(id),
kysymys text,
vastauksia INT(11) default NULL,
kaytossa INT(1) default NULL)") or
die("Virhe luodessa taulua 'kyselyt'<br> <a href=\"kysely_admin.php?do=install\"> Takaisin </a>");
mysql_query("CREATE TABLE if not exists vastaukset (
vastaus_id INT(11) NULL auto_increment, PRIMARY KEY(vastaus_id),
kyselyn_id INT(11) default NULL,
vastauksia INT(11) default NULL,
vastaus text)") or
die("Virhe luodessa taulua 'vastaukset'<br> <a href=\"kysely_admin.php?do=install\"> Takaisin </a>");
mysql_query("CREATE TABLE if not exists kysely_ips (
ip text)") or
die("Virhe luodessa taulua 'kysely_ips'<br> <a href=\"kysely_admin.php?do=install\"> Takaisin </a>");
$tiedosto = 'mysql.php';
$tiedot = "<?php\n
\$mysql = mysql_connect(" . $mysql_osoite . "," . $mysql_tunnus . "," . $mysql_passwd . ");\n
mysql_select_db(" . $mysql_db . ", \$mysql); \n
?>";
if (is_writable($tiedosto)) {
$avattu = fopen($tiedosto, "w");
fwrite($avattu, $tiedot);
fclose($avattu);
} else {
echo "Tiedostoon mysql.php ei voi kirjoittaa, oletko muistanut tehdä ja chmodata sen? (777)";
exit;
}
echo "Taulut luotu onnistuneesti - Tiedot tallennettu.</b><br> // Kyselyn asennus onnistui.
<a href=\"kysely_admin.php\">Adminoinnin etusivulle</a>";
exit;
}
echo "<p> Luo taulut tietokantaan </p>
<p> Tämä scripti luo tietokantaasi taulut, joita tarvitset käyttääksesi kyselyä,<br>
sekä ottaa muistiin mysql:ään tarvittavat tiedot.</p>
Tietokantojen luonti:
<p><form method=\"post\" action=\"kysely_admin.php?do=install\">
Tietokannan osoite: <input type=\"text\" name=\"mysql_osoite\" value=\"localhost\"><br>
Tietokannan tunnus: <input type=\"text\" name=\"mysql_tunnus\"> <br>
Tietokannan salasana: <input type=\"password\" name=\"mysql_passwd\"> <br><br>
Tietokannan nimi: <input type=\"text\" name=\"mysql_db\"> <br><br>
<input type=\"submit\" value=\"Tee taulut\">
</p>";
?>Tuollaisenaan ei lisää uusia kyselyitä, sillä uuden kyselyn lisäyksessä yritetään jättää kyselyn ID tyhjäksi, vaikka on auto_increment käytössä. Koodi rupeaa toimimaan korvaamalla kysely_admin.php:ssä:
mysql_query("INSERT into kyselyt (id, kysymys, vastauksia, kaytossa) values ('','$kysymys','0','1')", $mysql);koodilla
mysql_query("INSERT INTO kyselyt (kysymys, vastauksia, kaytossa) values ('$kysymys','0','1')", $mysql);Eli tuo id kentästä tyhjä arvo pois ( '' )
Kiitos kommentista, homma korjattu.
Sekä koodiin lisätty sisennykset.
Myös esimerkkiversion kyselystä laitoin näkyville:
http://tontsa.arkku.net/kysely.php
Missä on koodin kommentointi? ;)
Pitänee lisätä kommentointia nyt kun sain sen tänne näkyviin. :D
edit. nyt pitäisi olla kommentteja, onko tarpeeksi? :)
heiheiheii apua. lisäsin ton mun sivuille, mikä on salasana ?? annoin 777 oikeudet ja tein kaiken niinku piti, ja ne toimii sillei mut en tiiä salasanaa :(
salanasa on sanasala. Se määriteltiin alussa.
$admin_salasana = "sanasala"; // Määrittää adminin salasanan.
Edit: voit muokata sen sellaiseksi kuin haluat.
Aihe on jo aika vanha, joten et voi enää vastata siihen.