Autor Zpráva
wNi'
Profil *
Hmm, zdravim vas vsetkych, som zaciatocnik v programovani s PHP, s HTML a CSS mam uz dlhsie skusenosti, a tak som sa dal na tvorbu isteho druhu redakcneho systemu, i ked velmi jednoducheho, no mne to trva privelmi dlho (vsetko sa musim sam cele odznova ucit :( )… Zvacsa problemy dokazem vyriesit, casto nieco najdem na nete alebo si vypomozem cudzim source, ale tentokrat si neviem dat rady, a pritom ide o takmer banalnu a kazdodennu vec…
Potrebujem spravit, aby sa pomocou registracneho formularu do databazy "members" zapisovali ludia, co sa budu registrovat, to som i dokazal, uvazoval som teda dalej, ze by som vytvoril v tabulke novy stlpec s nejakym nazvom, ktory "ak by obsahoval hodnotu 1", boli danemu uzivatelovi pripustene vacsie prava - tzn jednoducho by som potom k funkciam ktore maju byt uzivatelovi s hodnotou 1 povolene pripisal k session_login podmienku, ze ak ma 1, tak sa to zobrazi… (velmi starodavny sposob)
Neskor som ale prisiel na iny sposob, naco sa kaslat s tym, aby som tvoril novy stlpec a vsade kde budu pre tychto uzivatelov funkcie pripisoval podmienky, tak som jednoducho chcel vytvorit externy subor, ktory by urcoval podla ID daneho uzivatela, ake moznosti su mu spristupnene, vypadal takto:

<?
$res = mysql_query("select id from members where id in (1, 2, 3) limit 1");
$arr = mysql_fetch_array($res)
if ($res['id']=="1,2,3") { echo "haha";
} else { echo "asdwdfsdfg"; }
?>

Ten by som bol nasledne vzdy len includoval, co nieje vobec problem - ano viem ze sa jedna o starodavny sposob, ale jednoducho a lahko by som oddelil jednu vrstvu od druhej, kedze ludi so specialnym pravom (v tomto pripade pridavanie prispevkov, ich upravovanie, mazanie etc.) bude len 6, nebol by problem po registracii ich ID pripisat do tochto suboru.. Lenze dozaista ste si vsimli ze je tam chyba. Ja nedoakzem zapisat tak isto mnozinu ako hore, aj dole - Neviem ako mam zapisat if ($res['id']=="1,2,3"), aby to 1,2,3 aj skutocne fungovalo…

A tak som upustil aj od tohoto sposobu, nakoniec som sa rozhodol, ze pre zatial (este vzdy pripominam ze s casom na tom niesom naozaj bohvieako) sa budu moct registrovat len osoby ktore poznam, ktore tam potrebujem, ktore budu pravidelne prispievat - kedze este vzdy nemam doriesene komentare k clankom, nebolo by ani treba inych uzivatelov - ved aj na co, a na co sa vobec registrovat niekam, kde clovek nema co zmenit ze jo.
Takze som vytvoril metodu, kedy pri registracii zada uzivatel specialny "registracny kluc", php overi ci je kluc zhodny z tym ktory ma on, ak ano tak script pokracuje dalej, ak nie tak presmeruje na errror page - tzn spravil som to nasledovne:

SUBOR REG_FORM.PHP:
<?
session_start();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Art Of Survival TEAM - Official web page…</title>
<style type="text/css">
@import url(css.css);
</style>
<link rel="stylesheet" href="slider/nivo-slider.css" type="text/css" media="screen" />
</head>
<body>
<?php include("bg_slider.php"); ?>
<?php include("header.php"); ?>
<div id="background">


<link rel="stylesheet" type="text/css" />
<script type="text/javascript">
function checkPass(){
//Store the password field objects into variables …
var pass1 = document.getElementById('pass1');
var pass2 = document.getElementById('pass2');
//Store the Confimation Message Object …
var message = document.getElementById('confirmMessage');
//Set the colors we will be using …
var goodColor = "#66cc66";
var badColor = "#ff6666";
//Compare the values in the password field 
//and the confirmation field
if(pass1.value == pass2.value){
//The passwords match. 
//Set the color to the good color and inform
//the user that they have entered the correct password 
pass2.style.backgroundColor = goodColor;
message.style.color = goodColor;
message.innerHTML = "Passwords Match!"
}else{
//The passwords do not match.
//Set the color to the bad color and
//notify the user.
pass2.style.backgroundColor = badColor;
message.style.color = badColor;
message.innerHTML = "Passwords Do Not Match!"
}
} 
</script>

<p style="color: #ffffff; font-family: Helvetica; font-size: 18px;" align="center">
Registrácia nového užívateľa:</p>
<form method="POST" action="reg_add.php" enctype="multipart/form-data">
<div align="center">
<table border="0" width="400">
<tr>
<td width="150" valign="top"><font class="mini">Username:</font><font class="mini_red">*</font></td>
<td width="100"><input type="text" name="username" class="reg_normal" /></td>
</tr>
<tr>
<td width="150" valign="top"><font class="mini">Password:</font><font class="mini_red">*</font></td>
<td width="100"><input type="password" name="password" id="pass1" /></td>
</tr>
<tr>
<td width="150" valign="top"><font class="mini">Confirm Password:</font><font class="mini_red">*</font></td>
<td width="100"><input type="password" name="password_reply" id="pass2" 
onkeyup="checkPass(); return false;" />
<span id="confirmMessage" class="confirmMessage"></span></td>
</tr>
<tr>
<td width="150" valign="top"><font class="mini">Registračný kód:</font><font class="mini_red">*</font></td>
<td width="100"><input type="text" name="reg_code" class="reg_normal" /></td>
</tr>

<tr>
<td width="100%" colspan="2">
<input type="submit" value="Registruj ma!" name="B1">
</td>
</tr>
</table>
</div>
</form>

<br />
<font class="normal_red">Polia oznacené hviezdickou sú žiadané!</font>
</div>
<?php include("foot.php"); ?>

</body>
</html>
………………………………………………………………………………….
SUBOR REG_ADD.PHP
<?
include "db.php";
print_r($_POST);

echo check_input($_POST['username']).'<br/>';
echo check_input($_POST['password']).'<br/>';
echo check_code($_POST['reg_code']).'<br/>';
if (!check_code($_POST['reg_code']))
{
header("Location: vsdf?error=3");
}
if ((!check_input($_POST['username'])) || (!check_input($_POST['password'])))
{
header("Location: vsdf?error=1");
}

$username = oprav($_POST['username']);
$password = oprav($_POST['password']);

$a = "INSERT INTO members (username, password) VALUES ('".$username."', '".$password."')";
mysql_query($a);

header("Location: index.php");

function check_input($data)
{
if (strlen($data) == 0)
{
return false;
}
return true;
}
function check_code($data)
{
if ($data == "w421b3a")
{
return false;
}
return true;
}
function oprav($data)
{
$data = trim($data);
$data = htmlspecialchars($data);
return $data;
}
?>
………………………………………………………………………………

- konkretne cast:

if (!check_code($_POST['reg_code']))
{
header("Location: vsdf?error=3");
}

mi nefunguje, neviem kde som spravil chybu (btw odvtedy som to velmi pomenil, napisem nizsie), vzdy mi vyhodi ten isty vysledok, aj ked tam zapojim else alebo bez toho vykricnika, aj tak mi vyhodi vzdy to iste, a nezalezi mu na tom co som zadal do formu :(
Pre vysvetlenie - kod by mal byt: w421b3a (napr.)
Rucne by som ho rozposlal ludom ktorych tam potrebujem, tym padom predijdem aj spiderom atd.
wNi'
Profil *
Nevoslo sa - pardon - pokracovanie:


mi nefunguje, neviem kde som spravil chybu (btw odvtedy som to velmi pomenil, napisem nizsie), vzdy mi vyhodi ten isty vysledok, aj ked tam zapojim else alebo bez toho vykricnika, aj tak mi vyhodi vzdy to iste, a nezalezi mu na tom co som zadal do formu :(
Pre vysvetlenie - kod by mal byt: w421b3a (napr.)
Rucne by som ho rozposlal ludom ktorych tam potrebujem, tym padom predijdem aj spiderom atd.

Novsia verzia obsahuje namiesto celeho reg_add toto:
<?
include "db.php";
print_r($_POST);

echo check_input($_POST['username']).'<br/>';
echo check_input($_POST['password']).'<br/>';
if (!($_POST['reg_code'])=="a")
{
    header("Location: asdasdasd");
}
die();
if ((!check_input($_POST['username'])) || (!check_input($_POST['password'])))
{
    header("Location: vsdf?error=1");
}

$username = oprav($_POST['username']);
$password = oprav($_POST['password']);

$a = "INSERT INTO members (username, password) VALUES ('".$username."', '".$password."')";
mysql_query($a);

header("Location: index.php");

function check_input($data)
{
    if (strlen($data) == 0)
    {
        return false;
    }
    return true;
}
function oprav($data)
{
    $data = trim($data);
    $data = htmlspecialchars($data);
    return $data;
}
?>

- Tzn. odstranena zbytocna funkcia a nahradene obycajnou podmienkou, aj tamto hore co neviem co znamena som dal prec ;)…
Btw tieto scripty pochadzaju z casti z mojej hlavy, tie jednoduchsie, ale ostatok je od skusenejsieho brachu, ktory mi parkrat vypomohol, avsak on je teraz daleko, a cez net sa s nim neda :(.. Takze som ostal na to sam, a s tymto problemom mi pomoct nevie…
Bol by som rad, ak by ste mi pomohli vy, no co najlepsie ak by ste v ziadnom pripade nemenili uz to co tam je napisane, myslim tym zapis do databazy, overovanie htmlspecialchars atd. - lebo takto jak to je sa v tom celkom vyznam, kym som si v tom urobil poriadok atd.
Vopred dakujem ;-)
xmark
Profil
Nechci malovat čerta na zeď, ale myslím že 250 řádků nikdo číst nebude. Nešlo by to zkomprimovat do deseti?
wNi'
Profil *
Chapem, hmm, pokusim sa, ale do desiatich to asi nepojde, pretoze si myslim ze tam vadi nejaka cast kodu s druhou…

Tak, cim nahradit:
if (!($_POST['reg_code'])=="a") 
{ 
header("Location: asdasdasd"); 
}
Tak aby to z formu fungovalo? Ked pole vo forme sa vola "reg_code", jeho hodnota by mala byt A, v pripade ze nieje, tak error, v pripade ze je, tak pokracuje (skusal som vsetky mozne Ifs ktore som nasiel na nete, w3, php.net etc.)

Staci?

Moderátor Alphard: Vkládej prosím kódy mezi značky [pre] a [/pre] (stačí kliknout na ).
Radek9
Profil
$_POST['reg_code']!="a"
wNi'
Profil *
@Radek9:
Dakujem, funguje :)..

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0