Problema de logica, de ce nu merge ?
Moderatori: Zamolxe, Moderatori
-
SaftencuAdrian
- PHPRomania Supporter
- Mesaje: 8
- Membru din: Vin Mar 20, 2009 2:35 pm
- Localitate: Jimbolia
- Contact:
Problema de logica, de ce nu merge ?
salut am o problema cu un script, nu face ce vreau sa faca
am lasat descrierea si intrebarile in comenturi in script, va rog sa imi spuneti care e problema, de ce nu merge?
-------------------------------------------------
/*Ideea in mare e ca vreau sa am la sfarsit un array care sa contina cate un index pentru toate randurile dintr-un query, apoi indexul valorile respective, in cazul acesta numele indexului principal e ID-ul din tabel, iar numele array-ul care contine toate indexurile astea e $tags2media
va rog cititi comenturile din script */
$connection = mysql_connect('localhost', 'user', 'parola');
mysql_select_db('db');
$query = "SELECT media_id, media_title, media_type FROM media LIMIT 0, 12";
$result = mysql_query($query);
//loop-ul care citeste fiecare rand din query
while ($row = mysql_fetch_assoc($result)) {
$tags = array();
$tags = explode(' ', $row['media_title']);
$type = $row['media_type'];
$media_id = $row['media_id'];
$media_title = $row['media_title'];
//Sterg indexul daca tagul e null ('')
foreach ($tags as $key => $tag) {
if ($tag == '') {
unset($tags[$key]);
}
}
//creez un array care are ca index ID-ul curent din query
//pentru fiecare ID gasit in query se defineste un nou index in array-ul $tags2media
$tags2media = array();
//fiecare index cu numele ID-ului curent o sa fie un array si o sa contina 3 index-uri :
//title, type si tags care contin valorile respective luate din query
$tags2media[$media_id] = array();
$tags2media[$media_id]['title'] = $media_title;
$tags2media[$media_id]['type'] = $type;
$tags2media[$media_id]['tags'] = count($tags);
}//se termina while loop-ul
//dupa ce am terminat cu while loop-ul array-ul $tags2media nu are toate indexurile
//print_r dupa while loop arata ca $tags2media are doar un index, ultimul, care contine valorile ultimului query
echo '<br><pre>';
print_r($tags2media);
echo'</pre><br>';
//nu inteleg de ce atunci cand setez pentru $tags2media un nou index nu ramane setat dupa ce termina while loop-ul
//fiecare ID din tabelul media e unic (e primary key-ul) si atunci cand setez un index cu ID-ul curent din loop ar trebui ca creeze un index nou
//astept un raspuns
------------------------
am lasat descrierea si intrebarile in comenturi in script, va rog sa imi spuneti care e problema, de ce nu merge?
-------------------------------------------------
/*Ideea in mare e ca vreau sa am la sfarsit un array care sa contina cate un index pentru toate randurile dintr-un query, apoi indexul valorile respective, in cazul acesta numele indexului principal e ID-ul din tabel, iar numele array-ul care contine toate indexurile astea e $tags2media
va rog cititi comenturile din script */
$connection = mysql_connect('localhost', 'user', 'parola');
mysql_select_db('db');
$query = "SELECT media_id, media_title, media_type FROM media LIMIT 0, 12";
$result = mysql_query($query);
//loop-ul care citeste fiecare rand din query
while ($row = mysql_fetch_assoc($result)) {
$tags = array();
$tags = explode(' ', $row['media_title']);
$type = $row['media_type'];
$media_id = $row['media_id'];
$media_title = $row['media_title'];
//Sterg indexul daca tagul e null ('')
foreach ($tags as $key => $tag) {
if ($tag == '') {
unset($tags[$key]);
}
}
//creez un array care are ca index ID-ul curent din query
//pentru fiecare ID gasit in query se defineste un nou index in array-ul $tags2media
$tags2media = array();
//fiecare index cu numele ID-ului curent o sa fie un array si o sa contina 3 index-uri :
//title, type si tags care contin valorile respective luate din query
$tags2media[$media_id] = array();
$tags2media[$media_id]['title'] = $media_title;
$tags2media[$media_id]['type'] = $type;
$tags2media[$media_id]['tags'] = count($tags);
}//se termina while loop-ul
//dupa ce am terminat cu while loop-ul array-ul $tags2media nu are toate indexurile
//print_r dupa while loop arata ca $tags2media are doar un index, ultimul, care contine valorile ultimului query
echo '<br><pre>';
print_r($tags2media);
echo'</pre><br>';
//nu inteleg de ce atunci cand setez pentru $tags2media un nou index nu ramane setat dupa ce termina while loop-ul
//fiecare ID din tabelul media e unic (e primary key-ul) si atunci cand setez un index cu ID-ul curent din loop ar trebui ca creeze un index nou
//astept un raspuns
------------------------
Pentru ca la fiecare iterare reinitializezi $tags2media = array();
Scoate-l in afara loop-ului, mai precis inainte de a incepe loop-ul.
Scoate-l in afara loop-ului, mai precis inainte de a incepe loop-ul.
I'm under construction | http://igstan.ro
-
SaftencuAdrian
- PHPRomania Supporter
- Mesaje: 8
- Membru din: Vin Mar 20, 2009 2:35 pm
- Localitate: Jimbolia
- Contact:
-
kondordv
- Junior Member
- Mesaje: 42
- Membru din: Vin Oct 05, 2007 3:09 pm
- Localitate: Timisoara
- Contact:
se intampla tuturor, dupa multe ore de lucru nu mai vezi variabilele cum trebuie, de aceea ordinea e mama programarii. Apropo, iti sugerez sa lucrezi prin debugging, ruleaza pas cu pas cand ai probleme si urmareste toate variabilele si functiile, astfel vei gasi totdeauna mai usor problema.
Succes!
P.S. am si eu o problema mica, nu gasesc o functie sau metoda prin care sa afisez o singura linie cu o variabila care se incrementeaza. Afisarea sa fie in acelasi loc aceeasi pozitie, doar variabila se modifica dupa parcurgerea iteratiei!
Succes!
P.S. am si eu o problema mica, nu gasesc o functie sau metoda prin care sa afisez o singura linie cu o variabila care se incrementeaza. Afisarea sa fie in acelasi loc aceeasi pozitie, doar variabila se modifica dupa parcurgerea iteratiei!
eu folosesc print_r si print pe care ii tin mereu, numai ca ii comentez cand nu am nevoie, iar cand vrea sa vad unde e problema, scot comentariile pe rand ca sa vad unde s-a incurcat.
Pentru o mai buna organizare, ti-as sugera ca dupa ce intri intr-o bucla, sau intr-un if ceva, sa scrii tot codul de acolo cu 4 caractere ( un tab ) mai spre dreapta. Spre exemplu:
Poate o sa apara mai multe linii, dar iti garantez ca iti va fi mult mai usor sa iti dai seama in ce bucla sau in ce bloc esti. Si in plus ai putea pune si comentarii inainte de fiecare lucru care il faci.[/code]
Pentru o mai buna organizare, ti-as sugera ca dupa ce intri intr-o bucla, sau intr-un if ceva, sa scrii tot codul de acolo cu 4 caractere ( un tab ) mai spre dreapta. Spre exemplu:
Cod: Selectaţi tot
while($row=mysql_fetch_array($result) {
explode($blabla);
implode($blabla);
$bla=$row['id'];
if($bla == $blabla) {
$blabla=bla;
$bla++
}
}
Poate o sa apara mai multe linii, dar iti garantez ca iti va fi mult mai usor sa iti dai seama in ce bucla sau in ce bloc esti. Si in plus ai putea pune si comentarii inainte de fiecare lucru care il faci.[/code]
-
kondordv
- Junior Member
- Mesaje: 42
- Membru din: Vin Oct 05, 2007 3:09 pm
- Localitate: Timisoara
- Contact:
thedark, pai asta este ordinea esentiala in programare, e bine totusi ca ai reamintit, si ca sa va dau o adevarata solutie pentru debugging, ceva ce merita, folositi programul "NuSphere PhpED" mai ales in partea de gasiri probleme puteti rula pas cu pas din taste si sa supravegheati orice variabila, sau sa depistati o bucla infinita.
Mai am o intrebare, poate este putin offtopic, dar nu intentionez sa deschid un nou thread din economie, si mai ales ca suntem in criza. Cum as putea crea un camp (field input) in html combinat poate cu php, in asa fel incat sa pot face browse (adica sa arate identic cu "<input type="file"...), dar cand dau submit sa trimit doar numele fisierului ales nu fisierul. Suna ca ceva banal, dar nu am gasit inca.
mult noroc,
Mai am o intrebare, poate este putin offtopic, dar nu intentionez sa deschid un nou thread din economie, si mai ales ca suntem in criza. Cum as putea crea un camp (field input) in html combinat poate cu php, in asa fel incat sa pot face browse (adica sa arate identic cu "<input type="file"...), dar cand dau submit sa trimit doar numele fisierului ales nu fisierul. Suna ca ceva banal, dar nu am gasit inca.
mult noroc,
-
kondordv
- Junior Member
- Mesaje: 42
- Membru din: Vin Oct 05, 2007 3:09 pm
- Localitate: Timisoara
- Contact:
hmmm, m-am gandit si la ideea ta, numa ca daca fisierul are 100M trebuie sa astept pentru incarcare fara rost, se incarca totul doar pentru ca vreau sa iau un nume de fisier folosind php. Cred ca sap putin sa combin java cu php pentru a obtine acest lucru desi mi s-ar parea mut mai simplu daca s-ar defini o functie in php, sau un nou parametru pentru input in html. E ceva atat de banal si atat de greu...
@kondordv, daca nu sunt indiscret, pot sa te intreb la ce vrei sa folosesti acel
nume de fisier?
nume de fisier?
I'm under construction | http://igstan.ro
Foloseste-te de JavaScript. Citeste atributul value al elementului input[type=file],
retine-l, intr-o variabila iar la onsubmit inlocuiste input[type=file] cu un
input[type=hidden] in care sa stochezi numele fisierului. Vezi insa ca trebuie
sa prelucrezi putin valoarea in IE6 (cel putin), pentru ca iti returneaza calea
completa catre fisier, nu doar numele propriu-zis al acestuia.
retine-l, intr-o variabila iar la onsubmit inlocuiste input[type=file] cu un
input[type=hidden] in care sa stochezi numele fisierului. Vezi insa ca trebuie
sa prelucrezi putin valoarea in IE6 (cel putin), pentru ca iti returneaza calea
completa catre fisier, nu doar numele propriu-zis al acestuia.
Cod: Selectaţi tot
<html>
<head>
<title></title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<script type="text/javascript">
window.onload = function() {
var file = document.getElementById("file");
file.onchange = function(e) {
alert(file.value);
};
}
</script>
</head>
<body>
<form action="" method="post" enctype="multipart/form-data">
<fieldset>
<legend>X</legend>
<input type="file" name="file" id="file">
</fieldset>
</form>
</body>
</html>
I'm under construction | http://igstan.ro
-
kondordv
- Junior Member
- Mesaje: 42
- Membru din: Vin Oct 05, 2007 3:09 pm
- Localitate: Timisoara
- Contact:
Am gasit si ceea ce cautam, dupa ceva sapaturi, este chiar foarte simplu.
Mai jos dau cateva detalii la cum se poate obtine cu un formular doar numele fisierului selectat cu Browse.
In primul rand in fisierul html cu forma trebuie sa lipseasca enctype, sau sa fie scris cum e mai jos:
<form action="lucru.php" method="post" ectype="multipart/form-data">
<input type="file" name="fisier_sursa" maxlength="30">
.......
</form>
Apoi cand forma este trimisa prin submit, in fisierul lucru.php trebuie sa avem banala functie de preluare:
$myfile = $_POST['fisier_sursa'];
astfel am rezolvat problema trimiterii spre script doar a numelui fisierului selectat prin explorare, folosind doar php si html. Simteam eu ca e ceva banal si ca ar fi trebuit sa existe o metoda.
Mai jos dau cateva detalii la cum se poate obtine cu un formular doar numele fisierului selectat cu Browse.
In primul rand in fisierul html cu forma trebuie sa lipseasca enctype, sau sa fie scris cum e mai jos:
<form action="lucru.php" method="post" ectype="multipart/form-data">
<input type="file" name="fisier_sursa" maxlength="30">
.......
</form>
Apoi cand forma este trimisa prin submit, in fisierul lucru.php trebuie sa avem banala functie de preluare:
$myfile = $_POST['fisier_sursa'];
astfel am rezolvat problema trimiterii spre script doar a numelui fisierului selectat prin explorare, folosind doar php si html. Simteam eu ca e ceva banal si ca ar fi trebuit sa existe o metoda.
Cine este conectat
Utilizatori ce ce navighează pe acest forum: Niciun utilizator înregistrat și 14 vizitatori
