Látogatók regisztrálása
Feladat: Az adatfeltöltéssel való ismerkedés gyanánt készítsünk egy olyan alkalmazást, mely fogadni és adatbázisban tárolni képes honlapunk látogatóinak a következő adatait (amennyiben a látogató ezeket egy űrlapon megadja és kéri a rögzítését): név, email cím, megye és IP cím.
Lépjünk be a phpMyAdmin felületre és hozzunk létre egy latogato nevű táblát a következő mezőkkel: id, LNev, Email, Megye, IP.
- Az id a tábla elsődleges kulcsa, INT típúsú,
- LNev a látogató neve, 32 karakter hosszúságú sztring,
- EMail a látogató email címe, 48 karakter hosszúságú sztring,
- Megye a látogató megyéjének id azonosítója, INT típusú,
- IP a látogató IP címe, 15 karakter hosszú sztring.
Ezek után hozzáláthatunk az adatbeviteli felület kialakításához. A képernyő bal oldalán listadobozból lehessen kiválasztani a már regisztrált felhasználókat. Ha a listából kiválasztunk egy nevet, akkor jobb oldalon jelenjenek meg a kiválasztott felhasználó adatai. Ha a lista első, Válassz/Új! elemére kattintunk, akkor lehessen új felhasználót felvinni az adatbázisba. A lap alján táblázatos formában jelenjen meg az összes, már rögzített felhasználó, minden adatával. Először készítsük el a következő beviteli felületet kialakító html kódot:
Az oldal listája:
http://gorbem.hu/PH/latogatok1.php
<html>
<head>
<title>Látogatók</title>
</head>
<body bgcolor="#eeeeee">
<blockquote><blockquote>
<h2>A honlap regisztrált látogatói:</h2>
</blockquote></blockquote>
<table border="1" bordercolor="#ffffff" cellpadding="10" cellspacing="0">
<tr>
<td>
<form name="" action="" method="POST">
<select name="latoid" size="21" />
<option selected value="valassz" />Válassz/Új!
</select>
</td>
<td valign="top">
<table border="1" bordercolor="#ffffff" cellpadding="10" cellspacing="0">
<tr>
<td align="right"><b>id:</td>
<td><input type="text" name="lnev" size="22" disabled="disabled"></td>
</tr>
<tr>
<td align="right"><b>A látogató neve:</td>
<td><input type="text" name="lnev" size="22"></td>
</tr>
<tr>
<td align="right"><b>e-mail címe:</td>
<td><input type="text" name="email" size="22" value=""></td>
</tr>
<tr>
<td align="right"><b>Megye:</td>
<td><select name="megyeid" /><option selected value="valassz" />Válassz!</select></td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" name="mentes" value="Az adatok
mentése"></td>
</tr>
</table>
</td>
</tr>
</table>
<br /><br />
<table border="1" bordercolor="#ffffff" cellpadding="4" cellspacing="0">
<tr>
<th>id</th>
<th>A látogató neve:</th>
<th>e-mail:</th>
<th>Megye:</th>
<th>IP-cím:</th>
</tr>
</table>
</form>
</body>
</html>
Mivel az alkalmazás ezt az űrlapot mindig a képernyőn tartja, a html listát csak beszúrt php kódokkal fogjuk dinamikussá tenni. Ha az alkalmazás dinamikusan cserélné a teljes képernyő tartalmat, akkor szinte minden sorának php kódokat kellene tartalmaznia.
A bővítési helyek és tartalmak:
- A html lista elejére a mentési rutinokat helyezzük. Ha új látogatót veszünk fel, akkor az sql parancs INSERT, ha meglévőt javítunk, akkor UPDATE.
- A listadoboz onclick eseményéhez form submit-ot rendelünk, ezáltal a listaelemeken való kattintásra a lap kérést küld a szervernek, az aktív elemek beállított értékeinek POST-olásával.
- A listadoboz elemeit a latogato tábla LNev mezőivel töltjük fel.
- Az űrlap további mezőit a kiválasztott látogató lekérdezett adatival töltjük fel.
- A megyéket tartalmazó listát a megye tábla Megye mezőivel töltjük fel és a kiválasztott látogató megyéje szerint történik a select beállítása.
- Az űrlap alatti táblázat sorait a latogato táblán futtatott lekérdezés eredménytáblájának while-al történő feldolgozásával töltjük fel.
A megjelenő adatok mindegyikét ki kell tölteni, hogy a felvétel megtörténjen. Az id bevitelére nincs lehetőség, a neki megfelelő beviteli mező disabled tulajdonsága be van állítva. Mivel felvettünk négy látogatót, a beviteli felület alján az összes rögzített adat id szerint rendezve egy táblázatban látható.
Nézzük az ezt megvalósító listát:
http://gorbem.hu/PH/latogatok2.php
<?php
include("hconfig.php");
$lid = $_POST['latoid'];
$lnev = $_POST['lnev'];
$email = $_POST['email'];
$megye = $_POST['megyeid'];
if ( isset($_POST['mentes']) && ($_POST['latoid'] == "valassz") && ($_POST['lnev'] !== "") && ($_POST['email'] !== "") && ($_POST['megyeid'] !== "valassz") ){
mysql_query("INSERT INTO latogato SET LNev='$lnev', EMail='$email', Megye='$megye'");
}
if ( isset($_POST['mentes']) && ($_POST['latoid'] !== "valassz") && ($_POST['lnev'] !== "") && ($_POST['email'] !== "") && ($_POST['megyeid'] !== "valassz") ){
mysql_query("UPDATE latogato SET LNev='$lnev', EMail='$email', Megye='$megye' WHERE id='$lid'");
}
?>
<html>
<head>
<title>Látogatók</title>
</head>
<body bgcolor="#eeeeee">
<form name="" action="Latogatok.htm" method="POST">
<input type="submit" name="vissza" value="Vissza" />
</form>
<blockquote><blockquote>
<h2>A honlap regisztrált látogatói:</h2>
</blockquote></blockquote>
<table border="1" bordercolor="#ffffff" cellpadding="10" cellspacing="0">
<tr>
<td>
<form name="" action="" method="POST">
<select name="latoid" size="21" onclick="this.form.submit()" />
<option selected value="valassz" />Válassz/Új!
<?php
$eredm = mysql_query("SELECT * FROM latogato ORDER BY LNev");
while ( $sor = mysql_fetch_object($eredm) ){
print "<option
value=\"$sor->id\"";
if ( (isset($latoid) && $latoid == $sor->id) ){
print " selected";
}
print "> $sor->LNev\n";
}
?>
</select>
</td>
<?php
if ( isset($_POST['latoid']) ){
$lid = $_POST['latoid'];
$eredm = mysql_query("SELECT * FROM latogato WHERE id='$lid'");
$sor = mysql_fetch_object($eredm);
$lnev = $sor->LNev;
$email = $sor->EMail;
$megye = $sor->Megye;
}
?>
<td valign="top">
<table border="1" bordercolor="#ffffff" cellpadding="10" cellspacing="0">
<tr>
<td align="right"><b>id:</td>
<td><input type="text" name="lnev" size="3" <?php
print "value=\"$lid\" ";?> disabled="disabled"></td>
</tr>
<tr>
<td align="right"><b>A látogató neve:</td>
<td><input type="text" name="lnev" size="22" <?php
print "value=\"$lnev\" ";?> ></td>
</tr>
<tr>
<td align="right"><b>e-mail címe:</td>
<td><input type="text" name="email" size="22" <?php print "value=\"$email\" ";?> ></td>
</tr>
<tr>
<td align="right"><b>Megye:</td>
<td><select name="megyeid" /><option selected value="valassz" />Válassz!
<?php
$eredm = mysql_query("SELECT * FROM megye");
while ( $sor = mysql_fetch_object($eredm) ){
print "<option
value=\"$sor->id\"";
if ( ($megye == $sor->id) ){
print " selected";
}
print "> $sor->Megye\n";
}
?>
</select></td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" name="mentes" value="Az adatok
mentése"></td>
</tr>
</table>
</td>
</tr>
</table>
<br /><br />
<table border="1" bordercolor="#ffffff" cellpadding="4" cellspacing="0">
<tr>
<th>id</th>
<th>A látogató neve:</th>
<th>e-mail:</th>
<th>Megye:</th>
<th>IP-cím:</th>
</tr>
<?php
$eredm = mysql_query("SELECT *
FROM latogato");
while ( $sor = mysql_fetch_object($eredm) ){
print "<tr>";
print "<td>$sor->id</td>";
print "<td>$sor->LNev</td>";
print "<td>$sor->EMail</td>";
$megye = $sor->Megye;
$ered = mysql_query("SELECT * FROM megye WHERE id='$megye'");
$sora = mysql_fetch_object($ered);
print "<td>$sora->Megye</td>";
print "<td> $sora->IP</td>";
print "</tr>";
}
?>
</table>
</form>
</body>
</html>
Ezek után már csak egy feladat van hátra. Meg kell oldani a kliens IP címének lekérdezését és tárolását, illetve megakadályozni azt, hogy ugyanarról a címről több felhasználói bejegyzést is lehessen tenni. Ehhez a lista elején lévő php kódot kell a következőképpen kiegészíteni:
http://gorbem.hu/PH/latogatok3.php
<?php
$ip = $_SERVER['REMOTE_ADDR'];
include("hconfig.php");
$lid = $_POST['latoid'];
$lnev = $_POST['lnev'];
$email = $_POST['email'];
$megye = $_POST['megyeid'];
$ered = mysql_query("SELECT *
FROM latogato WHERE IP='$ip'");
$sszama = mysql_num_rows($ered);
$sszama = $sszama+0;
if ( ($sszama == 0) && isset($_POST['mentes']) && ($_POST['latoid'] == "valassz") && ($_POST['lnev'] !== "")
&& ($_POST['email'] !== "") && ($_POST['megyeid'] !== "valassz") ){
mysql_query("INSERT
INTO latogato SET LNev='$lnev', EMail='$email', Megye='$megye', IP='$ip'");
}
if ( isset($_POST['mentes']) && ($_POST['latoid'] !== "valassz") && ($_POST['lnev'] !== "") && ($_POST['email'] !== "") && ($_POST['megyeid'] !== "valassz") ){
mysql_query("UPDATE latogato SET LNev='$lnev', EMail='$email', Megye='$megye', IP='$ip' WHERE id='$lid'");
}
?>
<html>
<head>
<title>Látogatók</title>
</head>
<body bgcolor="#eeeeee">
<form name="" action="Latogatok.htm" method="POST">
<input type="submit" name="vissza" value="Vissza" />
</form>
<blockquote><blockquote>
<h2>A honlap regisztrált látogatói:</h2>
</blockquote></blockquote>
<table border="1" bordercolor="#ffffff" cellpadding="10" cellspacing="0">
<tr>
<td>
<form name="" action="" method="POST">
<select name="latoid" size="21" onclick="this.form.submit()" />
<option selected value="valassz" />Válassz/Új!
<?php
$eredm = mysql_query("SELECT * FROM latogato ORDER BY LNev");
while ( $sor = mysql_fetch_object($eredm) ){
print "<option
value=\"$sor->id\"";
if ( (isset($latoid) && $latoid == $sor->id) ){
print " selected";
}
print "> $sor->LNev\n";
}
?>
</select>
</td>
<?php
if ( isset($_POST['latoid']) ){
$lid = $_POST['latoid'];
$eredm = mysql_query("SELECT * FROM latogato WHERE id='$lid'");
$sor = mysql_fetch_object($eredm);
$lnev = $sor->LNev;
$email = $sor->EMail;
$megye = $sor->Megye;
}
?>
<td valign="top">
<table border="1" bordercolor="#ffffff" cellpadding="10" cellspacing="0">
<tr>
<td align="right"><b>id:</td>
<td><input type="text" name="lnev" size="3" <?php
print "value=\"$lid\" ";?> disabled="disabled"></td>
</tr>
<tr>
<td align="right"><b>A látogató neve:</td>
<td><input type="text" name="lnev" size="22" <?php
print "value=\"$lnev\" ";?> ></td>
</tr>
<tr>
<td align="right"><b>e-mail címe:</td>
<td><input type="text" name="email" size="22" <?php print "value=\"$email\" ";?> ></td>
</tr>
<tr>
<td align="right"><b>Megye:</td>
<td><select name="megyeid" /><option selected value="valassz" />Válassz!
<?php
$eredm = mysql_query("SELECT * FROM megye");
while ( $sor = mysql_fetch_object($eredm) ){
print "<option
value=\"$sor->id\"";
if ( ($megye == $sor->id) ){
print " selected";
}
print "> $sor->Megye\n";
}
?>
</select></td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" name="mentes" value="Az adatok
mentése"></td>
</tr>
<tr>
<td colspan="2" align="center"><b>IP: <?php
print($ip); ?></b></td>
</tr>
</table>
</td>
</tr>
</table>
<br /><br />
<table border="1" bordercolor="#ffffff" cellpadding="4" cellspacing="0">
<tr>
<th>id</th>
<th>A látogató neve:</th>
<th>e-mail:</th>
<th>Megye:</th>
<th>IP-cím:</th>
</tr>
<?php
$eredm = mysql_query("SELECT *
FROM latogato");
while ( $sor = mysql_fetch_object($eredm) ){
print "<tr>";
print "<td>$sor->id</td>";
print "<td>$sor->LNev</td>";
print "<td>$sor->EMail</td>";
$megye = $sor->Megye;
$ered = mysql_query("SELECT * FROM megye WHERE id='$megye'");
$sora = mysql_fetch_object($ered);
print "<td>$sora->Megye</td>";
print "<td> $sor->IP</td>";
print "</tr>";
}
?>
</table>
</form>
</body>
</html>