Autor Zpráva
ronnie
Profil
Rovnou k problému:
Právě dělám internetový obchod podle jednoho návodu. Jako admin mám možnost do tohoto obchodu nahrávat různé soubory z domácího počítače. Tento soubor se pomocí fce "move_uploaded_file" přednese z dočasného adresáře do nového, problém je v tom, jak mám tento soubor upravit, aby do něj bylo možno zapisovat?
K tomuto kroku je třeba nastavit konfigurační soubor php.ini, k němu ale přístup nemám, jak to tedy mohu udělat? Řekněme, že ten soubor potřebuji zapsat na soubory/prijato/
Pokud to má nějakou souvislost, tak hostuji na Český-hosting.cz
thingwath
Profil
Pokud to není povolené, tak napsat správci serveru ať to povolí. A asi si připravit nějaký hodně dobrý důvod. Nebo to prostě technicky vyřešit jinak, přiznám se, že ani moc nerozumím tomu co se tu řeší, takže nějakou alternativu nenavrhnu.
ronnie
Profil
Potřebuji tenhle script napsat nějak jinak:

if (is_uploaded_file ($_FILES['nazev_souboru']['tmp_name'])) {
if (move_uploaded_file($_FILES['nazev_souboru']['tmp_name'], "prijato/{$_FILES['nazev_souboru']['name']}")) { // Přenést soubor.

echo '<p>Soubor byl přenesen!</p>';

} else { // Soubor nelze přenést.
echo '<p><font color="red">Soubor nelze přenést.</font></p>';
$soub = '';
}
$soub = $_FILES['nazev_souboru']['name'];
} else {
$soub = '';
}
...
Hugo
Profil
ronnie

A nestaci tomu soubotu nastavit prava pomoci chmod()??
ronnie
Profil
O chmod() slyším poprvé, navíc ten popis mi nic neříká...co bych tedy měl změnit/přidat?
A ještě k té funkci move_uploaded_file...v té druhé části "prijato/..." je to cesta z adresáře, který tu fci volá?
Hugo
Profil
chmod ('jmeno_souboru', 0777) nastavi plna prava pro zadany soubor. Staci se podivat do manualu.
ronnie
Profil
Asi bude nejlepší sem přepsat celý script....

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/2000/REC-xhtml1-20000126/DTD/xhtml1-transitional .dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="cs" lang="cs">
<head>
<meta http-equiv="content-type" content="text/html; charset=windows-1250" />
<title>Přidat obraz</title>
</head>
<body>
<?php # Výpis kódu 13.2 - pridat_obraz.php
// Tato stránka umožňuje správci přidat do databáze nový obraz (produkt).


