Autor Zpráva
matlala
Profil
Ahoj,
nikde jsme nemohl najít (možná až při důkladnějším hledání) jak by šlo udělat následující:
Potřebuju do názvu souboru vždy dávat id záznamu v databázi, nebudu to zas tak rozváděť). Ale potřebuju zkrátka zjistit jak dostanu z tabulky s auto_increment na sloupci s ID následující unikátní Id, resp aktuální hodnotu auto_increment a přičíst jedničku a zapsat to do názvu souboru. Přikládám ještě svůj kousek scriptu:
nahrávání souborů:
if(isset($_POST["uloz"])){
if (!empty($_FILES['fupload']['name']) and $_FILES['fupload']!="none")
{
nahrajsoubor("fupload","popis");
if (!empty($_FILES['fupload2']['name']) and $_FILES['fupload2']!="none")
{
nahrajsoubor("fupload2","popis2");
if (!empty($_FILES['fupload3']['name']) and $_FILES['fupload2']!="none")
{
nahrajsoubor("fupload3","popis3");
}
}
}


header("location: ".HTTP."/admin.php?akce=soubory");
}

a funkce:
function nahrajsoubor($textpole,$popisekpole){
$ded=mysql_query("SELECT id FROM soubory order by id DESC LIMIT 1");
$set=mysql_fetch_array($ded);
$cilo=$set["id"]+1;
$nazevSouboru = $_FILES[$textpole]['tmp_name'];
$filename = strtolower($_FILES[$textpole]['name']);//Původní jméno souboru, strtolower převede na malá písmena
$soubor=eregi_replace(" ", "_", eregi_replace(" +", " ", $filename));//odstraní přebytečné mezery a mezery nahradí _
$konecnyNazevSouboru=$cilo."_".$soubor;
$cil = SOUBORY."/".$konecnyNazevSouboru;
$copy = move_uploaded_file($nazevSouboru, $cil) or die ("Přenesené soubory nelze zkopírovat");
$popis=$_POST[$popisekpole];
chmod ($cil, 0777); 
if($copy == true){ 
$NazevSouboru_db=$filename;
$datetime=time();
mysql_query("INSERT INTO soubory (nazev, popis, datetime) VALUES ('$NazevSouboru_db', '$popis', '$datetime')");
}else{
echo "Soubory nemohly být nahrány.\nPočet chyb: " . $_FILES[$textpole]['error'];
}
}


šlo by ted dotaz na aktuální hodnotu auto_increment nějak inteligentně udělat?

Předem díky za odpovědi
Petr
fakeit
Profil *
matlala:
Petře a nešlo by použít místo "$id + 1" např. $datetime? Ušetřil by sis jeden dotaz na DB. :)
japlavaren
Profil
najprv mysql insert, potom zavolas $id=mysql_insert_id(); a zistis vlozene id. nasledne sa pokusis spravit upravy s suborom a ked sa nepodari zmazes zaznam z db
Jack06
Profil
matlala:
Následující id se tu již řešilo a je to poměrně jednoduché:
http://diskuse.jakpsatweb.cz/?action=vthread&forum=28&topic=102920
Jack06
Profil
japlavaren:
nepleť mu hlavu takovejhle paskvil.. zbytečně by se připojoval xkrát do databáze
matlala
Profil
díky moc, to nějak pořeším. ID chci kvůli zachování původních názvů souborů, ale myslím (teda po dnešní coci, co sdjem nad tím přemejšlel) že raději udělám kontrolu názvů nahraných souborů, že se nesmí nahrát soubor se stejným názvem, ale při přehrání se musí nejdříve smazat-poř ještě stránka s upravit.
Anonymní
Profil *
ale etd ještě koukám na ten odkaz. tokle bude výhodnější, nemusím skoro přepisovat script, nemusí to být zas extra rychlé, server je akorát a je tam jen jeden uživatel,co může upravovat-jsou to firemní stránky, na kterých nebývá zaráz moc lidí
matlala
Profil
Taj teda použil jsem tento příkaz, funguje a to spolehlivě
$set=mysql_fetch_array(mysql_query("SHOW TABLE STATUS LIKE 'tabulka'"));
$cilo=$set['Auto_increment'];

dá se tím zjistit více věcí-viz samotný SQL dotaz v php my admin, navíc nemusím skoro vůbec měnit scripty
japlavaren
Profil
matlala:
pri seriozne zatazenom servery sa ti moze stat ze aktualny autoincrement uz bude pouzity
tiso
Profil
matlala: urob to inak:
1. zisti pôvodné meno nahratého súboru
2. vlož záznam do databázy
3. zisti id tohto záznamu
4. presuň súbor s tým, že do jeho názvu pridáš to zistené id
5. ak všetko prebehlo v poriadku, tak nič, ak sa niečo pokazilo tak zmaž záznam z databázy
Názov súboru na disku potom ľahko poskladáš s id-čka a pôvodného názvu súboru z databázy
matlala
Profil
no databáze se nepřetíží, a id už použité být nemůže, píšu snad jasně, že to je firemní web s 1 uživatelem, který má přístup do úprav databáze.

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:

0