Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem php, mysql - formulář (text+soubory) - nejde zápis do DB a nahrání souborů do složky

Ahoj. mám formulář, kde mám textareu a pod tím mám možnost vložit 3 soubory. soubory chci vložit do nějaké složky a cestu zapsat do DB. mám toto a nefunguje to:
formulář:

								<form method=\"POST\" action=\"scripty/akce.php\" enctype=\"multipart/form-data\">
									<div>
										<textarea name=\"editor1\"></textarea>
										<script type=\"text/javascript\">
											CKEDITOR.replace( 'editor1' );
										</script>
									</div>
									<div>
										<table>
											<tr>
												<td>Můžete přiložit 3 fotky.</td>
											</tr>
											<tr>
												<td><input name=\"jpg1\" type=\"file\"></td>
											</tr>
											<tr>
												<td><input name=\"jpg2\" type=\"file\"></td>
											</tr>
											<tr>
												<td><input name=\"jpg3\" type=\"file\"></td>
											</tr>
											<tr>
												<td>
													<input type=\"hidden\" name=\"author\" value=\"".$_SESSION['login']."\"/>
													<input type=\"submit\" name=\"go\" value=\"Odeslat\"/>
												</td>
											</tr>
										</table>
									</div>
								</form>

zpracovávající script:

<?php
	if (isset($_POST['go'])) {
		$text = stripslashes(htmlspecialchars(trim($_POST['editor1'])));
		$author = $_POST['author'];
		require_once "../include/db.php";
		mysql_query("INSERT INTO `events` (`text`,`author`) VALUES ('$text','$author')");
		$dotaz = mysql_query("SELECT * FROM `events` WHERE `text` = '$text' ORDER BY  `id` DESC LIMIT 1");
		while ($vypis = mysql_fetch_array($dotaz)) {
			$id = $vypis['id'];
		}
		$dir = "../img/".$id;
		if (!file_exists($dir)) {
			mkdir($dir, 0777);
		} // po sem je to určitě dobře
		$cesta = "../img/".$id;
		//$povoleni = array('jpg', 'jpeg', 'png', 'gif'); // nepotřebné

		$jpg1 = ($_FILES['jpg1']['name']);
		$jpg2 = ($_FILES['jpg2']['name']);
		$jpg3 = ($_FILES['jpg3']['name']);
		include "../include/prevodni-tabulka.php";
		$jpg1 = strtr($jpg1, $prevodni_tabulka);
		$jpg2 = strtr($jpg2, $prevodni_tabulka);
		$jpg3 = strtr($jpg3, $prevodni_tabulka);
		require_once "../include/db.php";
		mysql_query("INSERT INTO `events` (`jpg1`,`jpg2``jpg3`) VALUES ('$jpg','$jpg2','$jpg3')");
		if (move_uploaded_file($jpg1, $cesta)) {
			
		}
		if (move_uploaded_file($jpg2, $cesta)) {
			
		}
		if (move_uploaded_file($jpg3, $cesta)) {
			
		}
		header("Location: ".$_SERVER['SERVER_ROOT']."www.xxx.cz/akce.php");
	}
	header("Location: ".$_SERVER['SERVER_ROOT']."www.xxx.cz/akce.php");
?>

nebude chyba už v tom základu "<form method=\"POST\" action=\"scripty/akce.php\" enctype=\"multipart/form-data\">"? nebo kde mám chybu? složka se vytvoří, ale soubory se nevloží ani do složky a ani do databáze, proč?

Předmět Autor Datum
VALUES ('$jpg','$jpg2','$jpg3') Nemělo by tam být $jpg1?
Wikan 10.07.2015 23:24
Wikan
jaj, ano.. ale furt to nic neřeší.. podle mě to nezpracovává ty fotky vůbec, protože to reaguje hned…
Vilak 10.07.2015 23:42
Vilak
(`jpg1`,`jpg2``jpg3`) A tady ti chybí čárka.
Wikan 10.07.2015 23:50
Wikan
díky :-D ježiš, už jsme ais přepracovaný... taky jsme is uvědomil, že to chci dat do stejného řádku,…
Vilak 10.07.2015 23:58
Vilak
chyba je v tom, ze je to cista slama a seno, obycajny spagety kod. nemas vobec osetrene vynimky, OOP… nový
wam_Spider007 11.07.2015 00:02
wam_Spider007
a jak to ošetřit? jsem teprve začátečník... oprávnění do složky.. to má byt 0777, ne? složka se přím… nový
Vilak 11.07.2015 00:33
Vilak
ok a dokumentaciu k move_uploaded_file si si pozrel? zmen toto z: $jpg1 = ($_FILES['jpg1']['name'])… nový
wam_Spider007 11.07.2015 08:04
wam_Spider007
Ok, díky za rady! ;) Takto vypadá funkční code. Ovšem když mám již zmíněný ten "špagetový kód", tak… nový
Vilak 14.07.2015 13:07
Vilak
ad spagety kod) idealne je pouzit objektovo orientovane programovanie, ale da sa to aj bez toho. nap… poslední
wam_Spider007 14.07.2015 20:39
wam_Spider007