require_once ('../../mysql_spojit.php'); // Připojit se k databázi.
chmod(prijato, 0777);
if (isset($_POST['odeslat'])) { // Zpracovat formulář.

// Ověřit validitu polí nazev_obrazu, nazev_souboru, umelec (existující, nebo jmeno, druhe_jmeno, prijmeni), rozmery, cenu a popis.

// Kontrola názvu obrazu.
if (!empty($_POST['nazev_obrazu'])) {
$obr = opravit_data($_POST['nazev_obrazu']);
} else {
$obr = FALSE;
echo '<p><font color="red">Zadejte prosím název obrazu!</font></p>';
}

// Zkontrolovat název souboru (nepovinný).
if (is_uploaded_file ($_FILES['nazev_souboru']['tmp_name'])) {
if (move_uploaded_file($_FILES['nazev_souboru']['tmp_name'], "prijato/{$_FILES['nazev_souboru']['name']}")) { // Přenést soubor.

echo '<p>Soubor byl přenesen!</p>';

} else { // Soubor nelze přenést.
echo '<p><font color="red">Soubor nelze přenést.</font></p>';
$soub = '';
}
$soub = $_FILES['nazev_souboru']['name'];
} else {
$soub = '';
}

// Zkontrolovat rozměry (nepovinné).
if (!empty($_POST['rozmery'])) {
$vel = opravit_data($_POST['rozmery']);
} else {
$vel = '<i>Informace o rozměrech jsou nedostupné.</i>';
}

// Zkontrolvat cenu.
if (is_numeric($_POST['cena'])) {
$c = $_POST['cena'];
} else {
$c = FALSE;
echo '<p><font color="red">Zadejte prosím cenu obrazu!</font></p>';
}

// Zkontrolvat popis (nepovinný).
if (!empty($_POST['popis'])) {
$p = opravit_data($_POST['popis']);
} else {
$p = '<i>Popis nebyl zadán.</i>';
}

// Zkontrolvat umělce.
if ($_POST['umelec'] == 'novy') {

// Je to nový umělec, přidat do databáze.
$dotaz = 'INSERT INTO umelci (id_umelce, jmeno, druhe_jmeno, prijmeni) VALUES (NULL, ';

if (!empty($_POST['jmeno'])) {
$dotaz .= "'". opravit_data($_POST['jmeno']). "', ";
} else {
$dotaz .= 'NULL, ';
}

if (!empty($_POST['druhe_jmeno'])) {
$dotaz .= "'". opravit_data($_POST['druhe_jmeno']). "', ";
} else {
$dotaz .= 'NULL, ';
}

// Zkontrolovat příjmení.
if (!empty($_POST['prijmeni'])) {
$dotaz .= "'". opravit_data($_POST['prijmeni']). "')";
$výsledek = @mysql_query ($dotaz); // Spustit dotaz.
$a = @mysql_insert_id(); // Načíst ID umělce.
} else {
$a = FALSE;
echo '<p><font color="red">Zadejte prosím příjmení umělce.</font></p>';
}

} elseif (($_POST['umelec'] == 'existuje') && ($_POST['existuje'] > 0)) {
$a = $_POST['existuje'];
} else {
$a = FALSE;
echo '<p><font color="red">Zadejte prosím autora obrazu!</font></p>';
}

if ($obr && $c && $a) {

// Přidejte obraz do databáze.
$dotaz = "INSERT INTO obrazy (id_umelce, nazev_obrazu, cena, rozmery, popis, nazev_souboru) VALUES ($a, '$obr', $c, '$vel', '$p', '$soub')";
if ($výsledek = @mysql_query ($dotaz)) { // Dotaz byl úspěšný.
echo '<p>Obraz byl přidán do databáze.</p>';
} else { // Dotaz neprošel.
echo '<p><font color="red">Váš požadavek nemohl být vyřízen kvůli systémové chybě.</font></p>';
}

} else { // Vstupní údaje neprošly zadanými testy.
echo '<p><font color="red">Vraťte se na předchozí stránku a zkuste to znovu.</font></p>';
}

} else { // Zobrazit formulář.
?>

<form enctype="multipart/form-data" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">

<input type="hidden" name="MAX_FILE_SIZE" value="524288">

<fieldset><legend>Vyplňte formulář a přidejte obraz do katalogu:</legend>

<p><b>Název obrazu:</b> <input type="text" name="nazev_obrazu" size="30" maxlength="60" /></p>

<p><b>Název souboru:</b> <input type="file" name="nazev_souboru" /></p>

<p><b>Umělec:</b>
Existuje <input type="radio" name="umelec" value="existuje" />
<select name="existuje"><option>Vyberte</option>
<?php // Načteme všechny umělce do rozevíracího seznamu.
$dotaz = "SELECT id_umelce, CONCAT(prijmeni, ', ', jmeno) AS jmeno FROM umelci ORDER BY prijmeni ASC";
$výsledek = @mysql_query ($dotaz);
while ($řádek = mysql_fetch_array ($výsledek, MYSQL_ASSOC)) {
echo "<option value=\"{$řádek['id_umelce']}\">{$řádek['jmeno']}</option>\n";
}
mysql_close(); // Zavřít připojení k databázi.
?>
</select><br />
Nový <input type="radio" name="umelec" value="novy" />
Křestní jméno: <input type="text" name="jmeno" size="10" maxlength="30" />
Druhé jméno: <input type="text" name="druhe_jmeno" size="10" maxlength="30" />
Příjmení: <input type="text" name="prijmeni" size="20" maxlength="30" />
</p>

<p><b>Rozměry:</b> <input type="text" name="rozmery" size="30" maxlength="60" /></p>

<p><b>Cena:</b> <input type="text" name="cena" size="10" maxlength="10" /><br /><small>Nezadávejte symbol měny nebo čárky.</small></p>

<p><b>Popis:</b> <textarea name="popis" cols="40" rows="5"></textarea></p>

</fieldset>

<div align="center"><input type="submit" name="odeslat" value="Odeslat" /></div>

</form><!-- Konec formuláře -->
<?php
} // Konec hlavního příkazu.
?>
</body>
</html>


Tenhle script nefunguje, je uložen v adresáři 4dm1n a v něm je také vytvořen nový adresář "prijato"
Hugo
Profil
Ale co nefunguje. Nenasel sem nikde nic co by zapisovalo do toho uploadovaneho souboru!!
ronnie
Profil
<p><b>Název souboru:</b> <input type="file" name="nazev_souboru" /></p>

na tohle by měl navazovat řádek

if (move_uploaded_file($_FILES['nazev_souboru']['tmp_name'], "prijato/{$_FILES['nazev_souboru']['name']}"))

Pak se objeví hláška, že soubor nelze přenést.
Hugo
Profil
A mas dobre nastavena prava u slozky prijato? Pokud ne, tak je nastav, tak aby do ni mohlo php zapisovat a pak by to melo jet.
ronnie
Profil
No ale jak to právě mam nastavit?
Nestačí ten řádek
chmod(prijato, 0777);
?
Hugo
Profil
Pokud pouzivas FTP klienta, ktery umi nastavit opravneni (WinSCP, TotalCMD ...), tak nastav php serveru (asi uzivatel nobody nebo neco podobneho) pravo zapisu do toho adresare. Jinak by to melo jit i pomoci chmod (aspon na Linuxovem serveru).
ronnie
Profil
Počekj, teď jsem trochu v lese...:)
Nač používat FTP klienta? Vždyť ho vůbec nepotřebuji,ale jinak mam totalCMD....
Hugo
Profil
Ja nemyslim pouzivat FTP na to uploadovani souboru, ale jen nastav prava tomu adresari v TotalCMD je to soubor->Zmena atributu a nastav tomu adresari 775, to by melo stacit.
ronnie
Profil
Jo už je to v pořádku, diky Hugo a sorry za tak hloupé otázky:)
Hugo
Profil
Neni zac,

vsichni jsme nekdy zacinali :-)
Toto téma je uzamčeno. Odpověď nelze zaslat.