Miten saisin jomman kumman noista linkeistä katoamaan sen mukaan jos kuvaa ei ole.
Esim. olen katsomassa kuvaa nro 89 ja kuvaa 90 ei ole olemassa, joten miten tämän seuraava -linkin saisi silloin katoamaan?
Tällä tavalla toimii edellinen ja seuraava -linkit kuvagalleriassani:
$edellinen = $_GET['id'] - 1; $seuraava = $_GET['id'] + 1;
combo kirjoitti:
Miten saisin jomman kumman noista linkeistä katoamaan sen mukaan jos kuvaa ei ole.
Esim. olen katsomassa kuvaa nro 89 ja kuvaa 90 ei ole olemassa, joten miten tämän seuraava -linkin saisi silloin katoamaan?
Noilla lähtötiedoilla on aika vaikea auttaa. Ovatko kuvat nimettynä id:n mukaan kuva1.jpg kuva2.jpg jne., vai ovatko kuvien id:t ja niitä vastaavat tiedostonimet tietokannassa? Jos kuvat on nimetty suoraan id:n mukaan, voit tarkistaa file_exists-funktiolla, onko kuva olemassa ja sen mukaan tulostaa kuvan linkin.
No mikset vaikka tarkastaisi, löytyykö noilla tunnuksilla `$edellinen` ja `$seuraava` kannasta kuvia. Jos ei löydy, jätetään linkki tulostamatta. Laiskan miehen tapa olisi jättää linkintulostus entiselleen, mutta asettaa tarvittavat muuttujat takaisin:
Säilytä muuttujassa sivujen kokonaismäärää, ja if-lauseella tarkistat onko olemassa seuraavaa tai edellistä sivua.
<?php $sivuja = 89; $tamaSivu = $_GET["id"]; if((int) $tamaSivu + 1 <= $sivuja) echo "Seuraava\n"; if((int) $tamaSivu - 1 >= 0) echo "Edellinen\n";
Koodiin voit lisätä vielä tarkistuksen, onko sivua edes olemassa.
-tossu- kirjoitti:
combo kirjoitti:
Miten saisin jomman kumman noista linkeistä katoamaan sen mukaan jos kuvaa ei ole.
Esim. olen katsomassa kuvaa nro 89 ja kuvaa 90 ei ole olemassa, joten miten tämän seuraava -linkin saisi silloin katoamaan?
Noilla lähtötiedoilla on aika vaikea auttaa. Ovatko kuvat nimettynä id:n mukaan kuva1.jpg kuva2.jpg jne., vai ovatko kuvien id:t ja niitä vastaavat tiedostonimet vaikka tietokannassa? Jos kuvat on nimetty suoraan id:n mukaan, voit tarkistaa file_exists-funktiolla, onko kuva olemassa ja sen mukaan tulostaa kuvan linkin.
Kuvien nimet on 1.jpg, 2.jpg eli tuon $id
:n mukaan $id.jpg
Eipä ole onnistunut kunnolla.
Olen saanut vain toisen linkeistä toimimaan. Kuva nro. 1 sivulla ei ole edellinen linkkiä mutta kuva nro 89 sivulla on seuraava linkki. Tuo on siis tehty file_exists
:llä.
Mulla ainakin toimii toi mun koodi ihan halutulla tavalla.
Macro kirjoitti:
Mulla ainakin toimii toi mun koodi ihan halutulla tavalla.
Voitko pistää linkkiä jos on netissä.
Itselläni ei meinaan toimi.
Olisit laittanut tuohon 16:20:22 postaukseen sen koodin esiin joka ei toimi, niin olisi voinut sanoa mikä siinä on väärin. Eikös tuo Macron koodi ole tuossa ylhäällä, mutta se ei käytä file_exists funktiota tarkistukseen.
Mitä tuolla tietokannassa tarkalleen on?
Voithan hakea vaikka tietokannasta mikä on viimeinen kuva
SELECT MAX(kuvanumero) FROM kuvat
js sitten koodissa vertaat onko nykyinen ($_GET['id']) kuva viimeinen vaiko ei, tai jotain tuonnepäin.
makumaku kirjoitti:
Voithan hakea vaikka tietokannasta mikä on viimeinen kuva
SELECT MAX(kuvanumero) FROM kuvatjs sitten koodissa vertaat onko nykyinen ($_GET['id']) kuva viimeinen vaiko ei, tai jotain tuonnepäin.
Juu tuli tuo tapa mieleen tässä vähän aikaa sitten.
Jokin tässä nyt mättää:
Aivot ei ihan pyöri ihan täysillä kun särkee päätä.
Sivulla näkyy minkä tahansa kuvan kohdalla "Edellinen"
Tässä sitä skriptiä:
Varmaan siksi, että ensimmäinen ehto on aina tosi (paitsi ensimmäisen kuvan tapauksessa), ja silloin muita lohkoja ei suoriteta.
Koitappas nyt mitä tuo mun koodi tekee, siinä on sama tyyli kun sulla, mutta se toimii.
Macro kirjoitti:
Varmaan siksi, että ensimmäinen ehto on aina tosi (paitsi ensimmäisen kuvan tapauksessa), ja silloin muita lohkoja ei suoriteta.
Koitappas nyt mitä tuo mun koodi tekee, siinä on sama tyyli kun sulla, mutta se toimii.
Mulla ei.
Voisko joku auttaa samaan tuon mun tekemän koodin kuntoon. Siinä tuskin ei ole suurta vikaa
Indeksointi alkaa yleensä nollasta, joten esimerkiksi tälläinen systeemi... Joka sisältää tuon aikaisemman koodini.
http://mcpro.servut.us/nonwp/edellinenSeuraava.
http://mcpro.servut.us/nonwp/edellinenSeuraava.
http://mcpro.servut.us/nonwp/edellinenSeuraava.
Ja mitä se sisältää? Vain ja ainoastaan tuon mitä postasin.
Kerroin sulle myös, että miksi sun oma viritelmä toimi. En kyllä tiedä mitä tiedoston alussa on, koska tuo muuttujan määrittely ja aaltosulje ovat aika epämääräisiä.
Macro kirjoitti:
Indeksointi alkaa yleensä nollasta, joten esimerkiksi tälläinen systeemi... Joka sisältää tuon aikaisemman koodini.
http://mcpro.servut.us/nonwp/edellinenSeuraava.
php?id=0 - Seuraava
http://mcpro.servut.us/nonwp/edellinenSeuraava.php?id=1 - Edellinen ja seuraava
http://mcpro.servut.us/nonwp/edellinenSeuraava.php?id=89 - Edellinen Ja mitä se sisältää? Vain ja ainoastaan tuon mitä postasin.
Kerroin sulle myös, että miksi sun oma viritelmä toimi. En kyllä tiedä mitä tiedoston alussa on, koska tuo muuttujan määrittely ja aaltosulje ovat aika epämääräisiä.
Kokeilin tuota uudelleen. Sama vika, edellinen linkki on myös sivulla, jossa on kuva nro 1. Viimeisessä kuvassa seuraava linkki katoaa niin kuin pitää. Koodi on alkuperäinen sinun tekemäsi. Missä vika?
Koska ohjelmoinnissa aloitetaan laskeminen nollasta.
MySQL auto_increment alkaa ykkösestä. Tässäkin varmaan ensimmäisen kuvan numero on yksi, ja Macron koodissa oletetaan, että ensimmäinen on nolla.
villev kirjoitti:
MySQL auto_increment alkaa ykkösestä. Tässäkin varmaan ensimmäisen kuvan numero on yksi, ja Macron koodissa oletetaan, että ensimmäinen on nolla.
Aivan, ratkesihan sekin ongelma vihdoin!
Suurkiitos kaikille :)
Seuraava ei ole suoraan toimivaa koodia, lue se enemmänkin pseudokoodina.
Ihan tarkkaan minulle ei vielä selvinnyt että onko kuvat nimetty samoin kuin nämä id:t, mutta jos olisi niin eikö menisi yksinkertaisesti näin
$id = $POST["id"]; // Nykyinen näytetävä kuva // Haetaan pienin ja suurin kannasta $kysely = "SELECT MIN(id) AS ensimmainen, MAX(id) AS viimeinen FROM kuvat"; ...mysql_jutut()... // Onko tietokannassa pienempiäkin kuvia kuin nykyinen -> näytä linkki niihin if($row['ensimmainen'] < $id) echo "Edellinen"; // Onko tietokannassa suurempiakin kuvia kuin nykyinen -> näytä linkki niihin if($row['viimeinen'] > $id) echo "Seuraava";
makumaku: Kiito tästä. Taidan kuitenkin käyttää tuota Macron koodia kun se toimii ainakin. Eihän tuolta tietokannasta tarvitse hakea pienintä ID -numeroa ainakaan minun tapauksessani koska se ei muutu ja sen voi määrittää tuohon koodiin suoraan.
(Mod. huom: älä lainaa kokonaista edellistä viestiä.)
Pistän tähän samaan ketjuun toisen ongelman.
Miten tallentaa tämä kuva, jossa on vesileima:
Päätin kysyä täältä kun pitäisi saada nopeasti tehtyä. Äkkiseltään ei ainakaan file_put_contents
toiminut.
<?php // Load the stamp and the photo to apply the watermark to $stamp = imagecreatefrompng("http://xxxxxxxxxxxxx.net/galleriat/vesileima.php"); $im = imagecreatefromjpeg("http://xxxxxxxxxx.net/galleriat/kuvat/22.jpg"); // Set the margins for the stamp and get the height/width of the stamp image $marge_right = 10; $marge_bottom = 10; $sx = imagesx($stamp); $sy = imagesy($stamp); // Copy the stamp image onto our photo using the margin offsets and the photo // width to calculate positioning of the stamp. imagecopy($im, $stamp, imagesx($im) - $sx - $marge_right, imagesy($im) - $sy - $marge_bottom, 0, 0, imagesx($stamp), imagesy($stamp)); // Output and free memory header('Content-type: image/png'); imagepng($im); file_put_contents('/home/xxxxx/public_html/galleriat/kuvat/220.jpg', $im); imagedestroy($im); ?>
combo kirjoitti:
Miten tallentaa tämä kuva, jossa on vesileima:
Laita tiedoston nimi imagepng:n toiseksi parametriksi.
voitko antaa esimerkin?
Tiedätkö, mikä on parametri? Jos et, ota selvää!
imagepng($im, "kuva.png");
combo kirjoitti:
Teen tätä yhdessä combon kanssa.
Melkein sama viesti keskustelussa, sama sähköpostiosoite, muutakin yhteistä... Jakomielitautiko? Sopisiko mitenkään yhdistää tunnuksesi, tai voisitko edes käyttää niistä jatkossa vain yhtä?
Metabolix kirjoitti:
Melkein sama viesti keskustelussa, sama sähköpostiosoite, muutakin yhteistä... Jakomielitautiko? Sopisiko mitenkään yhdistää tunnuksesi, tai voisitko edes käyttää niistä jatkossa vain yhtä?
PHP haasteeseen rekisteröidyin kun en tiennyt että käy sama tunnus keskustelun kanssa. Niin näistä voisi poistaa toisen tai yhdistää...
En tiedä auttaako sinua, mutta näin minua autettiin :)
<?php $kuva = intval ($_REQUEST ['kuvanarvo']); $k = mysql_query ("SELECT jnro, kuva, kuvateksti FROM kuvagalleria WHERE jnro = $kuva LIMIT 1"); if (!mysql_num_rows ($k)) { //kuvaa ei löytynyt } $r = mysql_fetch_assoc ($k); //kuvatagin tulostus $k = mysql_query ("SELECT MAX(jnro) as edellinen FROM kuvagalleria WHERE jnro < $kuva"); $r = mysql_fetch_assoc ($k); $edellinen = $r ['edellinen']; $k = mysql_query ("SELECT MIN(jnro) as seuraava FROM kuvagalleria WHERE jnro > $kuva"); $r = mysql_fetch_assoc ($k); $seuraava = $r ['seuraava']; //edellinen- ja seuraava-linkkien tulostus ?>
"Ei toimi" on varsin epätarkka ilmaisu.
Miten se ei toimi? Mikä vielä toimii? Tuleeko mitään virheilmoituksia? jne...jne...
EDIT: Noniin, combon 09.02.2011 11:03:03 lähettämä kysymys sitten otettiinkin pois välistä :)
Otin itse pois kun siinä oli virhe.
Uudestaan:
Pistän tähän kuvagalleriani -aiheeseen ongelman.
Eli kaveri piti lähettää kuvagalleriaan testauksen vuoksi pari jpg- valokuvaa, joita ainoastaan tuetaan. Hän käyttää IE:tä (7:aa tai 8:a) ja kuvanlisäys ei toimi. Mulla toimii kun käytän Chromea mulla ei myöskään toimi IE8:ssa.
Viheviesti on tuo "Kuvanlisäys epäonnistui!" mikä löytyy riviltä 120 alkaen.
Eli kuva ei tule palvelimelle.
Tässä kuvanlisäys -sivu:
<?php ob_start() ?> <?php //muodostetaan yhteys tietokantapalvelimeen $yhteys = mysql_connect("localhost", "int4xxxxx_adming", "xxxxxxxx") or die("Yhdistäminen ei onnistunut!"); //valitaan tietokanta mysql_selectdb("intxxx_kgalleria", $yhteys) or die("Tietokantaa ei löytynyt!"); //haetaan tietokannan suurin kuvan id-numero $kysely = "SELECT MAX(ID) FROM galleria"; $haku = mysql_query($kysely, $yhteys); $id = mysql_result($haku, "0"); //lisättävän kuvan id-numero $id = $id + 1; ////////////////////////////////////// // Kuvan lähetys ///////////////////// ////////////////////////////////////// //otetaan talteen lähetetyt tiedot $kuvaaja = $_POST['kuvaaja']; $kuvateksti = $_POST['kuvateksti']; $paiva = $_POST['pp']; $valtio = $_POST['valtio']; $paikka = $_POST['paikka']; $liikennepaikka = $_POST['liikennepaikka']; $rataosa = $_POST['rataosa']; $vesistö = $_POST['vesistö']; $satama = $_POST['satama']; $lentokenttä = $_POST['lentokenttä']; //otetaan talteen aika, jolloin kuva lähetettiin $aika = time(); //lisätään tiedot tietokantaan $kysely = "INSERT INTO galleria SET id = '$id', lisäysaika = '$aika', kuvaaja = '$kuvaaja', kuvauspäivä = '$paiva', kuvateksti = '$kuvateksti', valtio = '$valtio', kuvauspaikka = '$paikka', liikennepaikka = '$liikennepaikka', rataosa = '$rataosa', satama = '$satama', vesistö = '$vesistö', lentokenttä = '$lentokenttä'"; //suoritetaan kysely $haku = mysql_query($kysely, $yhteys); ?> <?php ini_set("memory_limit", "999999999"); // php.ini -tiedoston muistirajoitus -asetus ?> <?php // ladataan tiedosto if ((isset($_POST["submitted_form"])) && ($_POST["submitted_form"] == "image_upload_form")) { // sallitut tiedostomuodot: jpg, jpeg if (($_FILES["image_upload_box"]["type"] == "image/jpeg") && ($_FILES["image_upload_box"]["size"] < 99999999000)) { // some settings $max_upload_width = 99999999999; $max_upload_height = 99999999999; // if user chosed properly then scale down the image according to user preferances if(isset($_REQUEST['max_width_box']) and $_REQUEST['max_width_box']!='' and $_REQUEST['max_width_box']<=$max_upload_width){ $max_upload_width = $_REQUEST['max_width_box']; } if(isset($_REQUEST['max_height_box']) and $_REQUEST['max_height_box']!='' and $_REQUEST['max_height_box']<=$max_upload_height){ $max_upload_height = $_REQUEST['max_height_box']; } // jos kuva on JPG/JPEG if($_FILES["image_upload_box"]["type"] == "image/jpeg"){ $image_source = imagecreatefromjpeg($_FILES["image_upload_box"]["tmp_name"]); } $_FILES["image_upload_box"]["name"] = "$id.jpg"; $remote_file = "/home/intxxxx/public_html/ilmera/galleria/kuvat/".$_FILES["image_upload_box"]["name"]; imagejpeg($image_source,$remote_file,100); chmod($remote_file,0644); // get width and height of original image list($image_width, $image_height) = getimagesize($remote_file); if($image_width>$max_upload_width || $image_height >$max_upload_height){ $proportions = $image_width/$image_height; if($image_width>$image_height){ $new_width = $max_upload_width; $new_height = round($max_upload_width/$proportions); } else{ $new_height = $max_upload_height; $new_width = round($max_upload_height*$proportions); } $new_image = imagecreatetruecolor($new_width , $new_height); $image_source = imagecreatefromjpeg($remote_file); imagecopyresampled($new_image, $image_source, 0, 0, 0, 0, $new_width, $new_height, $image_width, $image_height); imagejpeg($new_image,$remote_file,100); imagedestroy($new_image); } imagedestroy($image_source); } } if(!file_exists("/home/intxxxxxx/public_html/ilmera/galleria/kuvat/$id.jpg")) { die("<font color=\"#B00000\"><strong>Kuvanlisäys epäonnistui!</strong></font>"); } else { echo "Kuvanlisäys onnistui! $id<p><form action=\"http://xxxxxx.net/galleria/hallinta/uusi_kuva/tallenna/jatka\" method=\"post\" enctype=\"multipart/form-data\"> <input type=\"hidden\" value=\"$id\" name=\"kuvannumero\"> <input type=\"submit\" value=\"Jatka\"> </form> </p>jatka"; } ?>
Kokeile muuttaa tuo mime-tyypin tarkistus vaikka muotoon:
if ($_FILES["image_upload_box"]["type"] == "image/jpeg" or $_FILES["image_upload_box"]["type"] == "image/pjpeg") {
makumaku kirjoitti:
Kokeile muuttaa tuo mime-tyypin tarkistus vaikka muotoon:
if ($_FILES["image_upload_box"]["type"] == "image/jpeg" or $_FILES["image_upload_box"]["type"] == "image/pjpeg") {
Eipä auttanut mitään. Sama virhe edelleen.
Koita tulostaa tuo $_FILES["image_upload_box"]["type"], ja katso miten ne eroavat jos koitat lisätä samaa kuvaa IE:llä ja Chromella.
Chromella lukee: image/jpeg
ja
IE:llä: image/pjpeg
Eli johtunee tuosta?
Kokeile ottaa mime-tarkistus kokonaan pois ja lisätä sitten kuva IE:llä.
Koodissasi on muuten mime-tarkistus kahdessa kohtaa, laitoithan makumakun koodin molempiin.
-tossu- kirjoitti:
Kokeile ottaa mime-tarkistus kokonaan pois ja lisätä sitten kuva IE:llä.
Koodissasi on muuten mime-tarkistus kahdessa kohtaa, laitoithan makumakun koodin molempiin.
Otanko molemmat mime-tarkistukset pois?
Tuo on valmis koodi niin kuin sen huomaa tuosta kommentoinnista eikä mun tekemä.
Turhaanhan se tarkistus kahdessa kohtaa on, kun ne ovat sisäkkäin. Laittaa ensimmäiseen tuon makumakun tarkistuksen niin toisesta voi ottaa kokonaan pois.
// sallitut tiedostomuodot: jpg, jpeg if (($_FILES["image_upload_box"]["type"] == "image/jpeg" || $_FILES["image_upload_box"]["type"] == "image/pjpeg") && ($_FILES["image_upload_box"]["size"] < 99999999000)) {
// jos kuva on JPG/JPEG $image_source = imagecreatefromjpeg($_FILES["image_upload_box"]["tmp_name"]);
Ota molemmat tarkistukset pois. Kun koodi toimii, lisää tarkistuksia ja varmista, että koodi toimii myös niiden kanssa.
Nonniin AkeMake:lle kiitokset avusta.
Nyt toimii.
Aihe on jo aika vanha, joten et voi enää vastata siihen.