Problema de logica, de ce nu merge ?

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

SaftencuAdrian
PHPRomania Supporter
Mesaje: 8
Membru din: Vin Mar 20, 2009 2:35 pm
Localitate: Jimbolia
Contact:

Problema de logica, de ce nu merge ?

Mesajde SaftencuAdrian » Vin Mar 20, 2009 2:59 pm

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
------------------------



Avatar utilizator
Amenthes
Senior Member
Mesaje: 1370
Membru din: Lun Dec 12, 2005 8:00 am
Contact:

Mesajde Amenthes » Vin Mar 20, 2009 3:11 pm

Pentru ca la fiecare iterare reinitializezi $tags2media = array();

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:

Mesajde SaftencuAdrian » Vin Mar 20, 2009 3:21 pm

greseala de idiot, mi-e si rusine ca am postat, mersi fain

kondordv
Junior Member
Mesaje: 42
Membru din: Vin Oct 05, 2007 3:09 pm
Localitate: Timisoara
Contact:

Mesajde kondordv » Mar Mar 24, 2009 4:03 pm

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!

thedark
PHPRomania Supporter
Mesaje: 23
Membru din: Sâm Apr 29, 2006 5:52 pm
Contact:

Mesajde thedark » Mie Mar 25, 2009 1:48 pm

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:

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:

Mesajde kondordv » Mie Mar 25, 2009 1:56 pm

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,

Avatar utilizator
kleampa
Senior Member
Mesaje: 2774
Membru din: Dum Iul 10, 2005 2:12 pm
Localitate: Bucuresti
Contact:

Mesajde kleampa » Mie Mar 25, 2009 3:01 pm

$_FILES['input']['name'] dar fisierul tot va ajunge in temp chiar daca tu nu faci nimic cu el

kondordv
Junior Member
Mesaje: 42
Membru din: Vin Oct 05, 2007 3:09 pm
Localitate: Timisoara
Contact:

Mesajde kondordv » Mie Mar 25, 2009 4:00 pm

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...

Avatar utilizator
Amenthes
Senior Member
Mesaje: 1370
Membru din: Lun Dec 12, 2005 8:00 am
Contact:

Mesajde Amenthes » Mie Mar 25, 2009 4:08 pm

@kondordv, daca nu sunt indiscret, pot sa te intreb la ce vrei sa folosesti acel
nume de fisier?
I'm under construction | http://igstan.ro

kondordv
Junior Member
Mesaje: 42
Membru din: Vin Oct 05, 2007 3:09 pm
Localitate: Timisoara
Contact:

Mesajde kondordv » Mie Mar 25, 2009 5:06 pm

nici o problema, numele va fi trimis catre un script php care va genera mai multe fisiere cu diferite extensii si continut legate de numele fisierului care este selectat in functie de multi alti parametrii.

Avatar utilizator
Amenthes
Senior Member
Mesaje: 1370
Membru din: Lun Dec 12, 2005 8:00 am
Contact:

Mesajde Amenthes » Mie Mar 25, 2009 5:16 pm

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.

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:

Mesajde kondordv » Mie Mar 25, 2009 5:36 pm

DA, frumos, asa merge numa ca trebuie sa mai pun mana pe Java mai serios caci se pare ca in multe alte chestii php-ul nu face fata. Mai ales la partea de refresh display, afisarea unui contor ce ruleaza!

kondordv
Junior Member
Mesaje: 42
Membru din: Vin Oct 05, 2007 3:09 pm
Localitate: Timisoara
Contact:

Mesajde kondordv » Joi Mar 26, 2009 11:11 am

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.


Înapoi la “Cod PHP”

Cine este conectat

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