Portál AbcLinuxu, 14. listopadu 2025 00:05
Dobrý den,
chtěl bych se zeptat na radu zkušenějších programátorů.
Něco na úvod o mé problematice - snažím se udělat internetový obchod a dostal jsem se do poslední fáze, kterou tvoří zapsání záznamů (produktů) z košíku do databáze.
Vypisování řeším pomocí pole a session a potřeboval bych poradit s cyklem, který by prošel všechny zakoupené záznamy a zapsal je do databáze.
Tento obchod nepůjde do ostrého provozu, proto není potřeba se zabývat zabezpečením jako je sql injection apod.
Pro lepší pochopení příkládám screenshoty (Návrh tabulek, hl. stránka a screenshot kódu pro lepší zobrazení)
Vzhled webové stránky s nákupem - http://2imgs.com/2i/i/51add260/b9d58ed187be42f29810afdb884b5ca2/115e1c36e5.f.png
Návrh tabulek - http://2imgs.com/2i/i/51add2e2/b40d7c96fe11b51d123e6b56fe605aeb/eea1e3c91a.f.png
Část kódu-
http://2imgs.com/2i/i/51add318/2635afae9fb269957231f9cbbc8dd500/ffb0f2d80b.f.png
http://2imgs.com/2i/i/51add322/31275a004b304afc7822a7d1f92627cd/cc83c1eb38.f.png
http://2imgs.com/2i/i/51add328/53faf384a0fc6a3ef0585ae9f066e6b3/dd92d0fa29.f.png
Pokud by někdo měl čas a ochotu pomoci, byl bych mu neskutečně vděčný, jelikož je to poslední část.
Děkuji,
Daniel!
if(isset($_GET['id_kosik'])){
$id = $_GET["id_kosik"];
$nazev = $_GET["nazev_kosik"];
$cena = $_GET["cena_kosik"];
}
$_SESSION["data"][$id]=array(
"nazev_kosik"=>$nazev,
"cena_kosik"=>$cena,
);
if(is_array($_SESSION["data"])) {
foreach ($_SESSION["data"] as $id=>$data) {
$nazev = $data["nazev_kosik"];
$cena = $data["cena_kosik"];
echo "";
echo $id." ";
echo $nazev." ";
echo $cena." ";
echo " ";
}
}
if(isset($_POST['jmeno_kosik'])){
$dotaz1="INSERT INTO nakupujici (jmeno,prijmeni,bydliste,email,tel_cislo) VALUES (";
$dotaz1.="'".$_POST['jmeno_kosik']."',";
$dotaz1.="'".$_POST['prijmeni_kosik']."',";
$dotaz1.="'".$_POST['bydliste_kosik']."',";
$dotaz1.="'".$_POST['email_kosik']."',";
$dotaz1.="'".$_POST['telefon_kosik']."');";
$vysledek1 = mysql_query($dotaz1) or die (mysql_error());
echo "přidáno";
}
for($i= 0; $i < count($nazev); $i++){
$dotaz="INSERT INTO kosik (zbozi_id,nazev_zbozi,cena_zbozi) VALUES (";
$dotaz.="'".$id."',";
$dotaz.="'".$nazev."',";
$dotaz.="'".$cena."');";
$vysledek = mysql_query($dotaz) or die (mysql_error());
}
mysql, kdyby alespoň mysqli, kde by už i Prepared Statements lze použít hezky.Je poměrně zajímavé tohle všechno číst. Studuji 3.ročník SŠ oboru IT a způsob, který mi je zde vytýkán je zároveň i způsob, jakým mě to ve škole naučili.
V podstatě jsem se ještě nedozvěděl žádnou radu, jak pokračovat. je mi zde vytýkána bezpečnost, ale o tu v tomhle případě nejde, protože se to nikde používat nebude.
Původní otázka je - jak zapsat ten nákup kterýje vypisován do pole do databáze.
Mám tam sice cyklus, který by záznamy v poli měl projít, ale nefunguje správně.
auto_increment, tak asi ti jde o toto (nakupujici_id):
$sqlq="INSERT INTO nakupujici (jmeno,prijmeni,bydliste,email,tel_cislo) VALUES…";
mysql_query($sqlq)…
//získani id posledního vloženého záznamu, nesmí být použit mysql_pconnect() pro připojení
$nakupujici_id=mysql_insert_id();
for($i= 0; $i < count($nazev); $i++){
$sql="INSERT INTO kosik (nakupujici_id,zbozi_id,nazev_zbozi,cena_zbozi) VALUES ('${nakupujici_id}',…";
mysql_query($sqlq)…
…
}
Mohl bych se zeptat kam chodis na skolu?
fuk to neni, jde o to proc takovyto kod vubec psat? Pokud se hodlate neco naucit, tak prave to ze to delate spatne a to jak by jste to mel delat by melo byt dulezite. Pokud jde o nejaky skolni projekt, tak by za neco takoveho meli dat nula bodu, takze opet ma smysl to resit a neni to fuk.
Celkove bych se zamyslel, jestli to cele nesmazat a nezacit znovu, a treba zkusit pouzit nejaky framework. Osobne mohu doporucit napriklad Nette.
Co se tyce navrhu, tak minimalne si myslim ze nazev_zbozi v kosiku je zbytecnej, kdyz uz tam je id na zbozi, a naopak mi tam chyby pocet kusu nakoupeneho zbozi
Ok co se tyce kodu, tak:
for($i= 0; $i < count($nazev); $i++){
$dotaz="INSERT INTO kosik (zbozi_id,nazev_zbozi,cena_zbozi) VALUES (";
$dotaz.="'".$id."',";
$dotaz.="'".$nazev."',";
$dotaz.="'".$cena."');";
$vysledek = mysql_query($dotaz) or die (mysql_error());
}
tohle ma podle tebe delat co?
nechces tam neco jako:
foreach($_SESSION["data"] as $id=>$data){
$nazev = $data['nazev'];
$cena = $data['cena'];
$dotaz="INSERT INTO kosik (zbozi_id,nazev_zbozi,cena_zbozi) VALUES (";
$dotaz.="'$id',";
$dotaz.="'$nazev',";
$dotaz.="'$cena');";
$vysledek = mysql_query($dotaz) or die (mysql_error());
}
$dotaz="INSERT INTO kosik (zbozi_id,nazev_zbozi,cena_zbozi) VALUES ";
$vysledek=NULL;
foreach($_SESSION["data"] as $id=>$data){
$nazev = $data['nazev'];
$cena = $data['cena'];
$dotaz.="('$id', '$nazev', '$cena'),";
}
if ($dotaz[strlen($dotaz)-1] == ',') {
$dotaz[strlen($dotaz)-1] = ')';
$vysledek = mysql_query("$dotaz;") or die (mysql_error());
}
, po příkazu je nastaveno na ID prvního záznamu.
Mnohokrát všem děkuji, uživatelům Kozzi a Šangala, konečně jsem se částečně posunul z místa a mohu pokračovat.
Dále pro upřesnění -
často mi zde byla vytýkáná ,,děravost" a nemožnost užití v praxi. Chci bych jen říct, že takové použití do nás učitelé vštěpují a jelikož se o programování zas tak moc nezajímám, používám to, co jsem se od nich naučil.
Ještě jednou děkuji.
.
A SQL injection je nehorázná ostuda!
Ani si nedokážeš představit, jak rád bych ti ten kontakt dal. Není to poprvé, co mě bylo řečeno, že podobný kód se v praxi použít nedá. Na druhou stranu, kdyby mu podobná zpráva došla, soudě podle mého nicku a žádosti(typu) o radu bych z toho ve výsledku měl jen problémy.
Přece jen co člověk na internetu jednou napíše, to tam taky zůstane.
Z té lepší stránky si člověk udělá obrázek o výuce některých kantorů. :o)
co databaze... se spatne navrzenou databazi muze mensi projekt stabilne fungovat, ale s deravou aplikaci moc dlouho nevydrzi
a celkove se na oborech mimo IT uci dost zajimave veci, nedavno jsem se taky podivoval nad tim, proc musi ekonomove vedet, jake kodeky se pouzivaji pro prenos zvuku a jake maji parametry
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.