Pagina de start a forumului Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc
Comunitatea PHP Romania
 

probleme cu header si variabile
Vezi mesajul original
Du-te la pagina 1, 2  Următoare
 
       Pagina de start a forumului Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc -> Cod PHP
Subiectul anterior :: Subiectul următor  
Autor Mesaj
40bets



Data înscrierii: 14/Aug/2008
Mesaje: 42

Trimis: Vin Sep 26, 2008 11:18 pm    Titlul subiectului: probleme cu header si variabile  

Salut , va deranjez cu o mica problema ...
Am facut un site/script ca sa vad cam ce am invatat in php pana acum(un fel de autoevaluare ca si incepator) , numai ca ceva nu pica cum vreau eu .
La logare sau la delogare , incerc cu header('Location:index.php') sa trimit userul , dupa ce el s-a logat , sa fie trimis pe pagina index.php.
Pe primul server unde am incercat mi-a mers fara probleme ( raportarea erorilor era OFF) apoi am incercat pe un alt server si primesc eroarea "Header already sent by output s.a.m.d"
A trebuit sa inlocuiesc header('Location:index.php') cu un link pe care userul trebuie sa apese la logare cat si la delogare si nu imi prea convine .
Nu pot posta codul sursa deoarece este mult prea mare , voi posta link catre el cat si linkul sitului , nu este reclama , doar ceva de test , va rog sa tratati ca atare :)

Url site : LINK
Url sursa: LINK to SOURCE

Mersi in avans
Sus  
Birkoff



Data înscrierii: 18/Mar/2004
Mesaje: 2607
Locație: Bucuresti

Trimis: Vin Sep 26, 2008 11:56 pm    Titlul subiectului:  

citeste despre ob_start() si ob_flush() si asa iti rezolvi problema ta...

alta varianta ar fi sa dai in loc de echo location blabla sa dai echo la un meta refresh catre pagina dorita...
Sus  
40bets



Data înscrierii: 14/Aug/2008
Mesaje: 42

Trimis: Sâm Sep 27, 2008 12:11 am    Titlul subiectului:  

Oke , partea cu <? ob_start("ob_gzhandler"); ?> am rezolvat-o(cred) .
Din cate am vazut primesc si ceva erori la functia de search , semn ca nici hostul nu e cel mai bun .
Partea "alta varianta ar fi sa dai in loc de echo location blabla sa dai echo la un meta refresh catre pagina dorita..." nu prea am inteles-o , dar voi cauta pe net sa vad ce gasesc in privinta asta (NU CA NU AS FII FACUT-O PANA ACUM , BUT WHO KNOWS)
Sus  
Birkoff



Data înscrierii: 18/Mar/2004
Mesaje: 2607
Locație: Bucuresti

Trimis: Sâm Sep 27, 2008 12:22 am    Titlul subiectului:  

1. eu ma gandeam sa pui la inceputul pagini ob_start(); apoi codul tau si la sfarsitul pagini ob_flush(); si asa se trimiteau headerele inainte si dupa aia celelalte date, indiferent unde le aveai in cod...
2. la varianta 2 e simplu

echo '<meta http-equiv="refresh" content="0;URL=index.php" />';

3. in ce priveste urmatoarea ta problema cea cu searhul, daca ne spui ce erori apar probabil ca te lamurim si cu alea...

oricum incearca sa lucrezi cu error_reporting(E_ALL); ca sa nu ai probleme nici cu codul nici cu serverul...
Sus  
40bets



Data înscrierii: 14/Aug/2008
Mesaje: 42

Trimis: Sâm Sep 27, 2008 2:56 am    Titlul subiectului:  

Bun , deci , la punctul 1 este rezolvat
Punctul 2 deasemenea , inteles si rezolvat
Punctul 3:
error_reporting(E_ALL);
ini_set("display_errors", 1);

Vad erorile , totul este perfect , stiu unde sa fac modificarile NUMAI ca :
Notice: Undefined index: order in /home/site/public_html/NEW/index.php on line 33
Linia 33: $order= $_POST['order'];

Bineinteles , solutii ar fii , ca : @$order= $_POST['order']; sau sa trec direct $_POST['order']; (desi nu vreau asa )
Sau dupa ce vad erorile , sa si rectific ce e de facut sa pun :
error_reporting(0); sa nu-mi mai afiseze acele warninguri .

Dar , ma intereseaza in special , partea Notice: Undefined index: order in /home/site/public_html/NEW/index.php on line 33
Cum fac sa dispara acest warning , cum am spus mai sus prin plasarea lui "@"in fata sau exista alta metoda ?

Ms.
Sus  
Birkoff



Data înscrierii: 18/Mar/2004
Mesaje: 2607
Locație: Bucuresti

Trimis: Sâm Sep 27, 2008 3:06 am    Titlul subiectului:  

$order = isset($_POST['order']) ? $_POST['order'] : NULL;

adica variabila $order ia valoarea lui post order daca exista daca nu exista atunci ia valoarea NULL
Sus  
40bets



