ordine poze... [REZOLVAT]

Ai o întrebare legată de PHP? Incercăm să îi găsim soluţie. Sau poate doar vrei să publici un cod interesant.

Moderatori: Zamolxe, Moderatori

dant_71
Average Member
Mesaje: 83
Membru din: Sâm Ian 27, 2007 1:04 am

Mesajde dant_71 » Vin Feb 06, 2009 9:00 am

Ma bucur ca merge

Cod: Selectaţi tot

$query = "INSERT INTO `poze` (id_user, nume_poza, ordine) VALUES ('{$iduser}', 'nume poza', '{$nrpoza}')";

n-am inteles la comanda de mai sus, toate pozele tale vor fi salvate in bd cu acelasi nume - 'nume poza'?



sebyku
Senior Member
Mesaje: 638
Membru din: Mar Ian 13, 2009 6:52 pm
Localitate: Suceava
Contact:

:)

Mesajde sebyku » Vin Feb 06, 2009 12:40 pm

salut:) am inlocuit acolo si arata ceva de genu....

Cod: Selectaţi tot

$query = "INSERT INTO `poze` (id_user, nume_poza, ordine) VALUES ('{$iduser}','{$_FILES['fisier']['name']}', '{$nrpoza}')";
:) ca am observat ca le punea cu acelasi nume dar as putea sa fac sa se puna niste cifre random dupa poza sau ceva de genu?:)

Avatar utilizator
mihaitha
Senior Member
Mesaje: 2383
Membru din: Vin Mai 04, 2007 12:40 pm
Localitate: Sibiu
Contact:

Mesajde mihaitha » Vin Feb 06, 2009 1:21 pm

Foloseste functia rand()

dant_71
Average Member
Mesaje: 83
Membru din: Sâm Ian 27, 2007 1:04 am

Mesajde dant_71 » Vin Feb 06, 2009 2:16 pm

eu ti-as sugera sa faci altfel:
poti sa redenumesti poza incarcata cu id-ul userului (in felul asta daca vezi fisierul poti afla usor cine a incarcat-o) si sa-i agati in coada numarul de ordine

Cod: Selectaţi tot


$numepozaup=$_FILES['fisier']['name'];
$numepozanew=$iduser."_".$nrpoza.".jpg";
rename($numepozaup, $numepozanew);

if (file_exists($numepozanew)){    //verifici daca s-a facut redenumirea
     query = "INSERT INTO `poze` (id_user, nume_poza, ordine) VALUES ('{$iduser}','{$numepozanew}', '{$nrpoza}')";
}

sebyku
Senior Member
Mesaje: 638
Membru din: Mar Ian 13, 2009 6:52 pm
Localitate: Suceava
Contact:

:)

Mesajde sebyku » Vin Feb 06, 2009 10:29 pm

uhaa dant merci am facut cu varianta ta... numai ca am folosit user in loc de id.... adica daca useru cu care ma loghez e sebyku poze se numeste sebyku_9.jpg poza a 9a .... si apropo de aici pot face o limitare de 15 poze pe user?:|

dant_71
Average Member
Mesaje: 83
Membru din: Sâm Ian 27, 2007 1:04 am

Mesajde dant_71 » Vin Feb 06, 2009 11:03 pm

pui conditia ca $nrmaxpoze > 16


Cod: Selectaţi tot

if ($nrpoza > 16){
   $numepozaup=$_FILES['fisier']['name'];
   $numepozanew=$iduser."_".$nrpoza.".jpg";
   rename($numepozaup, $numepozanew);

   if (file_exists($numepozanew)){    //verifici daca s-a facut redenumirea
     query = "INSERT INTO `poze` (id_user, nume_poza, ordine) VALUES ('{$iduser}','{$numepozanew}', '{$nrpoza}')";
     $pozeramase=15-$nrpoza;
     echo 'Mai puteti incarca ".$pozeramase." poze";
   }
}else{
   echo 'Nu puteti incarca decat maximum 15 poze';
}

sebyku
Senior Member
Mesaje: 638
Membru din: Mar Ian 13, 2009 6:52 pm
Localitate: Suceava
Contact:

:)

Mesajde sebyku » Sâm Feb 07, 2009 12:35 am

pfff orice as face primesc mesajul Nu puteti incarca decat maximum 15 poze o sa mai incerc sa vad ce mai reusesc daca ceva revin:) noroc

dant_71
Average Member
Mesaje: 83
Membru din: Sâm Ian 27, 2007 1:04 am

Mesajde dant_71 » Sâm Feb 07, 2009 8:33 am

e greseala mea

