SESSION ID a s tím spojené problémy – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

SESSION ID a s tím spojené problémy – PHP – Fórum – Programujte.comSESSION ID a s tím spojené problémy – PHP – Fórum – Programujte.com

 

karik230
Duch
9. 2. 2014   #1
-
0
-

Zdravím vás,

vytvořil jsem web, kde jsem udělal zjednodušený košík a i když na indexu vložím session_start, tak po vložení první položky se mi v koši nic nezobrazí, ačkoliv se v databázi položka zanese. Při jakémkoliv dalším vložení už vše funguje tak, jak má. V čem může být problém? Jinak web je rozdělaný na www.barevne-obalky.cz, snad tím neporuším pravidla.
Dále mám napsaný skript, který mi z databáze vždy vytáhne potřebnou položku a zobrazí podrobnosti o ní. Stejně tak mám jeden skript, který ji v případě zájmu ze strany klienta, zapíše do databáze do dočasného košíku. Většinou to funguje správně, ale někdy mi to vyhodí chybu na řádku, kde je zaslání příkazu do databáze
 

$sql_prikaz = 
"INSERT INTO kos_polozky(id_nakup,polozka,mnozstvi,cena) VALUES('$id_nakup','$polozka','$mnozstvi','$cena')";
                
                
//zaslani prikaz SQL do databaze
$poslano = mysqli_query($connect_db, $sql_prikaz) or die (mysqli_error($poslano));


o očekávání jednoho parametru, boolev nebo jak se to píše. Ale jak jsem psal, většinou to funguje. Napadá Vás v čem může být háček?
Jsem začátečník, co se na sobě snaží makat, tak moc děkuju za jakýkoliv postřeh.

Nahlásit jako SPAM
IP: 217.117.213.–
Kit+15
Guru
9. 2. 2014   #2
-
0
-

#1 karik23
Obvyklou chybou bývá, že volání funkce session_start() není na začátku skriptu. Prohlížeč pak nedostane identifikaci session do cookie a nemá se tak na co odvolávat.

Další chybou bývá, když se programátor snaží po uložení záznamu do databáze zobrazit stránku. To je chybně, musí se udělat přesměrování na stránku, která má ten košík zobrazit. Skript, který modifikuje databázi, nesmí nic vypisovat, pouze přesměrovat.

Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
karik230
Duch
9. 2. 2014   #3
-
0
-

   

<?php
  session_start();
?>
<!DOCTYPE HTML>
<html lang="en">
  <head>
  <meta http-equiv="content-type" content="text/html; charset=utf-8">


Takto vypadá začátek každé stránky, kde využívám to session a na indexu :((

Nahlásit jako SPAM
IP: 217.117.213.–
Kit+15
Guru
9. 2. 2014   #4
-
0
-

#3 karik23
Text od <!DOCTYPE až dolů tam nepatří.

Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
karik230
Duch
9. 2. 2014   #5
-
0
-

Jasné, to už je html5, zkopíroval jsem toho víc, než bylo potřeba.

Nahlásit jako SPAM
IP: 217.117.213.–
Kit+15
Guru
9. 2. 2014   #6
-
0
-

#5 karik23
Ale chybí tam to ukládání do DB. Když se ukládá do DB, tak se žádná stránka nevypisuje.

Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
karik230
Duch
9. 2. 2014   #7
-
0
-

Aha, tak skript pro vložení do košíku je  

<?php
$polozka = $_POST['polozka'];
$mnozstvi = $_POST['mnozstvi'];
$cena = $_POST['cena'];
$id_nakup = session_id();

// pripojeni k databazi 
              $connect_db = mysqli_connect    
                (udaje pro prihlaseni); 
                
              
              $connect_db -> query('SET NAMES utf8');
              
              //vytvoreni prikazu sql typu INSERT
              
                  $sql_prikaz = 
                  "INSERT INTO kos_polozky(id_nakup,polozka,mnozstvi,cena) VALUES('$id_nakup','$polozka','$mnozstvi','$cena')";
                
                
              //zaslani prikaz SQL do databaze
              $poslano = mysqli_query($connect_db, $sql_prikaz) or die (mysqli_error($poslano));
              
              
              if ($poslano)
              echo '<h2 class="nadtext">Položka byla přidána do objednávkového formuláře.</h2>';
              else
              {
              echo '<h2 class="nadtext">Odeslání se nepodařilo.</h2>';
              }
              
              //odpojeni od databaze
              if ($connect_db)
                mysqli_close($connect_db);
?>
Nahlásit jako SPAM
IP: 217.117.213.–
Kit+15
Guru
9. 2. 2014   #8
-
0
-

Zkus vyjít z tohoto, i když to není úplně správně - cena nemá být od uživatele, ale z ceníku. 

<?php
// insert.php

$polozka = (int)$_POST['polozka'];
$mnozstvi = (int)$_POST['mnozstvi'];
$cena = (float)$_POST['cena'];
$id_nakup = $_SESSION['id'];

// pripojeni k databazi 
$connect_db = mysqli_connect(udaje pro prihlaseni);    
$connect_db->query('SET NAMES utf8');

//vytvoreni prikazu sql typu INSERT 
$sql_prikaz = "INSERT INTO kos_polozky(id_nakup, polozka, mnozstvi, cena)
    VALUES($id_nakup, $polozka, $mnozstvi, $cena)";

//zaslani prikaz SQL do databaze
$poslano = $connect_db->query($sql_prikaz);
$_SESSION['hlaseni'] = $poslano ?
    '<h2 class="nadtext">Položka byla přidána do objednávkového formuláře.</h2>' :
    '<h2 class="nadtext">Odeslání se nepodařilo.</h2>';

header('Location: kosik.php');
exit;

// konec souboru insert.php
Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Kit+15
Guru
9. 2. 2014   #9
-
0
-

#7 karik23 

Ten SQL INSERT by měl vypadat spíš takto:

$sql_prikaz = "INSERT INTO kos_polozky(id_nakup, polozka, mnozstvi, cena)
    SELECT $id_nakup AS id_nakup, polozka, $mnozstvi AS mnozstvi, cena
    FROM cenik WHERE polozka=$polozka";
Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
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, 37 hostů

Podobná vlákna

Co s tim ? — založil sdas

Kam s tím? — založil fujinos

Tim Burton — založil survik1

 

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