Autor Zpráva
novacek90
Profil
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
novacek90:
na to číslování použiji v databázi atribut autoincrement.
novacek90
Profil
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
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;
Následný insert stejně musíš provést pomocí mysql_query. Ale samozřejmě, pokud ti nic nebrání použít v dabatázi autoincrement, použij ten.


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
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
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
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
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
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
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
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
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
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
Pouzij php funkci, kterou jsem jiz nekolikrat odkazal. Neprovadej dalsi mysql query.
novacek90
Profil
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
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íš.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: