Chtel bych se zeptat, jak udělat v PHP, aby uživatel, který se nezaregistruje na stránkách mohl neco vybrat i bez registrace,
zapsat to do db a potom se teprve registrovat a v db priradit ID jiz z registrace.
Jsem zacatecnik, ale tusim ze to jde to udelat asi pomocí session?
Fórum › PHP
Uživatel bez registrace - pomocí session ?
ololol píše:#
# Chtel bych se zeptat, jak udělat v PHP, aby uživatel, který se nezaregistruje na stránkách mohl neco vybrat i bez registrace,#
#zapsat to do db a potom se teprve registrovat a v db priradit ID jiz z registrace.
Pokuste se prosím popsat problém více polopaticky pro mě tupého skriptaře, takle totiž nemám vůbec páru o co gou.
On mysli neco jako je treba na czc.cz - ze si muzes neco koupit a zaregistrovat se az pri odesilani objednavky. Na to to chce spise neco jineho nez session - session se totiz smaze myslim ze po pul hodine neaktivity, coz neni uplne prakticke. Chce to psise cookies ktere mohou byt kombinovane i s nejakym ukladanim dat na strane serveru.
Tak tady je to co jsem sesmolil:
<?php
//doba zivotnosti sezeni, nastaveno na 1 den (24)
define('LIFETIME', 60*60*24);
//adresa databaze
define('DB_SERVER', 'localhost');
//uzivateske jmeno ...
define('DB_USER', 'root');
// heslo ...
define('DB_PASSWORD', 'jamesx7');
//jmeno databaze
define('DB_NAME', 'test');
session_set_cookie_params(LIFETIME);
session_start();
$conn = mysql_connect(DB_SERVER, DB_USER, DB_PASSWORD) or die('Could not connect: '.mysql_error());
mysql_select_db(DB_NAME) or die('Could not select database');
function escape($str) {
if(get_magic_quotes_gpc())
$str = stripslashes($str);
if(function_exists('mysql_real_escape_string'))
$str = mysql_real_escape_string($str, $GLOBALS['conn']);
else
$str = addslashes($str);
return $str;
}
//trida na ukladani promennych
class save_var {
//inatalace pokud se jeste neistalovalo
function install() {
if(!mysql_query('CREATE TABLE variables (
sid VARCHAR(32) NOT NULL UNIQUE,
var TEXT,
last_update INT(11) UNSIGNED NOT NULL,
primary key(sid)
)', $GLOBALS['conn'])) {
trigger_error('Could not install basket. MySQL reports: '.mysql_error($GLOBALS['conn']), E_USER_WARNING);
}
}
//nahrat promennou na urcenem sid
function read($sid) {
$res = mysql_query('SELECT var
FROM variables
WHERE sid = "'.escape($sid).'"
LIMIT 1', $GLOBALS['conn']);
if(!$res) {
trigger_error('Could not retrieve variable at sid '.$sid.'. MySQL reports: '.mysql_error($GLOBALS['conn']), E_USER_WARNING);
return FALSE;
}
if(mysql_num_rows($res) == 0) {
trigger_error('Could not retrieve variable at sid '.$sid.', variable does not exists.', E_USER_WARNING);
return FALSE;
}
return unserialize(mysql_result($res, 0));
}
//zapsat/prepsat promenou na urcitem sid
function write($var, $sid) {
if($this->exists($sid)) {
if(!mysql_query('UPDATE variables
SET var = "'.escape(serialize($var)).'",
last_update = '.time().'
WHERE sid = "'.escape($sid).'"', $GLOBALS['conn'])) {
trigger_error('Could not write to variables. MySQL reports: '.mysql_error($GLOBALS['conn']), E_USER_WARNING);
return FALSE;
}
return TRUE;
}
else {
if(!mysql_query('INSERT INTO variables
(sid, var, last_update)
VALUES ("'.escape($sid).'", "'.escape(serialize($var)).'", '.time().')', $GLOBALS['conn'])) {
trigger_error('Could not write to variables. MySQL reports: '.mysql_error($GLOBALS['conn']), E_USER_WARNING);
return FALSE;
}
return TRUE;
}
}
//otestovat zdali na urcenem sid polozka existuje
function exists($sid) {
$res = mysql_query('SELECT COUNT(sid)
FROM variables
WHERE sid="'.escape($sid).'"');
if(!$res) {
trigger_error('Could no check if variable at sid '.$sid.' exists. MySQL reports: '.mysql_error($GLOBALS['conn']), E_USER_WARNING);
return FALSE;
}
return mysql_result($res, 0);
}
//samznuti promenne dle sid
function delete($sid) {
return mysql_query('DELETE FROM variables
WHERE sid = "'.escape($sid).'"');
}
//smaznuti uz neplatnych(starych) promennych
function gc() {
return mysql_query('DELETE FROM variables
WHERE last_update<'.(time()-LIFETIME));
}
}
//tak tady je uz vysneny nakupni kosik, ke kteremu muzete pridat
//spoustu uzitecnych funkci a prommenych
class basket {
//jednotlive polozky kosiku
var $items = array();
//pridat polozku s nazvem $name a poctem $count
function add_item($name, $count) {
if(array_key_exists($name, $this->items)) {
$this->items[$name] += $count;
}
else {
$this->items[$name] = $count;
}
}
//samzat polozku s urcitim nazvem
function delete_item($name) {
unset($this->items[$name]);
}
//vratit pro urcitou polozku pocet v kosiku
function get_count($name) {
if(array_key_exists($name, $this->items)) {
return $this->items[$name];
}
else {
return 0;
}
}
//nastavit pro urcitou polozku pocet v kosiku
function set_count($name, $count) {
$this->items[$name] = $count;
}
}
/*NA ZACATEK SKRITPU*/
//pouziti
$save = new save_var();
//pouze jednou spustit
$save->install();
if(!isset($_SESSION['basket'])) {
if($save->exists(session_id())) {
$_SESSION['basket'] = $save->read(session_id());
}
else {
$_SESSION['basket'] = new basket();
}
}
//pridavani do kosiku
$_SESSION['basket']->add_item('polozka1', 2);
$_SESSION['basket']->add_item('polozka1', 6);
//vypis pocru pro urcitou polozku v kosiku
echo $_SESSION['basket']->get_count('polozka1').' ';
//samzani polozky
$_SESSION['basket']->delete_item('polozka1');
//vypis pocru pro urcitou polozku v kosiku
echo $_SESSION['basket']->get_count('polozka1').' ';
/*NA KONEC SKRIPTU*/
if(!empty($_SESSION['basket']->items)) {
$save->write($_SESSION['basket'], session_id());
}
$save->gc();
?>
Kdyby byly nějaké nejasnosti nebo bych tam měl nějaké chyby, tak to prosím postněte.
Cau D1ce a ostatní, jsem zacatecnik, ted to z meho dotazu vyplyne, prosimte jak mam volat funkci add_item
napr nejakym formularem.
Tohle je zdroj co mam do ted vytvoreny:/chtel jsem volat kosik.php/
cast souboru katalog.php
echo "<table class=TabulkaNahled width='630' height=260 border='1'><FORM ACTION='kosik.php'>n";
echo "<tr><td rowspan=6 class='DetailTabulkaImgNahled'><img src=".$cesta_img_big." width=320 ></td>n";
echo "<td width=320 class='NazevPolozkyNahled'>".$nazev."</td></tr>n";
echo "<tr><td class='DetailTabulkaImgNahled'>rozm?r: ".$rozmer."</td></tr>n";
echo "<tr><td class='DetailTabulkaImgNahled'> ".$text1."</td></tr>n";
echo "<tr><td class='CenaPolozkyNahled'><INPUT TYPE=HIDDEN NAME=ID VALUE=".$ID.">Cena: ".$cenamo." K? <INPUT TYPE=Submit class='Tlacitko' VALUE="KOUPIT"></td></tr>n";
echo "</FORM>n";
v kodu je:
//pridavani do kosiku
$_SESSION['basket']->add_item('polozka1', 2);
To mi neni moc jasny..
Asi neni potreba volat kosik.php, a věechno mít v jednom souboru...jo a nemam tam pocet a nazev
<!-- katalog.php -->
<form action="kosik.php" method="post">
<table class="TabulkaNahled" width="630" height="260" border="1">
<tr>
<td rowspan=6 class="DetailTabulkaImgNahled"><img src="<?php echo $cesta_img_big; ?>" width="320"></td>
<td width="320" class="NazevPolozkyNahled"><?php echo $nazev; ?></td>
</tr>
<tr>
<td class="DetailTabulkaImgNahled">rozm?r: <?php echo $rozmer; ?></td>
</tr>
<tr>
<td class="DetailTabulkaImgNahled"> <?php echo $text1; ?></td>
</tr>
<tr>
<td class="CenaPolozkyNahled">
<input type="hidden" name="ID" value="<?php echo $ID; ?>">Cena: <?php echo $cenamo; ?> K?
Pocet: <input type="text" name="count" value="1">
<input type="submit" class="Tlacitko" value="PRIDAT DO KOSIKU">
</td>
</tr>
</table>
</form>
<?php
//kosik.php
if(isset($_POST['ID']) && is_numeric($_POST['count'])) {
//kdyz ukladate id polozek, tak pod id bych to rovnou ukladal
$_SESSION['basket']->add_item($_POST['ID'], $_POST['count']);
}
//a tak dale ...
?>
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Registrace domény na podnikání bez ŽL — založil spartan13
Anketa pomocí session — založil MaxDJs
Session prenos na stranku bez checklogin — založil Vlado
Pokud uživatel požaduje adresu ve které je .php nebo jiná koncovka p… — založil CZechBoY
Nahrávání výstupu pomocí Wasapi bez podpory zvukovky — založil honza15
Moderátoři diskuze