Pagina 1 din 1
insert in bd link-ul pentru fisierul uploadat
Scris: Vin Sep 23, 2016
de sterica
Salutare,
Vreau sa introduc intr-o tabela link-ul fisierului uploadat, ca ulterior sa il pot downloada prin <a href="">Download</a>
Cum pot crea o variabila care sa contina calea catre fisierul uploadat si unde trebuie creata?
Ce am pana acum:
fisierul care exporta din tabela:
Cod: Selectaţi tot
...
while($row = $result->fetch_assoc()){
$den_down = " ";
$den_down = ($row['CALE_DOWNLOAD']<>NULL) ? "Download" : $den_down ;
echo "<td><a href='" .$row['CALE_DOWNLOAD']. "'>" .$den_down. "</a></td>";
....
fisierul de upload:
Cod: Selectaţi tot
<form action="upload_file.php" method="post" enctype="multipart/form-data" name="upload_file" autocomplete="off"><br>
<label for="UploadFileField"></label><br>
<input type="file" name="UploadFileField"/>
<input type="submit" name="UploadButton" value="Upload" />
</form>
<?php
if (isset ($_FILES['UploadFileField'])){
$UploadName = $_FILES['UploadFileField'] ['name'];
$UploadName = mt_rand (100000, 999999).$UploadName;
$UploadTmp = $_FILES['UploadFileField'] ['tmp_name'];
$UploadType = $_FILES['UploadFileField'] ['type'];
$FileSize = $_FILES['UploadFileField'] ['size'];
$UploadName = preg_replace("#[^a-z0-9.]#i", "", $UploadName);
if(($FileSize > 1250000)){
die ("Error - File to big");
}
if(!$UploadTmp) {
die ("No File Selected");
}
else {
if (move_uploaded_file($UploadTmp, "Upload/$UploadName")) {
echo "Successfully inserted";
header('Location: /index.php');
}
else {
echo "Something went wrong";
header('Location: /index.php');
}
}
}
?>
Multumesc mult!
insert in bd link-ul pentru fisierul uploadat
Scris: Vin Sep 23, 2016
de MarPlo
Salut
Pai calea e deja adresa (directorul si numele) unde face upload. Dupa upload se face Insert folosind aceeasi adresa.
Cod: Selectaţi tot
if(move_uploaded_file($UploadTmp, "Upload/$UploadName")) {
$sql ="INSERT INTO tabel (col) VALUES ('Upload/$UploadName')";
//...
}
insert in bd link-ul pentru fisierul uploadat
Scris: Vin Sep 23, 2016
de sterica
Am mai adaugat o variabila si codul meu ara cam asa:
Cod: Selectaţi tot
....
if (move_uploaded_file($UploadTmp, "Upload/$UploadName")) {
$UPLOAD_COD = $_POST['UPLOAD_COD'];
$sql = "INSERT INTO download (ID_PRODUS,CALE_DOWNLOAD) VALUES ('$UPLOAD_COD','Upload/$UploadName')";
$result = $conn->query($sql);
echo '<script> alert("Successfully inserted"); window.location ="/index.php";</script>';
....
}
Cum pot face sa imi inlocuiasca calea spre download daca in coloana ID_PRODUS mai exista acelasi ID?
Multumesc!
insert in bd link-ul pentru fisierul uploadat
Scris: Vin Sep 23, 2016
de MarPlo
Ca sa eviti astfel de situatii, poti de la inceput sa generezi un nume unic, aleator pt. fisierul incarcat si salvat; cu functia: uniqid();
Cod: Selectaţi tot
$UploadName = preg_replace('#(.*?)(\.[^\.]*)$#i', uniqid().'$2', $_FILES['UploadFileField']['name']);
Sau, inainte de stabilirea adresei de Upload faci un Select in tabel dupa $UPLOAD_COD.
Cod: Selectaţi tot
$sql ="SELECT CALE_DOWNLOAD FROM download WHERE ID_PRODUS ='$UPLOAD_COD'";
//...
Daca sunt randuri returnate, setezi alt nume de salvat la fisier.
insert in bd link-ul pentru fisierul uploadat
Scris: Sâm Sep 24, 2016
de sterica
@MarPlo nu prea inteleg de ce ar trebui sa generez fisier unic, poate m-am exprimat gresit si a dus la generarea unui alt raspuns.
Am in tabela urmatoarele date:
Cod: Selectaţi tot
+-----------+-----------------------------+
| ID_PRODUS | CALE_DOWNLOAD |
+-----------+-----------------------------+
| 256 | fisier/2016.08.22 - doc.pdf |
| 1254 | fisier/2015.03.14 - file.pdf|
+-----------+-----------------------------+
fisierul 2015.03.14 - file.pdf a primit astazi o actualizare si se va redenumi in
2016.03.24 - file.pdf. Va trebui sa il incarc pe server, atribuindu-l lui
ID_PRODUS 1254
Fisierul index.php contine:
Cod: Selectaţi tot
<form action="upload_file.php" method="post" enctype="multipart/form-data" name="upload_file" autocomplete="off"><br>
<label for="UploadFileField"></label><br>
<input type="file" name="UploadFileField"/>
<input type="submit" name="UploadButton" value="Upload" /><br>
<input type ="text" name="UPLOAD_COD" />
</form>
Multumesc!
insert in bd link-ul pentru fisierul uploadat
Scris: Sâm Sep 24, 2016
de MarPlo
Daca ceea ce vrei e sa redenumesti adresa fisierului in mysql la id-ul $UPLOAD_COD, in loc de Insert aplici un Insert-Update.
Coloana ID_PRODUS trebuie sa fie de tip PRIMARY KEY.
Codul e asa:
Cod: Selectaţi tot
$sql = "INSERT INTO download (ID_PRODUS,CALE_DOWNLOAD) VALUES ('$UPLOAD_COD','Upload/$UploadName')
ON DUPLICATE KEY UPDATE CALE_DOWNLOAD ='Upload/$UploadName'";
- Daca id-ul $UPLOAD_COD e deja in tabel, va face Update, in rest face Insert.
insert in bd link-ul pentru fisierul uploadat
Scris: Lun Sep 26, 2016
de sterica
Cred ca va trebui sa gandesc altfel structura (dar nu stiu cum), ID_PRODUS, nu il pot face PRIMARY KEY. Ma gandesc si la faptul ca va trebui sa sterg fisierele vechi pentru a nu aglomera serverul.
Am adaugat:
$deleteSql = "DELETE FROM download WHERE ID_PRODUS = '$UPLOAD_COD'";
$conn->query($deleteSql);
Cod: Selectaţi tot
if (move_uploaded_file($UploadTmp, "Upload/$UploadName")) {
$UPLOAD_COD = $_POST['UPLOAD_COD'];
$deleteSql = "DELETE FROM download WHERE ID_PRODUS = '$UPLOAD_COD'";
$conn->query($deleteSql);
$sql = "INSERT INTO download (ID_PRODUS,CALE_DOWNLOAD) VALUES ('$UPLOAD_COD','Upload/$UploadName')";
$result = $conn->query($sql);
echo '<script> alert("Successfully inserted"); window.location ="index.php";</script>';
}
$deletesql imi inlocuieste valorile din tabela, insa nu imi sterge si fiserul de pe server. Ce pot face sa sterg si fisierul?
Multumesc!
insert in bd link-ul pentru fisierul uploadat
Scris: Lun Sep 26, 2016
de sterica
Am adaugat:
$deleteSql = "DELETE FROM download WHERE ID_PRODUS = '$UPLOAD_COD'";
$conn->query($deleteSql);
Cod: Selectaţi tot
if (move_uploaded_file($UploadTmp, "Upload/$UploadName")) {
$UPLOAD_COD = $_POST['UPLOAD_COD'];
$deleteSql = "DELETE FROM download WHERE ID_PRODUS = '$UPLOAD_COD'";
$conn->query($deleteSql);
$sql = "INSERT INTO download (ID_PRODUS,CALE_DOWNLOAD) VALUES ('$UPLOAD_COD','Upload/$UploadName')";
$result = $conn->query($sql);
echo '<script> alert("Successfully inserted"); window.location ="index.php";</script>';
}
$deletesql imi inlocuieste valorile din tabela, insa nu imi sterge si fiserul de pe server. Ce pot face sa sterg si fisierul?
Multumesc!
insert in bd link-ul pentru fisierul uploadat
Scris: Lun Sep 26, 2016
de MarPlo
Fisierul de pe server poate fi sters cu functia:
insert in bd link-ul pentru fisierul uploadat
Scris: Lun Sep 26, 2016
de sterica
Am reusit, multumesc mult de ajutor.