if ($nrpoza < 16){

am gresit semnul. $nrpoza tre sa fie mai mic ca 16

e o problema cu metoda asta. presupunem ca userul a incarcat 15 poze. daca stergi, de exemplu poza 10, iti vor ramane 14 poze. functia nrmaxpoze iti va intoarce numarul de ordine 16, deoarece poza cu cel mai mare numar de ordine este 15.

In cazul asta ai 3 solutii:
1. Nu lasi userul sa stearga pozele
2. il lasi sa le stearga, dar secvential, incepand cu ultima poza (cea cu nr de ordine cel mai mare)
3. numeri pozele introduse de userul respectiv in felul urmator:


Cod: Selectaţi tot

$query_catepoze="Select * from poze where id_user='{$iduser}'";
$result_catepoze=mysql_query($query_catepoze);

$totalpoze=mysql_num_rows($result_catepoze);

if ($totalpoze < 16){
   $numepozaup=$_FILES['fisier']['name'];
   $numepozanew=$user."_".$nrpoza.".jpg";
   rename($numepozaup, $numepozanew);

   if (file_exists($numepozanew)){    //verifici daca s-a facut redenumirea
     query = "INSERT INTO `poze` (id_user, nume_poza, ordine) VALUES ('{$iduser}','{$numepozanew}', '{$nrpoza}')";
     $pozeramase=15-$nrpoza;
     echo 'Mai puteti incarca ".$pozeramase." poze";
   }
}else{
   echo 'Nu puteti incarca decat maximum 15 poze';
}

sebyku
Senior Member
Mesaje: 638
Membru din: Mar Ian 13, 2009 6:52 pm
Localitate: Suceava
Contact:

:)

Mesajde sebyku » Sâm Feb 07, 2009 12:00 pm

hmmm.... deci userul ca sa stearga o poza trebuie sa le stearga pe toate pana la poza cu numaru cutare nu?.... si ce modalitate ar mai fi adica de exemplu ceva de genu intra in administrare poza si bifeaza care vrea si o sterge pe care va vrea.... cu ce functii va trbui sa lucrez sau ceva?:|

dant_71
Average Member
Mesaje: 83
Membru din: Sâm Ian 27, 2007 1:04 am

Mesajde dant_71 » Sâm Feb 07, 2009 12:52 pm

codul pe care ti l-am scris mai sus rezolva problema. pozele nu mai trebuie sterse secvential, poti sa le stergi in ce ordine vrei.

sebyku
Senior Member
Mesaje: 638
Membru din: Mar Ian 13, 2009 6:52 pm
Localitate: Suceava
Contact:

:)

Mesajde sebyku » Mie Feb 11, 2009 4:29 pm

dant ai cumva idee de ce la numerotarea pozelor la ordine pana la 10 merge bine si orice poza incarcata dupa tot valoarea 10 ii da?:) oridine in baza de date e `ordine` char(255) default NULL,.... si pozele nu se opresc la 15:( codul arata cam asa

Cod: Selectaţi tot

<?
session_start();
require_once('config.php');
if (isset($_SESSION['iduser']))
{
 $iduser = (integer) $_SESSION['iduser'];
}
else
{
   $cerereSQL = "SELECT * FROM `utilizatori` WHERE utilizator='".htmlentities($_SESSION['user'])."';";
   $rezultat = mysql_query($cerereSQL);
   if(mysql_num_rows($rezultat) == 1)
   {
        $rand = mysql_fetch_array($rezultat);
      $iduser = $rand['id'];
      $_SESSION['iduser'] = $iduser;
     }
     else
     {
        echo  "EROARE !";
     }
 }
{
if ($_FILES["fisier"]["error"] > 0)
{
  echo "A intervenit o eroare: " . $_FILES["fisier"]["error"] . "<br />";
}
else
{
   $query_catepoze="Select * from poze where id_user='{$iduser}'";
   $result_catepoze=mysql_query($query_catepoze);

   $totalpoze=mysql_num_rows($result_catepoze);

if ($totalpoze < 16){
  $nrpoza=nrmaxpoze($iduser, "poze");
  $pozeramase=15-$nrpoza;
  $numepozaup=$_FILES['fisier']['name'];
  $numepozanew=$user."_".$nrpoza.".jpg";
  rename($numepozaup, $numepozanew);
  if (file_exists($numepozanew))  // verificam daca fisierul exista deja pe server
  {
    echo "Fisierul pe care incerci sa-l uploadezi exista deja";
  }
  else
  {
    $query = "INSERT INTO `poze` (id_user, nume_poza, ordine) VALUES ('{$iduser}','{$numepozanew}', '{$nrpoza}')";
    mysql_query($query) or die(mysql_error() . '<br />' . $query);
    move_uploaded_file($_FILES["fisier"]["tmp_name"], "vot/".$_FILES["fisier"]["name"]);  // se muta fisierul din directorul temporar al serverului in directorul final
   

     echo 'Mai puteti incarca ".$pozeramase." poze';
   }
}else{
   echo 'Nu puteti incarca decat maximum 15 poze';
}


}   
  }


?>

<?php
function nrmaxpoze($userid, $tabel)
{
   $q="select max(ordine) as nrmaxf from ".$tabel. " where id_user={$userid}";
   $r=mysql_query($q);
   $row=mysql_fetch_array($r);

   $nrf=$row['nrmaxf']+1;
   return $nrf;
}   
?>
partea de inceput unde am declarat id ca sa-mi recunoasca dupa am pus toate variabilele alea nu-mi da nici o eroare dar nah pot uploada intruna si numerotarea vine 1.2.3.4.....8.9.10.10.10.10 si tot asa...

dant_71
Average Member
Mesaje: 83
Membru din: Sâm Ian 27, 2007 1:04 am

Mesajde dant_71 » Mie Feb 11, 2009 9:11 pm

Problema e din cauza campului de tip VARCHAR in care stochezi nr de ordine. In mod normal ar trebui sa-l pui INTEGER.
In cazul caracterelor, MySQL considera ca:

maximum dintre "1", "2", "3", ... "9", "10", "11" este "9"

Daca NU POTI NICICUM sa schimbi structura tabelei si sa transformi campul ordine din VARCHAR in INTEGER, atunci trebuie sa schimbi comanda sql de extragere a valorii maxime din campul ordine:

Cod: Selectaţi tot

<?php
function nrmaxpoze($userid, $tabel)
{
   $q="select max(cast(ordine as int)) as nrmaxf from ".$tabel. " where id_user={$userid}";
   $r=mysql_query($q);
   $row=mysql_fetch_array($r);

   $nrf=$row['nrmaxf']+1;
   return $nrf;
}   
?>

sebyku
Senior Member
Mesaje: 638
Membru din: Mar Ian 13, 2009 6:52 pm
Localitate: Suceava
Contact:

:)