díky :-D ježiš, už jsme ais přepracovaný...
taky jsme is uvědomil, že to chci dat do stejného řádku, teĎ se mi to ukládalo do dalšího, takže to vypadá takto:

<?php
	if (isset($_POST['go'])) {
		$text = stripslashes(htmlspecialchars(trim($_POST['editor1'])));
		$author = $_POST['author'];
		require_once "../include/db.php";
		mysql_query("INSERT INTO `events` (`text`,`author`) VALUES ('$text','$author')");
		$dotaz = mysql_query("SELECT * FROM `events` WHERE `text` = '$text' ORDER BY  `id` DESC LIMIT 1");
		while ($vypis = mysql_fetch_array($dotaz)) {
			$id = $vypis['id'];
		}
		$dir = "../img/".$id;
		if (!file_exists($dir)) {
			mkdir($dir, 0777);
		} // po sem je to určitě dobře
		$cesta = "../img/".$id;
		//$povoleni = array('jpg', 'jpeg', 'png', 'gif'); // nepotřebné

		$jpg1 = ($_FILES['jpg1']['name']);
		$jpg2 = ($_FILES['jpg2']['name']);
		$jpg3 = ($_FILES['jpg3']['name']);
		include "../include/prevodni-tabulka.php";
		$jpg1 = strtr($jpg1, $prevodni_tabulka);
		$jpg2 = strtr($jpg2, $prevodni_tabulka);
		$jpg3 = strtr($jpg3, $prevodni_tabulka);
		require_once "../include/db.php";
		mysql_query("UPDATE `d77216_gusto`.`events` SET `jpg1` =  '$jpg1', `jpg2` =  '$jpg2', `jpg3` =  '$jpg3' WHERE `id` = '$id'");
		if (move_uploaded_file($jpg1, $cesta)) {
			
		}
		if (move_uploaded_file($jpg2, $cesta)) {
			
		}
		if (move_uploaded_file($jpg3, $cesta)) {
			
		}
		header("Location: ".$_SERVER['SERVER_ROOT']."www.restaurantgusto.cz/akce.php");
	}
	header("Location: ".$_SERVER['SERVER_ROOT']."www.restaurantgusto.cz/akce.php");
?>

Teď už se mi jméno souboru (tedy cesta k němu) uloží, ale furt se mi soubor nenahraje, proč?
chyba podle mě bude tady:

		$jpg1 = ($_FILES['jpg1']['name']);
		$jpg2 = ($_FILES['jpg2']['name']);
		$jpg3 = ($_FILES['jpg3']['name']);

nebo tady

<form method=\"POST\" action=\"scripty/akce.php\" enctype=\"multipart/form-data\">

ok a dokumentaciu k move_uploaded_file si si pozrel?
zmen toto z:

$jpg1 = ($_FILES['jpg1']['name']);

na

$jpg1 = ($_FILES['jpg1']['tmp_name']);

A cesta tiez nie je dobre. Pretoze cesta nema byt len adresar, ale aj konkretne nazov suboru.

Cize nie takto

$cesta = "../img/".$id;

ale skor takto

$cesta = "../img/".$id.".jpg";

A este dobra rada na zaver - resp. dve:
1. HTML oddel od PHP, lebo takto mas (sudim podla escapeovanych uvodzoviek) cely form v stringu a vypisany pomocou echo. Ked budes robit nieco komplikovanejsie, tak sa ti to vypomsti.
2. Nerob spagety kod. ak uz aj nerobis OOP, tak si aspon oddel logicke casti do nejakych funkcii. a tie include_once nedavaj kade tade. to ma byt na zaciatku. dva tyzdne sa na to nekuknes a po dvoch tyzdnoch budes na to cele cumiet ako puk, ze co to robi.

Ok, díky za rady! ;)
Takto vypadá funkční code. Ovšem když mám již zmíněný ten "špagetový kód", tak by mě zajímalo, jak by toto vypadalo správně zapsané:

