Autor | Zpráva | ||
---|---|---|---|
Jan Žák Profil |
#1 · Zasláno: 20. 9. 2017, 17:51:16
Dobrý den všem,
chtěl bych vás požádat o pomoc, nevím si rady. Mám script na update dokumentů v db. Bohužel při editaci položek mi napíše hlášku, o vyplnění povinných polí, které vyplněny jsou. Obdobně mám script zhotoven pro INSERT a tam vše funguje dobře. Koukám do toho již den a nevím si rady, poradil by mě někdo z vás? Děkuji moc. if (isset($_POST['submit'])) { // confirm that the 'id' value is a valid integer before getting the form data if (is_numeric($_POST['id'])) { // get form data, making sure it is valid $default = array( 'id' => '', 'doc_number' => '', 'name' => '', 'description' => '', 'date' => '', 'doc' => '', 'contract_id' => '' ); $_POST = array_merge($default, $_POST); $id = $_POST['id']; $doc_number = isset($_POST['doc_number'])? intval($_POST['doc_number']) : 0; $name = sanitizeString($_POST['name']); $description = sanitizeString($_POST['description']); if (empty($_POST["date"])) { $date = '0000-00-00'; } else { $date = strtotime($_POST["date"]); $date = date("Y-m-d", $date); }; $doc= $_FILES['doc']['name']; $contract_id = isset($_POST['contract_id'])? intval($_POST['contract_id']) : 0; // get the original file name from $_FILES $file_name= $_FILES['doc']['name']; // remove any characters you dont want $some_special_chars = array("ě", "š", "č", "ř", "ž", "ý", "á", "í", "é", "ú", "ů", "ñ", "ň", "Ě", "Š", "Č", "Ř", "Ž", "Ý", "Á", "Í", "É", "Ú", "Ů"); $replacement_chars = array("e", "s", "c", "r", "z", "y", "a", "i", "e", "u", "u", "n", "n", "E", "S", "C", "R", "Z", "Y", "A", "I", "E", "U", "U"); $file_name = str_replace($some_special_chars, $replacement_chars, $file_name); $file_name = preg_replace('/\s+/', '_', $file_name); // get the location of the folder to upload into $location = '../../documents/'; // check if required fields are filled in if ($name && $description) { // move the files from the temporary directory into your new home and save the data to DB :) if (move_uploaded_file($_FILES["doc"]["tmp_name"], $location.$file_name)) { // insert the report to the database, then report('upravil/a dokument <strong>'.$_POST['name'].'</strong>'); mysqli_query($con,"UPDATE documents SET doc_number='$doc_number', name='$name', description='$description', date='$date', doc='$file_name', contract_id='$contract_id', `updated`= NOW() WHERE id='$id'") or die(mysqli_error($con)); // once inserted, generate success message $errmsg[] = 'Dokument úspěšně upraven.'; $_SESSION['ERRMSG'] = $errmsg; Header("Location: documents-edit.php?id=$id"); } else { // or generate error message $errmsg[] = 'Vyplňte prosím všechna povinná pole!'; $_SESSION['ERRMSG'] = $errmsg; Header("Location: documents-edit.php?id=$id"); } } } else { // else if the 'id' in the URL isn't valid, or if there is no 'id' value, display an error require_once (ROOT . '/core/errors/error.php'); exit; } } |
||
Slark Profil |
#2 · Zasláno: 20. 9. 2017, 19:02:52
Zkusil bych prověřit proměnou $file_name. Potom ještě jestli se náhodou nenachází script pro update v jiné složce než pro insert? Pak by bylo třeba upravit hodnotu proměnné $location.
Z toho bloku kódu: else { // or generate error message $errmsg[] = 'Vyplňte prosím všechna povinná pole!'; $_SESSION['ERRMSG'] = $errmsg; Header("Location: documents-edit.php?id=$id"); } zakomentujte ten Header ať se dovíte chybovou hlášku |
||
Jan Žák Profil |
Díky za odpověď, ten script fungoval normálně a je ve stejné složce, všechny údaje uložil do db, ale před dvěma dny jsem ho upravil, abych i z editace položky mohl nahrávat soubory a vložil tam tedy řádky pro nahrání souboru. A od té doby to píše již výše popsané. Díky za tip, zkusím zakomentovat header a uvidím.
Edit: Header jsem zakomentoval, vložil tam ještě print_r($_POST) ; a je to bez chybové hlášky. Pokud vyberu nový soubor, celý skript proběhne, data se uloží, soubor se nahraje do příslušné složky. Pokud soubor nevyberu, pole nechám prázdné a chci editovat pouze text, napíše mi to již výše zmíněnou hlášku. Přitom to pole povinné není. |
||
Slark Profil |
#4 · Zasláno: 20. 9. 2017, 23:08:30
Zkuste to takto:
if (isset($_POST['submit'])) { // confirm that the 'id' value is a valid integer before getting the form data if (is_numeric($_POST['id'])) { // get form data, making sure it is valid $default = array( 'id' => '', 'doc_number' => '', 'name' => '', 'description' => '', 'date' => '', 'doc' => '', 'contract_id' => '' ); $_POST = array_merge($default, $_POST); $id = $_POST['id']; $doc_number = isset($_POST['doc_number'])? intval($_POST['doc_number']) : 0; $name = sanitizeString($_POST['name']); $description = sanitizeString($_POST['description']); if (empty($_POST["date"])) { $date = '0000-00-00'; } else { $date = strtotime($_POST["date"]); $date = date("Y-m-d", $date); }; $contract_id = isset($_POST['contract_id'])? intval($_POST['contract_id']) : 0; // get the original file name from $_FILES $file_name = ""; $doc = ""; if(!empty($_FILES['doc']['name'])) { $doc= $_FILES['doc']['name']; $file_name= $_FILES['doc']['name']; // remove any characters you dont want $some_special_chars = array("ě", "š", "č", "ř", "ž", "ý", "á", "í", "é", "ú", "ů", "ñ", "ň", "Ě", "Š", "Č", "Ř", "Ž", "Ý", "Á", "Í", "É", "Ú", "Ů"); $replacement_chars = array("e", "s", "c", "r", "z", "y", "a", "i", "e", "u", "u", "n", "n", "E", "S", "C", "R", "Z", "Y", "A", "I", "E", "U", "U"); $file_name = str_replace($some_special_chars, $replacement_chars, $file_name); $file_name = preg_replace('/\s+/', '_', $file_name); } // get the location of the folder to upload into $location = '../../documents/'; // check if required fields are filled in if ($name && $description) { // move the files from the temporary directory into your new home and save the data to DB :) if (!empty($file_name)) { move_uploaded_file($_FILES["doc"]["tmp_name"], $location.$file_name); } // insert the report to the database, then report('upravil/a dokument <strong>'.$_POST['name'].'</strong>'); $q = mysqli_query($con,"UPDATE documents SET doc_number='$doc_number', name='$name', description='$description', date='$date', doc='$file_name', contract_id='$contract_id', `updated`= NOW() WHERE id='$id'") or die(mysqli_error($con)); // once inserted, generate success message if($q) { $errmsg[] = 'Dokument úspěšně upraven.'; $_SESSION['ERRMSG'] = $errmsg; Header("Location: documents-edit.php?id=$id"); } else { // or generate error message $errmsg[] = 'Vyplňte prosím všechna povinná pole!'; $_SESSION['ERRMSG'] = $errmsg; Header("Location: documents-edit.php?id=$id"); } } } else { // else if the 'id' in the URL isn't valid, or if there is no 'id' value, display an error require_once (ROOT . '/core/errors/error.php'); exit; } } |
||
Tomášeek Profil |
#5 · Zasláno: 21. 9. 2017, 04:37:06
Slark:
Cely kód jsem neprochazel, ale konstrukce na řádcích 6-15 ne peklo. Nikdy neprepisuj superglobální proměnné, na konstrukci $_POST = cokoliv zapomen a v zadnem případe ji nedoporučuj.
|
||
Časová prodleva: 6 dní
|
|||
Jan Žák Profil |
#6 · Zasláno: 26. 9. 2017, 21:56:47
Díky všem za pomoc, s menší úpravou to funguje a díky za info Tomášeek, ty řádky tam opravdu nemají co dělat.
|
||
Časová prodleva: 7 let
|
0