Pagina 1 din 4
ordine poze... [REZOLVAT]
Scris: Mar Feb 03, 2009 2:51 pm
de sebyku
salut... am si eu o mica problema in legatura cu introducerea ordinei pozelor in baza de date... la upload poza as avea ceva de genu asta
Cod: Selectaţi tot
$query = "INSERT INTO `poze` (id_user, nume_poza, ordine) VALUES ('{$iduser}', 'nume poza', '{$ordine}'); in care id user e id de pe care se uploadeaza poza...numele pozei si ordinea...de exemplu 1 sa fie mereu poza princpiala si restul sa fie poze secundare... si afisarea o fac cu
Cod: Selectaţi tot
select * from poze where id_user = '{$iduser}' and ordine = 1 problema la mine e ca nu reusesc sa fac sa introduca ordinele in tabel 1 2 3 4 5 si asa mai departe...imi puteti da va rog o idee?
Scris: Mar Feb 03, 2009 3:09 pm
de Birkoff
pai inainte de insert ar trebui sa citesti intai din baza de date care e ultimul nr de ordine pentru acel id
SELECT * FROM tabel WHERE userid = $userid ORDER BY ordine DESC LIMIT 1
apoi vezi ce iti returneaza (ar trebui sa iti returneze nr de ordine cel mai mare sau 0 daca nu exista poze la acel id)
si apoi setezi $ordine = $row['ordine'] + 1;
si apoi faci insert-ul tau avand deja $ordine setat
:)
Scris: Mar Feb 03, 2009 3:13 pm
de sebyku
pai u nu intelegi ce vreau sa zic nu stiu cum sa fac sa apara ordinea pozelor.... cel putin nu am reusit nu stiu cum sa ma exprim mai bine...o sa ma gand ce sa arat ca sa par clar..
Scris: Mie Feb 04, 2009 6:55 pm
de keepwalking
Cel mai bine, mai introduci un camp de time datetime in db, si introduci si data (foloseste functia now() pentru introducere)
Dupa aia ordenezi mereu in ordine descrescatoare respectiva tabela, si mereu primul rezultat va fi si ultima poza introdusa, sau poti face mereu update la ordinea pozelor in functie de data.
Cod: Selectaţi tot
set @num = 0;
UPDATE `poze` SET ordine = (SELECT @num := (@num+1) FROM DUAL) ORDER BY `data` DESC
:)
Scris: Joi Feb 05, 2009 1:20 am
de sebyku
in sfarsit am mai scapat de un examen...