Data înscrierii: 14/Aug/2008
Mesaje: 42

Trimis: Sâm Sep 27, 2008 3:18 am    Titlul subiectului:  

Perfect , mersi , asta era :)
Legat de eroarea de la search ca uitasem de ea ...

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) in /home/www/teste-php.freehostia.com/index.php on line 545
Sus  
Birkoff



Data înscrierii: 18/Mar/2004
Mesaje: 2607
Locație: Bucuresti

Trimis: Sâm Sep 27, 2008 11:43 am    Titlul subiectului:  

Eroarea asta nu am mai intalnit-o, zice ceva ca nu se poate conecta la baza de date prin socket...
ce e la linia 545 in index.php?
daca este functia mysql_real_escape_string() asigura-te ca inainte de ea ai deschis conexiunea la baza de date.
Sus  
40bets



Data înscrierii: 14/Aug/2008
Mesaje: 42

Trimis: Sâm Sep 27, 2008 12:46 pm    Titlul subiectului:  

Asta era , la linia 545 aveam :
$where = $_POST['where'];
$term=mysql_real_escape_string($term);
$term = strtoupper($term);
$term = strip_tags($term);
$term = trim ($term);

Am inlocuit cu :

db_connect();
$where = isset($_POST['where']) ? $_POST['where']:NULL;
$term = isset($_POST['term']) ? $_POST['term'] : NULL;
$term=mysql_real_escape_string($term);
$term = strtoupper($term);
$term = strip_tags($term);
$term = trim ($term);

Si am scapat de acea eroare .
S-a dovedit ca declararea variabilelor in genul $where = isset($_POST['where']) ? $_POST['where']:NULL; este salvatoare , si asta este modul corect de a declara variabile din forms .

Deci , nu pot sa zic decat mersi , nu am decat vro 4 luni de experienta in php deci mai am multe de invatat :)
Sus  
Birkoff



Data înscrierii: 18/Mar/2004
Mesaje: 2607
Locație: Bucuresti

Trimis: Sâm Sep 27, 2008 2:11 pm    Titlul subiectului:  

ar mai trebuie sa verifici inainte sa faci interogarile in bd daca variabilele respective au valori, iar daca sunt nule sa nu faci interogarile... sau depinde cum ai tu pe acolo...

o interogare de genul
SELECT * FROM tabel WHERE camp = 'NULL'

iti va da cu totul alt rezultat decat

SELECT * FROM tabel WHERE camp = 'valoare'

deci sa verifici data $term sau $where sau ce mai ai tu acolo au datele care iti trebuie tie la interogare inainte sa faci interogarea...

oricum poti da un echo la interogare ca sa vezi ce anume se cere de la baza de date...
Sus  
40bets



Data înscrierii: 14/Aug/2008
Mesaje: 42

Trimis: Sâm Sep 27, 2008 2:39 pm    Titlul subiectului:  

Cazul search este asa :
Cod:

case 'Search' :
                          $term = isset($_POST['term']) ? $_POST['term'] : NULL;
                          if(!isset($term)){
                          echo ' <table width="100%" border="0">
                                 <form name="search" action="" method="POST">
                                 <tr>
                                 <td align="center" style="color:ORANGE">Search:</td>
                                 <td align="center"><input type="text" name="term" style="width:200px"></td>
                                 <td align="center"><select name="where">
                                                    <option value="articles">In articles</option>
                                                    <option value="comments">In comments</option>
                                                    </select></td>
                                 <td align="center"><input type="submit" value="Search in site"></td>
                                 </tr>
                                 </form>
                                 </table>';
                           }else{db_connect();
                                 $where = isset($_POST['where']) ? $_POST['where']:NULL;
                                 $term=mysql_real_escape_string($term);
                                 $term = strtoupper($term);
                                 $term = strip_tags($term);
                                 $term = trim ($term);
                                 if(strlen($term) < 3){echo 'You need to pass at least 3 chars in the search form<br />
                                                              Please try again';
                                                        }
                                 else{db_connect();
                                      $sql = 'SELECT * FROM '.$where.' WHERE content LIKE "%'.$term.'%"';
                                      $result = mysql_query($sql);
                                      echo '<p>You have searched for <font color="ORANGE">'.$term.'</font> in '.$where.'</p>';
                                      $condition = mysql_num_rows($result);
                                      if($condition == 0 ){echo 'Sorry, but we can not find an entry to match your query';}else{

                                      while($row = mysql_fetch_array($result)){$n = 15;
                                      if($where == 'articles'){
                                      echo '<p><a style="color:ORANGE" href="index.php?act=Articles&art='.$row['id'].'">'.$row['name'].'</a></p>';
                                                               }elseif($where == 'comments'){
                                      echo '<p><a style="color:ORANGE" href="index.php?act=Articles&art='.$row['article_id'].'">'.substr($row['content'],0,$n).'...</a></p>';
                                                                     }
                                                                       }
                                        }
                                      }
                                 }
                          break;   
       


