Autor | Zpráva | ||
---|---|---|---|
novacek90 Profil |
#1 · Zasláno: 2. 2. 2013, 18:56:17
Ahoj,
předem se omlouvám možná málo googlim možná se koukám do špatných příkladů ale už si nevím rady sedím nad tím už 3. den. Jde mi o to, že bych chtěl při odeslání e-mailu vložit do hlavičky její číslo vím jak vložit a kam, ale nevím si rady s mysql scriptem. Sepsal jsem si toto : <?php if($pripoj = mysql_connect("127.0.0.1","root","root")) { mysql_select_db("test"); $a = mysql_query("select num from up order by num desc limit 1"); $b = $a+1; INSERT INTO 'up' ($b) $cislo = "UP".Date("Y")."$b" echo $cislo ?> jenže tohle mi nefunguje zkouším už cokoliv. pro spojení $a+1 mě napadlo použít funkci int (integer) pro zjištění hodnoty a pak k ní přičíst +1, ale taky jsem nedošel ke zdárnému výsledku. Principielně bych to zvládl vím jak se má "aplikace" chovat, ale nedaří se mi to zapsat. Pokud by jste věděli o nějakém webu, kde bych mohl najít více info byl bych moc vděčný. jinak databáze se jmenuje test tabulka se jmenuje up a sloupec se jmenuje num. Díky všem za rady |
||
Taps Profil |
#2 · Zasláno: 2. 2. 2013, 18:59:52
novacek90:
na to číslování použiji v databázi atribut autoincrement. |
||
novacek90 Profil |
#3 · Zasláno: 2. 2. 2013, 19:24:48
takže dle toho co jsem si o tom našel tak mi bude stačit přiřadit sloupci autoincrement?
Tím pádem by mi stačilo jen vypsat mysql_query("select num from up order by num desc limit 1"); a po odeslání e-mailu by mi to do každého dalšího řádku vypsalo další číslo? Vím že se ptám dost blbě ale chci mít jistotu Jinak díky za radu |
||
juriad Profil |
#4 · Zasláno: 2. 2. 2013, 19:27:42 · Upravil/a: juriad
mysql_query vrací celý výsledek, byť obsahuje jediný řádek, který obsahuje jedinou položku.
$a = mysql_query("select MAX(num) from up"); // toto bude rychlejší $max_num_row = mysql_fetch_assoc($a); $b = $max_num_row['max_num'] + 1; NE, autoincrement funguje tak, že pokud NEZADÁŠ při vkládání číslo objednávky, tak databáze automaticky vloží nejbližší vyšší volné. Tedy provedeš INSERT INTO up ('sloupce', 'krome', 'num') VALUES ('a', 'b', 'c') Pro zjištění, které číslo objednávky se použilo při poslením insertu, zavolej mysql_insert_id. |
||
novacek90 Profil |
#5 · Zasláno: 2. 2. 2013, 19:35:20
juriad:
„mysql_query vrací celý výsledek, byť obsahuje jediný řádek, který obsahuje jedinou položku.“ aha to jsem nevěděl takže v tvým případě se vezme jen nejvyšší tedy poslední číslo a pak k němu přičte +1. A já pak vrátím hodnotu $b zpět do DB??? |
||
juriad Profil |
#6 · Zasláno: 2. 2. 2013, 19:39:31
Pokud nepoužiješ autoincerement, tak následujícím insertem,
Pokud požiješ autoincrement, nebudeš vůbec číslo objednávky do databáze vkládat, ona si ho vyplní sama. Pak jen zjistíš, jaké přidělila pomocí mysql_insert_id (Podívej se na příklad v dokumentaci.) |
||
novacek90 Profil |
jasně už mi to docvaklo :)
díky za rady vyzkouším |
||
abc Profil |
#8 · Zasláno: 2. 2. 2013, 19:45:31
novacek90:
Následujííc ID můžeš zjistit i přímo z DB: $a = mysql_query("select MAX(num) + 1 from up"); $b = mysql_result($a, 0, 0); |
||
Alphard Profil |
abc [#8]:
To není pravda při smazaném záznamu, pozor na to. A navíc je to riskantní z pohledu paralelního zpracování. |
||
abc Profil |
#10 · Zasláno: 2. 2. 2013, 20:13:26
Alphard:
To byla pouze alternativa ke kódu ve [#4]. Osobně bych touto cestou nikdy nešel. V tabulce by mělo být id s auto incrementem |
||
novacek90 Profil |
Tak nyní vypadá kód takhle :
<?php if($spoj = mysql_connect("127.0.0.1","root","root")) { mysql_select_db("test"); $a = mysql_query("select MAX('num') from up")or die(mysql_error()); $max_num_row = mysql_fetch_assoc($a); $b = $max_num_row['max_num'] + 1; $vlozeni = mysql_query("INSERT INTO up (num) VALUES($b)"); } echo "UP".date("Y")."00".$b ?> Jenže pořád mi to vypisuje UP2013001 a po refreshi stránky by mi mělo naběhnout UP2013002 atd... Když si pak vypíšu co je v tabulce up tak mi to ve sloupci num ukazuje že tam jsou jen 1 Tudíž do DB se mi to zapíše. pročítám různé diskuse a zkouším mnoho věcí ale nevím v čem je zakopaný pes :( žádná z rad mi zatím nepomohla i když si myslím že je nějaká malinká chybka na řádku 6 nebo 7 |
||
Alphard Profil |
#12 · Zasláno: 2. 2. 2013, 23:06:55
Použijte auto_increment, toto řešení opravdu není dobré. Nastavíte ho patřičnému sloupci, provedete insert a hodnotu získáte pomocí mysql_insert_id().
Používat extenzi mysql není rozumné, ale už mi docházejí síly to psát do každého tématu :-) |
||
novacek90 Profil |
#13 · Zasláno: 2. 2. 2013, 23:10:14
to mě před chvílí taky napadlo že to bude rozumější tak jsem se už pustil do přepisování ale díky ;)
|
||
juriad Profil |
#14 · Zasláno: 3. 2. 2013, 10:47:47
novacek90:
Také je možné, že tabulka má více sloupců, které jsou označené jako NOT NULL, tedy je při insertu musíš vyplnit. Schválně si zkus vypsat $vlozeni, mělo by v případě úspěchu být true. A vypiš si mysql_error po insertu, pokud se nepovedl. To vše jen za předpokladu, že jsi ještě nepřešel na AUTOINCREMENT. |
||
novacek90 Profil |
#15 · Zasláno: 3. 2. 2013, 17:12:47
juriad:
To jsem již skoušel a nic a ta tabulka má na 100% jen jeden sloupec protože je to jediné, co na webu bude ;) __________________________________________________________________________________________________________ tak jsem to přepsal do tohoto stavu: <?php if($spoj = mysql_connect("127.0.0.1","root","root")) { mysql_select_db("test"); $a = mysql_query( "INSERT INTO up (num) VALUES (NULL)" )or die(mysql_error()); $b = mysql_query("SELECT LAST_INSERT_ID()"); $c = mysql_num_rows($b); // co zde použít????? } echo 'Poslední vložené id:'.$c ?> Používám sloupec num, kterému je přidělen atribut auto increment. Do databáze se mi zapisuje, ale nemohu docílit toho, aby mi to vypsalo to dané číslo googlil jsem koukal na stránky php.net apod a našel jsem pár info jenže zase bezcíle :( chtěl jsem použít i toto jenže taky bez cíle mysql_fetch_assoc($b) vím, že se mi to ukládá do "paměti" a já si to z ní poté musím "vypsat" jenže nemohu přijít na ten správný příkaz díky ;-) |
||
abc Profil |
#16 · Zasláno: 3. 2. 2013, 17:18:37
novacek90:
1) začni používat nějaké normální proměnné místo $a, $b, $c , např. $result, $result2 a $count nebo česky $vysledek, $pocet
2) poslední vložené ID zjistíš pomocí mysql_insert_id 3) počet záznamů zjistíš pomocí SQL: SELECT COUNT(*) FROM tabulka
|
||
juriad Profil |
#17 · Zasláno: 3. 2. 2013, 21:50:48
Pouzij php funkci, kterou jsem jiz nekolikrat odkazal. Neprovadej dalsi mysql query.
|
||
novacek90 Profil |
#18 · Zasláno: 5. 2. 2013, 21:56:43
Ahoj,
problém vyřešen stačí nezadat sloupec a hodnotu tedy napsat jen $vloz = mysql_query( "INSERT INTO up () VALUES ()" )or die(mysql_error()); a pak vypsat pomocí mysql_insert_id Díky všem za pomoc a hlavně za trpělivost |
||
juriad Profil |
#19 · Zasláno: 5. 2. 2013, 22:04:21
Ano, to jsme ti povídali od začátku.
Jen poznámka k tvému kódu; konstrukce or die(mysql_error()); není vůbec vhodná pro reálné použítí:
1) Stránka se vůbec nenačte. 2) Útočník se dozví informace o struktuře databáze. 3) Ty se o chybě vůbec nedozvíš. |
||
Časová prodleva: 13 let
|
0