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


   <form action="index5.php" method="post" name="adatlapform">
        Név: <input type="text" name="fname" value="<?php print htmlspecialchars($_POST['fname']) ?>" />        
        <select name="nev_elso" onchange="javascript:document.adatlapform.submit();">
        <option value="0">- Kérem válasszon az alábbi Tagkórházak közül -</option>
        <?php 
        
      
            while ($row_elso_szint = mysql_fetch_array($result_elso_szint)) {
                
                ?>
                    <option value="
                    <?php print $row_elso_szint['id'];?>"
                    <?php if($_POST['nev_elso'] == $row_elso_szint['id']) : print 'selected'; endif; ?>>
                    <?php print $row_elso_szint['nev'];?></option>                
                <?     
            }
        ?>

       
        </select> 
        <select name="masodik_szint" onchange="javascript:document.adatlapform.submit();">
        <option value="0">- Kérem válasszon az alábbi Igazgatóságok közül -</option>
        <?php 
            while ($row_masodik_szint = mysql_fetch_array($result_masodik_szint)) {
                
                ?>
                    <option value="<?php print $row_masodik_szint['id'];?>" 
                    <?php if($_POST['masodik_szint'] == $row_masodik_szint['id']) : print 'selected'; endif; ?>>
                    <?php print $row_masodik_szint['nev'];?></option>
                
                <?
            }
        ?>
        
        
        </select> 
        <select name="harmadik_szint" onchange="javascript:document.adatlapform.submit();">
        <option value="0">- Kérem válasszon az alábbi Szervezetek közül -</option>
        <?php 
            while ($row_harmadik_szint = mysql_fetch_array($result_harmadik_szint)) {

               ?>
                    <option value="<?php print $row_harmadik_szint['id'];?>" 
                    <?php if($_POST['harmadik_szint'] == $row_harmadik_szint['id']) : print 'selected'; endif; ?>>
                    <?php print $row_harmadik_szint['nev'];?></option>
                
                <?
            }
        ?>
        
       
        </select> 
            <input type="submit" />
    </form>

4

Másképp

Poetro · 2011. Már. 23. (Sze), 15.15
$szintek = array();
foreach(array('nev_elso', 'masodik_szint', 'harmadik_szint') as $szint) {
  if (!empty($_POST[$szint])) {
    $szintek[] = $_POST[$szint];
  }
  else {
    break;
  }
}
$dolgozo_hely = mysql_real_escape_string(
  implode(array_map('trim', $szintek), ',')
);
$query = "SELECT * FROM dolgozo 
  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!! :-)