deci , daca individul nu scrie nimic in form , il va avertiza ca trebuie sa scrie cel putin 3 caractere , ma rog , se intelege de mai sus care este ideea .

Adica , ma refer la faptul ca , variabila ce retine ceea ce cauta individul , nu va ajunge in baza de date daca este goala , ci doar daca are o anume valoare , valoare ce trebuie sa fie mai mare decat 3 caractere .Iar in cazul in care are peste 3 caractere , va trece prin cateva filtrari inainte de a ajunge in baza de date pentru e evita eventuale gauri in query ..

Nu este de ajuns ?
Sus  
Birkoff



Data înscrierii: 18/Mar/2004
Mesaje: 2607
Locație: Bucuresti

Trimis: Sâm Sep 27, 2008 2:50 pm    Titlul subiectului:  

am si vazut o eroare la codul tau

$term = isset($_POST['term']) ? $_POST['term'] : NULL;
if(!isset($term)){

pai de ce mai faci if (!isset term din moment ce l-ai setat o linie mai sus?
corect ar fi
if(!empty(trim($term))) {...

(tradus adica daca variabila $term nu este goala sau NULL)
trim se foloseste ca sa scoti eventualele spatii (poate ca a pus in campul respectiv 5 spatii goale si atunci cand dai trim le scoate pe toate)

a doua gresala este la

$sql = 'SELECT * FROM '.$where.' WHERE content LIKE "%'.$term.'%"';

$where ala poate contine o valoare, un spatiu sau NULL deci verifica-l inainte sa aiba cel putin x caractere alfanumerice (ceva gen if (eregi('^[a-zA-Z0-9]{3,30}$', $where) { faci selectu } else { nu e where }

de asemenea ai uitat la $where sa il bagi in mysql_real_escape_string (doar il folosesti in interogare nu?)

a treia problema este la validarea codulul html

index.php?act=Articles&art ...

pe unele servere va merge dar pe cele mai multe nu (depinde cum e sestat php.ini...)

recomandarea ar fi

index.php?act=Articles&amp;art

adica sa inlocuiesti & cu &amp;
Sus  
40bets



Data înscrierii: 14/Aug/2008
Mesaje: 42

Trimis: Sâm Sep 27, 2008 3:00 pm    Titlul subiectului:  

Partea acea de cod cu :
if(!isset($term)){
ramasese de cand declarasem variabile ca si
$term = $_POST['term'] ;
nu ca
$term = isset($_POST['term']) ? $_POST['term'] : NULL;
De aceea nu am mai modificat ...
Citat:
de asemenea ai uitat la $where sa il bagi in mysql_real_escape_string (doar il folosesti in interogare nu?)
pai $where , poate lua valoarea articles si comments atat , de ce sa il mai filtrez ? atat timp cat valoarea variabilei este luata dintr-un form cu <select></select> ?

DECI , acel $where nu va fii niciodata NULL sau GOL , va avea valoarea default articles , iar in functie de selectia individului , va lua si valoarea comments , dar decat atat ...
Sus  
Birkoff



Data înscrierii: 18/Mar/2004
Mesaje: 2607
Locație: Bucuresti

Trimis: Sâm Sep 27, 2008 3:05 pm    Titlul subiectului:  

40bets a scris: pai $where , poate lua valoarea articles si comments atat , de ce sa il mai filtrez ? atat timp cat valoarea variabilei este luata dintr-un form cu <select></select> ?

DECI , acel $where nu va fii niciodata NULL sau GOL , va avea valoarea default articles , iar in functie de selectia individului , va lua si valoarea comments , dar decat atat ...

esti tu asa sigur ca poate lua doar cele 2 valori?
daca eu fac un form identic cu al tau dar la action trec calea catre scriptul de pe serverul tau si in campul ce tine de $where bag ceva de genul
'; DELETE * FROM tabel;' si dau submit si datele ajunc la scriptul tau ce crezi ca se va intampla?
Sus  
40bets



Data înscrierii: 14/Aug/2008
Mesaje: 42

Trimis: Sâm Sep 27, 2008 3:12 pm    Titlul subiectului:  

am priceput ideea , m-am grabit un pic cu logica aici si am gresit .
vrei sa-mi explici un pic partea aceasta : eregi('^[a-zA-Z0-9]{3,30}$',$where)
?
Inteleg ca daca $where contine caractere de la a la z si de la A la Z si cifre de la 0 la 9 dar ce inseamna acel{3,30}?
L.E:am inteles acum , trebuie sa contina intre 3 si 30 de caractere
Sus  
PHPRomania Bot
Bot Member


Data înscrierii: 27/Dec/2007
Mesaje: 1
Locaţie: Server Google
Trimis: Mie Dec 26, 2007 7:01 pm   Titlul subiectului: Ad  

Sus  
 
       Pagina de start a forumului Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc -> Cod PHP Du-te la pagina 1, 2  Următoare
Pagina 1 din 2


Powered by phpBB 2.0.22 © 2001, 2002 phpBB Group
Varianta în limba română: Romanian phpBB online community