si sa revin la problema mea.... am incercat ceva de genu....
Cod: Selectaţi tot
<?
session_start();
require_once('config.php');
$cerereSQL = "SELECT * FROM tabel WHERE userid = $userid ORDER BY ordine DESC LIMIT 1 ";
$rezultat = mysql_query($cerereSQL);
{
if ($_FILES["fisier"]["error"] > 0)
{
echo "A intervenit o eroare: " . $_FILES["fisier"]["error"] . "<br />";
}
else
{
if (file_exists("vot/" . $_FILES["fisier"]["name"])) // 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}', 'nume poza', '{$ordine}');
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 "Succes! Poza a fost adaugata in baza de date.";
}
}
}
?> dar ceva imi scapa:|...ce am omis imi puteti zice?
Scris: Joi Feb 05, 2009 9:25 am
de keepwalking
eu nu imi dau seama de o chestie, la insertul respectiv {$ordine} ce valoare ia ?
Re: :)
Scris: Joi Feb 05, 2009 10:53 am
de Birkoff
sebyku scrie:$cerereSQL = "SELECT * FROM tabel WHERE userid = $userid ORDER BY ordine DESC LIMIT 1 ";
$rezultat = mysql_query($cerereSQL);
da, are dreptate
keepwalking tu faci query-ul de mai sus dar nu preiei si rezultatele returnate ca sa setezi valoarea lui $ordine ci mergi mai departe cu alte verificari...
Scris: Joi Feb 05, 2009 11:01 am
de keepwalking
Chestia e ca tu daca ultima poza vrei sa ia valoarea 1, tu trebuie sa modifici si id-ul celorlalte poze. oricum nu sunt convins inca de ce nu folosesti o cheia unica si primara pentru inserarea pozelor si ordonezi mereu descrescator dupa ea.
Cheia respectiva are automat increment asa ca isi va lua automat valoare de +1 la fiecare inserare.
Dupa parerea mea te complici f tare.
:)
Scris: Joi Feb 05, 2009 11:03 am
de sebyku
mda asta ziceam si mai sus si lui borkof pe celalalt forum nu stiu ce valoare sa pun sa o ia {ordine} ca nu am mai folosit adica trebuie sa le ia la rand? cand sterge cineva o poza sa se scada cu 1 sau cum?
Scris: Joi Feb 05, 2009 11:09 am
de keepwalking
Deci fi atent cum faci.
Baga o cheie unica:
Cod: Selectaţi tot
ALTER TABLE `poze` ADD COLUMN `cheie` int(11) NOT NULL AUTO_INCREMENT,
ADD PRIMARY KEY (`cheie`);
Cand bagi poza baga ceva de genu
Cod: Selectaţi tot
INSERT INTO `poze` (id_user, nume_poza, ordine) VALUES ('{$iduser}', 'nume poza', '{$ordine}', NULL);
Iar dupa fiecare poza adaugata executa query-urile astea (separat)
Cod: Selectaţi tot
set @num = 0;
UPDATE `poze` SET ordine = (SELECT @num := (@num+1) FROM DUAL) ORDER BY `cheie` DESC
[/code]
Scris: Joi Feb 05, 2009 11:16 am
de dant_71
Cod: Selectaţi tot
$nrpoza=nrmaxpoze($iduser, "poze");
$query = "INSERT INTO `poze` (id_user, nume_poza, ordine) VALUES ('{$iduser}', 'nume poza', '{$nrpoza}');
mysql_query($query) or die(mysql_error() . '<br />' . $query);
......
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;
}
Nu am verificat codul dar cred ca e ok!
:)
Scris: Joi Feb 05, 2009 3:02 pm
de sebyku
am incercat varianta ta
dant acuma si primesc
Cod: Selectaţi tot
Fatal error: Call to undefined function: nrmaxpoze() in /home/hosting/forum17/test/upload.php on line 463 ... iam adaugat functia care o cere iar apoi nu mai afiseaza nimic... uite am lasat codul cam cum ai zis u:)
Cod: Selectaţi tot
<?
session_start();
require_once('config.php');
{
if ($_FILES["fisier"]["error"] > 0)
{
echo "A intervenit o eroare: " . $_FILES["fisier"]["error"] . "<br />";
}
else
{
if (file_exists("vot/" . $_FILES["fisier"]["name"])) // verificam daca fisierul exista deja pe server
{
echo "Fisierul pe care incerci sa-l uploadezi exista deja";
}
else
{
$nrpoza=nrmaxpoze($iduser, "poze");
$query = "INSERT INTO `poze` (id_user, nume_poza, ordine) VALUES ('{$iduser}', 'nume poza', '{$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 "Succes! Poza a fost adaugata in baza de date.";
}
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;
}
}
}
}
?>
SI
keepwalking la partea ta tot primesc o eroare in legatura cu @ ala nu stiu ce nu folosesc bine... oricum mam tampit nu mai nteleg nimic o sa mai incerc diferite variante a si ziceai keepwalking k vreau sa ramana ultima mereu numar 1 deci eu incercam sa fac cum a zis birkoff adica citez
o varianta mai optima ar fi ca sa renunti la poza principala din tabelul de useri si sa tii toate pozele userilor in tabelul pentru poze, la care sa mai adaugi inca un camp pentru ordinea de afisare (1,2,3 etc unde 1 sa fie poza principala) astfel sa poata modifica ordinea daca vrea userul direct, fara sa mai uploadeze alte poze... (cumva sa ii apara toate pozele si sa aiba fiecare un link de genul, seteaza aceasta poza ca poza principala, sau cam asa ceva)
am citat cum a zis el si am zis ca pe varianta asta incerc:) noroc
Scris: Joi Feb 05, 2009 5:40 pm
de dant_71
incearca asa:
Cod: Selectaţi tot
<?php
session_start();
require_once('config.php');
{
if ($_FILES["fisier"]["error"] > 0)
{
echo "A intervenit o eroare: " . $_FILES["fisier"]["error"] . "<br />";
}
else
{
if (file_exists("vot/" . $_FILES["fisier"]["name"])) // verificam daca fisierul exista deja pe server
{
echo "Fisierul pe care incerci sa-l uploadezi exista deja";
}
else
{
$nrpoza=nrmaxpoze($iduser, "poze");
$query = "INSERT INTO `poze` (id_user, nume_poza, ordine) VALUES ('{$iduser}', 'nume poza', '{$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 "Succes! Poza a fost adaugata in baza de date.";
}
}
}
}
?>
<?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;
}
?>
ideea e sa pui functia chiar la sfarsitul scriptului. eu am verificat codul si merge.
eventual da un echo la $query sa vezi cum arata si lanseaza-l din phpmyadmin.
:)
Scris: Joi Feb 05, 2009 11:20 pm
de sebyku
merci dant mult incerc imediat apropo nu stii de ce daca dau echo la $iduser numi afiseaza nimic? doar daca dau la rand id imi afiseaza:|
:)
Scris: Joi Feb 05, 2009 11:58 pm
de sebyku
pfff man merge imi uploadeaza poza acuma am incercat numai ca in baza de date la ficare poza la ordine are cifra 1... iar la id user de fiecare data e 0... daca reusesc sa vad undei duma postez ce am rezolvat:) noroc:)
EDIT: la id user am rezolvat nu mai apare 0 apare corect cu id care ma loghez:)
EDIT: ce sandala-s merge gata dupa c am rezolvat cu id auotmat sa facut si ordinea se autoaranjeaza:X dupa id:) acu ma apuc sa fac afisarea:D