Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Kuvat palvelimelle ja tietokantaan

Sopetus [16.03.2019 13:30:17]

#

Osaisiko joku auttaa missä on vika, kun en saa toimimaan alla olevaa esimerkkiä?

//uploader.php
<?php
include("yhteys.php");

$kysely = $yhteys->prepare("INSERT INTO tuotteet (nimi, hinta, kuva) VALUES (?, ?, ?)");
$kysely->execute(array($_POST["nimi"], $_POST["hinta"], $_POST["kuva"]));

$id = $yhteys->lastInsertId();
header("Location: tuote.php?id=$id");


$kysely2 = $yhteys->prepare("INSERT INTO categoria (ca_id) VALUES (?)");
$kysely2->execute(array($_POST["ca_id"]));

$kysely3 = $yhteys->prepare("INSERT INTO kuvat (kuva) VALUES (?)");
$kysely3->execute(array($_POST["kuva"]));
?>
//uploader.php
<?php $target_path = "uploads/";

$target_path = $target_path . basename( $_FILES['uploadedfile']['name']);

if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) {
    echo "The file ".  basename( $_FILES['uploadedfile']['name']).
    " has been uploaded";
} else{
    echo "There was an error uploading the file, please try again!";
}
?>

https://www.ohjelmointiputka.net/keskustelu/18113-kuvien-lisäys-toiminto/sivu-1

<form enctype="multipart/form-data" action="uploader.php" method="POST">
<input type="text" name="nimi" />
<input type="text" name="hinta" />

<select name="ca_id">
	<option value="1"> Juomat
	<option value="2"> Hedelmät
	<option value="3"> Valmisruoka
</select>


Upload: <input name="uploadedfile" type="file" /><br />
<input type="submit" value="Upload" />
</form>

Lomakkeen tekstikentät toimivat tietokantaan kun ottaa //enctype="multipart/form-data"// pois, mutta kuva ei silloin siirry palvelimelle.

CREATE TABLE `tuotteet` (
    id INT PRIMARY KEY AUTO_INCREMENT,
    nimi INT,
    hinta INT
    kuva INT
);

INSERT INTO `tuotteet` (`id`, `nimi`, `hinta`, `kuva`) VALUES
(64646, 'Maito', '1.55€', '87821.png'),
(64647, 'Piimä', '1.35€', '87823.png'),
(64648, 'Omena', '0.30€', '87824.png');

CREATE TABLE `kuvat` (
    id INT PRIMARY KEY AUTO_INCREMENT,
    kuva INT
    tuote_id INT
);

INSERT INTO `kuvat` (`id`, `kuva`, `tuote_id`) VALUES
(1, '87821.png', '64646'),
(2, '87822.png', '64646'),
(3, '87823.png', '64647'),
(4, '87824.png', '64648');

Tuossa ylhäällä on hahmotelma, joka ei ole täydellinen.

Osaisiko joku auttaa ja tehdä lomakkeen ja käsittelijän (uploader.php).
Haluasin, että yksi kuvan nimi tallentuu 'tuotteet' -tauluun. Sitten 'kuvat' -tauluun tallentuisi useampi kuvan tuotteesta ja (tuote_id) tulisi tuotteet -taulun ID.

<form action="" method="POST" enctype="multipart/form-data">
    <input type="file" name="files[]" multiple/>
    <input type="submit"/>
</form>

Olisiko lomakkeeseen mahdollista saada 'multiple', että voisi useamman kuvan tallentaa palvelimelle ja tietokantatauluihin: ('tuotteet ja kuvat').
Lisäksi kuvien tallennuksessa palvelimele, se nimeäsi kuvien nimet uudelleen.

Metabolix [11.04.2019 14:44:46]

#

Harvinaisen selvä vika on esim. siinä, että käytät koodissa POST-kenttää "kuva" mutta et ole laittanut tällaista kenttää lomakkeelle.

Toinen selvä vika on siinä, että määrittelet tietokannan sarakkeet INT-tyyppisiksi eli kokonaisluvuiksi. Tietenkään et voi tallentaa sarakkeeseen silloin tekstiä.

Kolmas ongelma liittynee jotenkin siihen, että olet tuossa esittänyt kaksi erillistä uploader.php-nimistä tiedostoa mutta toimivaa lähetystä varten nämä pitäisi tietenkin saada yhdistettyä yhdeksi skriptiksi. Toki enctype vaikuttaa tiedostojen lähetykseen, mutta muiden kenttien pitäisi välittyä aivan normaalisti siitä riippumatta, joten olet tehnyt jonkin muun virheen.

Käyttämäsi koodi tiedoston tallennukseen on katastrofaalisen vaarallinen, älä missään tapauksessa laita tuota nettiin! Koodin kautta voi lähettää esimerkiksi PHP-skriptejä ja ottaa hallintaan koko sivustosi.

Tiedoston lähetys -koodivinkissä on esimerkki kuvien tallentamisesta ja nimeämisestä. Tämänhetkinen versio vinkistä ei tue taulukkoa (usean tiedoston lähetystä samasta kentästä), mutta saatan jossain vaiheessa päivittää vinkkiä.

Olisi varmaan järkevää perehtyä PHP- ja MySQL-ohjelmointiin ensin oppaista. Tai jos tavoitteenasi on, että joku muu tekee tämän projektin puolestasi, voisit vain sanoa niin ja avata keskustelun Työtarjoukset-osioon.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta