ugrás a tartalomhoz

PHP adatbázisból adat sztringgel illesztése..

zs0le52 · 2011. Már. 23. (Sze), 14.51
Sziasztok!

Ezzel a gonddal küszködök, nem nagyon jutok vele előre!

Adatbázisban különböző táblákból szedek ki azonosítókat, azokat "," - vel illesztem össze. Tehát ilyen alakú adatokat kapok: "1,1,2,1" stb..

Aztán van egy tábla, amiben az egyik mezőben épp ilyen adatok vannak, ezekre és még névre szűrnék.. de nem nagyon akarja a hasonlóságot sem felfedezni..

Már konvertáltam (string)-gel a kinyert adatot stb.. de nem ok.

Ha beégetem az SQL select-be mondjuk az "1,1,7" értéket, akkor jól szűri a rekordokat, de ha a lekért adatokból összeillesztett változót adom át neki, nem működik.
Névre imput-ból elkért adattal szűrök, az is jól működik!

Végül már a konkrétan "1,1,7"-re beállított értékű változót hasonlítom az "1,1,7" illesztett kulcsértékekkel, de nem látja egyezőnek..

Biztosan nagy zagyvaságnak tűnik..
Na, itt a kód:

if($_POST['nev_elso']!=0){
            if($_POST['masodik_szint']!=0){
                if($_POST['harmadik_szint']!=0){
                   
                    $dolgozo_hely = $_POST['nev_elso'].",".$_POST['masodik_szint'].",".$_POST['harmadik_szint'];            
                }
                else $dolgozo_hely = $_POST['nev_elso'].",".$_POST['masodik_szint'];            
            }
            else $dolgozo_hely = $_POST['nev_elso'];            
        }
        else $dolgozo_hely = "";
        trim((string)$dolgozo_hely);
       
$query = "SELECT * FROM  dolgozo WHERE nev LIKE '$nev_gyors%' AND kod LIKE $dolgozo_hely%'";


Nem tudom, mennyire látható így át.. ha kell, beillesztem az egész kódsort!

Köszönöm előre is!
 
1

A $query-ben biztos, hogy

Totti 1986 · 2011. Már. 23. (Sze), 15.04
A $query-ben biztos, hogy rosszak az idézőjelek, mert legalább 1 hiányzik.
Az ifeid szörnyűek, ami az else ágakat illeti, legalábbis formailag.

Tartalmilag én ott látom a hibát, hogy a $nev_gyors változódnak nincs értéke, így AND kapcsolattal olyan sorokat fogsz megkapni, amiben a nev mező üres.

Ha mégsem az, csak nem másoltad be a kódnak azt a részét, akkor próbáld ilyen select-tel:
  1. $query = 'SELECT * FROM dolgozo WHERE nev LIKE "'.$nev_gyors.'%" AND kod LIKE "'.$dolgozo_hely.'%"';  
2

Remélem gondoltál arra, hogy

kuka · 2011. Már. 23. (Sze), 15.06
Remélem gondoltál arra, hogy mi lesz ha valaki az '1\'; drop table dolgozo; --' értéket küldi el a nev_elso paraméterben.
5

Igen, remélem a

zs0le52 · 2011. Már. 23. (Sze), 15.16
Igen, remélem a

htmlspecialchars($_POST['fname'])

megoldás a problémára!

Egyébként köszönöm, nagyon gyorsak vagytok :-)
6

Nem

Poetro · 2011. Már. 23. (Sze), 15.26
Nem megoldása a problémára, arra van a mysql_real_escape_string. A htmlspecialchars teljesen mást csinál, és máskor kell használni. Mert más karaktereket és máshogyan kódol.
8

Ja, most látom hogy itt is

zs0le52 · 2011. Már. 23. (Sze), 15.51
Ja, most látom hogy itt is írtad, még csak most vettem észre!
Köszönöm még egyszer!
3

Ja, itt a dolgozo

zs0le52 · 2011. Már. 23. (Sze), 15.11
Ja, itt a dolgozo tábla:

dolgozo_id nev tel kod email
1 Szabó Ferenc 2245 1,1,,2 szabofe##kukac##gmail.hu
2 Fekete Péter 1360 1,2,12 feketep##kukac##josa.hu
3 Szabó Péter 2325 1,1,1,1 petersz##kukac##yahoo.com
4 Jósa Péter 4534 1,1 josa##kukac##kod.ho


Itt pedig a form:
  1. <form action="index5.php" method="post" name="adatlapform">  
  2.      Név: <input type="text" name="fname" value="<?php print htmlspecialchars($_POST['fname']) ?>" />          
  3.      <select name="nev_elso" onchange="javascript:document.adatlapform.submit();">  
  4.      <option value="0">- Kérem válasszon az alábbi Tagkórházak közül -</option>  
  5.      <?php   
  6.        
  7.      
  8.          while ($row_elso_szint = mysql_fetch_array($result_elso_szint)) {  
  9.                
  10.              ?>  
  11.                  <option value="  
  12.                  <?php print $row_elso_szint['id'];?>"  
  13.                  <?php if($_POST['nev_elso'] == $row_elso_szint['id']) : print 'selected'endif; ?>>  
  14.                  <?php print $row_elso_szint['nev'];?></option>                  
  15.              <?       
  16.          }  
  17.      ?>  
  18.   
  19.       
  20.      </select>   
  21.      <select name="masodik_szint" onchange="javascript:document.adatlapform.submit();">  
  22.      <option value="0">- Kérem válasszon az alábbi Igazgatóságok közül -</option>  
  23.      <?php   
  24.          while ($row_masodik_szint = mysql_fetch_array($result_masodik_szint)) {  
  25.                
  26.              ?>  
  27.                  <option value="<?php print $row_masodik_szint['id'];?>"   
  28.                  <?php if($_POST['masodik_szint'] == $row_masodik_szint['id']) : print 'selected'endif; ?>>  
  29.                  <?php print $row_masodik_szint['nev'];?></option>  
  30.                
  31.              <?  
  32.          }  
  33.      ?>  
  34.        
  35.        
  36.      </select>   
  37.      <select name="harmadik_szint" onchange="javascript:document.adatlapform.submit();">  
  38.      <option value="0">- Kérem válasszon az alábbi Szervezetek közül -</option>  
  39.      <?php   
  40.          while ($row_harmadik_szint = mysql_fetch_array($result_harmadik_szint)) {  
  41.   
  42.             ?>  
  43.                  <option value="<?php print $row_harmadik_szint['id'];?>"   
  44.                  <?php if($_POST['harmadik_szint'] == $row_harmadik_szint['id']) : print 'selected'endif; ?>>  
  45.                  <?php print $row_harmadik_szint['nev'];?></option>  
  46.                
  47.              <?  
  48.          }  
  49.      ?>  
  50.        
  51.       
  52.      </select>   
  53.          <input type="submit" />  
  54.  </form>  
4

Másképp

Poetro · 2011. Már. 23. (Sze), 15.15
  1. $szintek = array();  
  2. foreach(array('nev_elso''masodik_szint''harmadik_szint'as $szint) {  
  3.   if (!emptyempty($_POST[$szint])) {  
  4.     $szintek[] = $_POST[$szint];  
  5.   }  
  6.   else {  
  7.     break;  
  8.   }  
  9. }  
  10. $dolgozo_hely = mysql_real_escape_string(  
  11.   implode(array_map('trim'$szintek), ',')  
  12. );  
  13. $query = "SELECT * FROM dolgozo   
  14.   WHERE nev LIKE '$nev_gyors%' AND kod LIKE '$dolgozo_hely%'";  
Az nem teljesen érthető, miért így van eltárolva az adat, de ez a probléma megoldását tekintve mellékes. Ezek után nézd meg mit tartalmaz a $query, valamint futtasd le azt a query-t mondjuk MySQL konzolban, vagy phpMyAdmin-ban. Amennyiben nem MySQL-t használsz, akkor a kód ebben a formában valószínűleg nem fog működni, de nem írtad, milyen adatbázist használsz.
Megj: az emptyempty még mindig csak azt jelenti, hogy empty.
7

Phpmyadminnal lettek a táblák

zs0le52 · 2011. Már. 23. (Sze), 15.50
Phpmyadminnal lettek a táblák összerakva.
Gondoltam már a karakterkódolásból adódó nemegyezésre. Szal megírtam a selectet a phpmyadmin felületén, és azt másoltam be a php kódba.. de az sem oldotta meg..

Tyú a kutya fáját, működik! :-)

Nagyon szépen köszönöm!

Soha nem használtam még a
mysql_real_escape_string(implode(array_map('trim', $szintek), ',') függvényeket, meglesem a manualban hogy pontosan mit is csinálnak!

Köszönöm még egyszer!! :-)