insert in bd link-ul pentru fisierul uploadat
Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
-
sterica
- Mesaje: 285
insert in bd link-ul pentru fisierul uploadat
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!
MarPlo
Mesaje: 4343
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')";
//...
}
sterica
Mesaje: 285
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!
MarPlo
Mesaje: 4343
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.
sterica
Mesaje: 285
@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!
MarPlo
Mesaje: 4343
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.
sterica
Mesaje: 285
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!
sterica
Mesaje: 285
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!
MarPlo
Mesaje: 4343
Fisierul de pe server poate fi sters cu functia:
sterica
Mesaje: 285
Am reusit, multumesc mult de ajutor.
Subiecte similare
-
Link deschis in Popup modal
JavaScript - jQuery - Ajax
Primul mesaj
Salut,
nu gasesc cum sa fac un popup modal genul asta: solodev.com/blog/web-design/how-to-make-an-external-link-pop-up-modal.stml
Dar cand dau...
Ultimul mesaj
am gasit ceva dar nu e functional cum trebuie,momentan am facut asa
<a href= <?php echo /privat&who=$chat...
-
Regex pentru adrese
PHP - MySQL - XML
Primul mesaj
Salut,
As avea si eu nevoie de ajutor! incerc de ceva zile sa dezvolt un regex/ sau o alta solutie, sa vad daca intr-un string mai mare exista o...
Ultimul mesaj
Ai putea folosii o functie de localizare IP/browser, dar ar fii ceva individual, facusem eu in trecut o functie, ceva de verificare IP si blocare pe...
-
Trenuri cu hidrogen pentru pasageri în Austria
Stiri Deosebite
Viena începe un nou capitol în transportul feroviar de pasageri. Până la sfârșitul lunii noiembrie, un tren cu hidrogen va transporta pasageri pentru...
-
Proteina genetică pentru vindecarea paraliziei
Handicap
Într-un nou studiu, oamenii de știință germani au restabilit capacitatea de a merge la șoareci paralizați după o leziune completă a măduvei spinării....
-
Pavaje solare pentru alimentare cu energie
Stiri Deosebite
O companie de tehnologie din Ungaria foloseşte plastic reciclat pentru a produce panouri solare încorporate în pavaje, care pot susţine alimentarea...
-
Material supraconductor, pentru o revoluție energetică
Stiri Deosebite
Materialele supraconductoare necesită de obicei temperaturi extrem de reci pentru a funcționa. Dar o nouă descoperire ar putea schimba asta.
Oamenii...