<?php
	if (isset($_POST['go'])) {
		$text = stripslashes(htmlspecialchars(trim($_POST['editor1'])));
		$author = $_POST['author'];
		require_once "../include/db.php";
		mysql_query("INSERT INTO `events` (`text`,`author`) VALUES ('$text','$author')");
		$dotaz = mysql_query("SELECT * FROM `events` WHERE `text` = '$text' ORDER BY  `id` DESC LIMIT 1");
		while ($vypis = mysql_fetch_array($dotaz)) {
			$id = $vypis['id'];
		}
		$dir = "../img/akce";
		if (!file_exists($dir)) {
			mkdir($dir, 0777);
		}
		$dir1 = "../img/akce/".$id;
		if (!file_exists($dir1)) {
			mkdir($dir1, 0777);
		}
		$cesta = "../img/akce/".$id."/";
		//$povoleni = array('jpg', 'jpeg', 'png', 'gif'); // nepotřebné

		$jpg1 = ($_FILES['jpg1']['name']);
		$jpg2 = ($_FILES['jpg2']['name']);
		$jpg3 = ($_FILES['jpg3']['name']);
		$jpg1_up = ($_FILES['jpg1']['tmp_name']);
		$jpg2_up = ($_FILES['jpg2']['tmp_name']);
		$jpg3_up = ($_FILES['jpg3']['tmp_name']);
		include "../include/prevodni-tabulka.php";
		$jpg1 = strtr($jpg1, $prevodni_tabulka);
		$jpg2 = strtr($jpg2, $prevodni_tabulka);
		$jpg3 = strtr($jpg3, $prevodni_tabulka);
		require_once "../include/db.php";
		mysql_query("UPDATE `d77216_gusto`.`events` SET `jpg1` =  '$jpg1', `jpg2` =  '$jpg2', `jpg3` =  '$jpg3' WHERE `id` = '$id'");
		if (move_uploaded_file($jpg1_up, $cesta.$jpg1)) {
			
		}
		if (move_uploaded_file($jpg2_up, $cesta.$jpg2)) {
			
		}
		if (move_uploaded_file($jpg3_up, $cesta.$jpg3)) {
			
		}
		header("Location: ".$_SERVER['SERVER_ROOT']."www.xxx.cz/akce.php");
	}
	header("Location: ".$_SERVER['SERVER_ROOT']."www.xxx.cz/akce.php");
?>

Jinak k tomu HTML v PHP... To si mám dyštak vytvořit soubor.html, který poté includuju do PHP? nebo jak to řešit?
a ten require_ince mám dat jen třeba jednou na začátek dané podmínky či na začátek kompletní stránky, ano?

Také mám ještě jednu otázku (ta ktrošku mimo téma) - jak lze proměnnou (PHP) přenést do jiné stránky? řekněme, že mám stránky
jedna.php a dva.php a ve stránce jedna.php mám proměnnou $vypis. Jak tuto proměnnou přenesu do dva.php, kromě toho, abych použil formulář nebo session?

ad spagety kod)
idealne je pouzit objektovo orientovane programovanie, ale da sa to aj bez toho.
napriklad spravis si funkciu, ktora obhospodari insert do DB. alebo ine dalsie funkcie, ktore sa daju znovu pouzit bez toho, aby si cely kod musel pisat znovu na inom mieste.
ten tvoj select na ziskanie posledneho zapisaneho ID je zly, pretoze nepocitas s tym, ze niekto ti moze paralelne vlozit dalsi riadok.

function zapisDoDB ($text, $autor)
{
$text = stripslashes(htmlspecialchars(trim($text)));
require_once "../include/db.php";
mysql_query("INSERT INTO `events` (`text`,`author`) VALUES ('$text','$author')");
return mysql_insert_id();
}

potom v tvojom kode uz len pouzijes

$id = zapisDoDB ($_POST['editor1'], $_POST['author']);

a este dobra rada. namiesto mysql_query a celkovo mysql_* funkcii pouzivaj mysqli_* funkcie. pretoze mysql_* su uz zastarale.

co sa tyka require_once, tak to by malo byt na zaciatku celeho kodu - sluzi hlavne na import inych funkcii, tried. v strede sa to dava len v specifickych pripadoch.

ad kombinacia HTML a PHP)
mozes urobit napriklad aj takuto vec:

<html>
<head></head>
<body>
<div>
<?php echo "Tvoj text"; ?>
</div>
</body>
</html>

ad presun premennej)
da sa to aj napriklad cez URL parametre.

velmi zjednodusene:

na stranke jedna.php

<?php
header("Location: www.xxx.cz/akce.php?meno="."Milan");
?>

na stranke dva.php

<?php echo $_GET['meno']; ?>

Zpět do poradny Odpovědět na původní otázku Nahoru