Mesajde sebyku » Mie Feb 11, 2009 10:09 pm

pff o mers totul perfect va multumesc foarte mult :X:X:X a si am incercat sa fac un resize la poza dar schimba doar marimea...cand o ploadeaza sa schimbe rezolutia ca daca eu pun o poza de 5mpx pe site nu o sa se vada prea frumos:D.... sa micsoreze rezolutia dar sa pastreze proportiile....k o astfel de poze are si 1 mega si... in fine eu am inteles k sar face cu tumbail sau ceva de genu....

sebyku
Senior Member
Mesaje: 638
Membru din: Mar Ian 13, 2009 6:52 pm
Localitate: Suceava
Contact:

:)

Mesajde sebyku » Joi Feb 12, 2009 12:16 pm

au baiatu k nu-i la indemana treaba asta :| am incercat cu

Cod: Selectaţi tot

// Get new sizes
list($width, $height) = getimagesize($filename);
$newwidth = $width * $percent;
$newheight = $height * $percent;

// Load
$thumb = imagecreatetruecolor($newwidth, $newheight);
$source = imagecreatefromjpeg($filename);

// Resize
imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);

// Output
imagejpeg($thumb);
tot nimic si alte variante dar trebuie sa creez un fisier tumbs sau cum?

dant_71
Average Member
Mesaje: 83
Membru din: Sâm Ian 27, 2007 1:04 am

Mesajde dant_71 » Joi Feb 12, 2009 4:33 pm

uite o functie pe care o folosesc pentru creare de thumbnails-uri:

Cod: Selectaţi tot

<?php
function creare_thumb($filename, $calethumb, $width_thumb, $height_thumb, $numepozathumb)
{

// Content type
header('Content-type: image/jpeg');

// ia dimensiunile pozei originale
list($width_orig, $height_orig) = getimagesize($filename);

//calculeaza ratia dintre latime si inaltime
$ratio_orig = $width_orig/$height_orig;

//calculeaza latimea si inaltimea thumb-ului pastrand ratia dimensiunilor originale
if ($width_thumb/$height_thumb > $ratio_orig) {
   $width_thumb = $height_thumb*$ratio_orig;
} else {
   $height_thumb = $width_thumb/$ratio_orig;
}

// Resample
$image_p = imagecreatetruecolor($width_thumb, $height_thumb);
$image = imagecreatefromjpeg($filename);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width_thumb, $height_thumb, $width_orig, $height_orig);

$numethumb=$calethumb . "/" . $numepozathumb . ".jpg";
// Output
imagejpeg($image_p, $numethumb, 100);
}
?>


iti creaza un thumbnail de ce dimensiune vrei


Înapoi la “Cod PHP”

Cine este conectat

Utilizatori ce ce navighează pe acest forum: Niciun utilizator înregistrat și 19 vizitatori