Uživatel bez registrace - pomocí session ? – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Uživatel bez registrace - pomocí session ? – PHP – Fórum – Programujte.comUživatel bez registrace - pomocí session ? – PHP – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
ololol0
Newbie
7. 12. 2006   #1
-
0
-

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?

Nahlásit jako SPAM
IP: ...–
Reklama
Reklama
ololol0
Newbie
7. 12. 2006   #2
-
0
-

.

Nahlásit jako SPAM
IP: ...–
Jakub0
Super člen
8. 12. 2006   #3
-
0
-

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.

Nahlásit jako SPAM
IP: ...–
Věřím, že můžete v životě získat všechno, co budete chtít, když budete pomáhat druhým lidem, aby dostali to, co si přejí oni. - Zig Ziglar TOPlist
8. 12. 2006   #4
-
0
-

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.

Nahlásit jako SPAM
IP: ...–
Prosím, jestli potřebujete s něčím poradit,zeptejte se na fóru. Jakýkoliv bezdůvodný pokus mě kontaktovat skončí okamžitým přidáním do ignore listu![br][br] Současný počet osob, které to nepochopily: 7
ololol0
Newbie
8. 12. 2006   #5
-
0
-

Jo, na tom Czechcomputeru to je přesně to co potřebuju, můžete mi někdo dát radu - např. mini skript?

Nahlásit jako SPAM
IP: ...–
Jakub0
Super člen
8. 12. 2006   #6
-
0
-

Už se na tom pracuje... jaká je db? MySQL?

Nahlásit jako SPAM
IP: ...–
Věřím, že můžete v životě získat všechno, co budete chtít, když budete pomáhat druhým lidem, aby dostali to, co si přejí oni. - Zig Ziglar TOPlist
ololol0
Newbie
8. 12. 2006   #7
-
0
-

Yes, MySQL. Těším se.

Nahlásit jako SPAM
IP: ...–
Jakub0
Super člen
8. 12. 2006   #8
-
0
-

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.

Nahlásit jako SPAM
IP: ...–
Věřím, že můžete v životě získat všechno, co budete chtít, když budete pomáhat druhým lidem, aby dostali to, co si přejí oni. - Zig Ziglar TOPlist
ololol0
Newbie
10. 12. 2006   #9
-
0
-

Diky moc D1ce, zkusim to zabudovat, a pak se ozvu.

Nahlásit jako SPAM
IP: ...–
ololol0
Newbie
14. 12. 2006   #10
-
0
-

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

Nahlásit jako SPAM
IP: ...–
Jakub0
Super člen
15. 12. 2006   #11
-
0
-



<!-- 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 ...
?>

Nahlásit jako SPAM
IP: ...–
Věřím, že můžete v životě získat všechno, co budete chtít, když budete pomáhat druhým lidem, aby dostali to, co si přejí oni. - Zig Ziglar TOPlist
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 49 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý