[php / mysql] zoeken in kolom

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • codeweb
  • Registratie: Juni 2002
  • Laatst online: 17-09 16:36
ik krijg via een form de waarde $o[01] tot $o[40] binnen

nu zijn een aantal daarvan leeg(het waren checkboxen)
en daarmee wil ik een query uitvoeren dmv regexp :)

in een invoer van de tabel extra staan deze gegevens:
o01,
o02,
o04,
o05,
o08,
o11,
o15,
o16,
o17,
o18,
o19,
o20,
o21,
o30,
o41,

nu probeerde ik met onderstaande queries iets te krijgen:
PHP:
1
select * from hosting where extra regexp '$o[01]\n$o[02] enz..'

of
PHP:
1
select * from hosting where extra regexp '$o[01],$o[02] enz..'

of
PHP:
1
select * from hosting where extra regexp '$o[01]','$o[02] enz..'

of
PHP:
1
select * from hosting where extra in ('$o')

of
PHP:
1
select * from hosting where extra in ('".join("','", $o)."')


De 1e 4 geven 0 rows terug, de laatste geeft de volgende error:
code:
1
Warning: Bad arguments to join() in d:\phpdev\www\webhosting\pages\search.php on line 371

weten jullie hoe k dit beter aan kan pakken?

Acties:
  • 0 Henk 'm!

  • ThaDaNo
  • Registratie: Mei 2002
  • Laatst online: 05-04-2023
offtopic:
Hee Robin, jij bent een crossposter over meerdere fora :P

Acties:
  • 0 Henk 'm!

  • martinvw
  • Registratie: Februari 2002
  • Laatst online: 20-08 20:35
0 returnen betekent, een kleinne fout, een foutmelding betekent een grote fout*

je doet echt iets heel vaags, en aan de source highlightin te zien is het laatste ding heel fout :? Nadere bestudering geeft dat de fout komt doordat je gewoon letterlijkt gecopy paste maar de accolades niet mee gedaan heb.

*als hij wel iets hoorde te retouren

zo kloppen de accolades van de laatste:
PHP:
1
2
$tussenhaakjes = join("', '", $o);
$qry = "select * from hosting where extra in ('".$tussenhaakjes."')";

[ Voor 106% gewijzigd door martinvw op 05-12-2002 18:19 . Reden: het kan aan mij liggen ]


Acties:
  • 0 Henk 'm!

  • codeweb
  • Registratie: Juni 2002
  • Laatst online: 17-09 16:36
met die laatste krijg ik nog steeds de error:
Warning: Bad arguments to join() in d:\phpdev\www\webhosting\pages\search.php on line 371
en die regel is die van $tussenhaakjes

Acties:
  • 0 Henk 'm!

  • martinvw
  • Registratie: Februari 2002
  • Laatst online: 20-08 20:35
bestaat de var $o wel :?

Want bad arguments betekent dat een van de argumenten slecht is.

doe print_r($o)

anders zul je wschijnlijk $_POST['o'] moeten gebruiken.

dit werkt iig wel:
PHP:
1
2
3
$o = array("y","z","f","g");
$tussenhaakjes = join("', '", $o); 
$qry = "SELECT * FROM hosting WHERE extra IN ('".$tussenhaakjes."')";


Die tijdelijk var kan je ook ontwijken door goed quotes te escapen.

[ Voor 162% gewijzigd door martinvw op 05-12-2002 18:53 ]


Acties:
  • 0 Henk 'm!

  • codeweb
  • Registratie: Juni 2002
  • Laatst online: 17-09 16:36
die $o krijg ik via een functie doorverwezen, en daarvoor is inderdaad $_POST['o'] gebruikt

Acties:
  • 0 Henk 'm!

  • martinvw
  • Registratie: Februari 2002
  • Laatst online: 20-08 20:35
codeweb schreef op 05 December 2002 @ 21:25:
die $o krijg ik via een functie doorverwezen, en daarvoor is inderdaad $_POST['o'] gebruikt
Maar die $o bestaat niet of is geen array tenminste dat sugereerd die foutmelding!

Dus doe eens print_r($o)

Als daar niks uitkomt dan is tie echt leeg hoor.

Acties:
  • 0 Henk 'm!

  • codeweb
  • Registratie: Juni 2002
  • Laatst online: 17-09 16:36
krijg nu geen errors meer, en als ik print_r($o) doe zie ik dit:

Array ( [01] => o01 [02] => o02 )

en nu krijg ik 0 rows terug met de query:

$tussenhaakjes = join("', '", $o);
select * from hosting where extra in ('".$tussenhaakjes."')

Acties:
  • 0 Henk 'm!

Verwijderd

codeweb schreef op 06 december 2002 @ 15:00:
krijg nu geen errors meer, en als ik print_r($o) doe zie ik dit:

Array ( [01] => o01 [02] => o02 )

en nu krijg ik 0 rows terug met de query:

$tussenhaakjes = join("', '", $o);
select * from hosting where extra in ('".$tussenhaakjes."')
gek he, dat levert op:

select * from hosting where extra in ('o01,o02')

print je sql query eens uit dan zie je tenminste wat je doet!

je ze dus per array element quoten :+

Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Verwijderd schreef op 06 december 2002 @ 15:13:
[...]


gek he, dat levert op:

select * from hosting where extra in ('o01,o02')

print je sql query eens uit dan zie je tenminste wat je doet!

je ze dus per array element quoten :+

Beter kijken ;)
Dat levert als het goed is gewoon 'o01', 'o... etc op. :)

Acties:
  • 0 Henk 'm!

  • codeweb
  • Registratie: Juni 2002
  • Laatst online: 17-09 16:36
k krijg idd select * from hosting where extra in ('o01', 'o02')

heb net ff op mysql.com op de functie in of in() gezocht, maar niks kunnen vinden. Is er misschien een goede site waar ik dit zou kunnen lezen?

Acties:
  • 0 Henk 'm!

Verwijderd

ACM schreef op 06 december 2002 @ 15:20:

[...]

Beter kijken ;)
Dat levert als het goed is gewoon 'o01', 'o... etc op. :)
jep idd sorry niet goed gekeken :o

dan zou het dus moeten werken :)

in je voorbeeld staan allemaal , komma's, is dat voor het voorbeeld om aan te geven dat er volgende waarde komt of staan die ook zo in je db?

Acties:
  • 0 Henk 'm!

  • codeweb
  • Registratie: Juni 2002
  • Laatst online: 17-09 16:36
dat staat ook zo in de db, om een beetje overzicht te houden :)

Acties:
  • 0 Henk 'm!

Verwijderd

codeweb schreef op 06 december 2002 @ 15:27:
dat staat ook zo in de db, om een beetje overzicht te houden :)
dus er staan nog komma's achter de waardes in de db? moet je die dan ook niet ff in je select meenemen? :9

[ Voor 2% gewijzigd door Verwijderd op 06-12-2002 15:34 . Reden: afgezien van dat het misschien onzinnige opslag is in je db ]


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Beetje vreemde reden trouwens om het zo in je db op te slaan...
Als je graag een komma bij het overzicht wilt bij het eruit trekken doe je toch gewoon zoiets:
select ... concat(veldnaam, ',') from ...

Acties:
  • 0 Henk 'm!

  • codeweb
  • Registratie: Juni 2002
  • Laatst online: 17-09 16:36
als ik bij de checkboxen op de pagina ervoor overal een , erachter zet, krijg ik nog steeds geen resultaten:

select * from hosting where extra in ('o01,')

Acties:
  • 0 Henk 'm!

  • codeweb
  • Registratie: Juni 2002
  • Laatst online: 17-09 16:36
ACM: maar op die manier kan ik er toch niet inzoeken? de bezoeker kan een aantal checkboxen aanvinken(kan er 1 zijn, kunnen er 30 zijn). Maar dmv concat kan ik er toch niet in "zoeken"?

[ Voor 6% gewijzigd door codeweb op 06-12-2002 15:43 ]


Acties:
  • 0 Henk 'm!

Verwijderd

tuurlijk kan je erin zoeken :)

maar ik weet niet wat jij doet maar:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
mysql> create table test (
    -> extra char(4) not null
    -> );
Query OK, 0 rows affected (0.01 sec)

mysql> insert into test (extra) values ('o01,'),('o02,');
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from test where extra in ('o01,');
+-------+
| extra |
+-------+
| o01,  |
+-------+
1 row in set (0.00 sec)

mysql> select * from test where extra in ('o02,');
+-------+
| extra |
+-------+
| o02,  |
+-------+
1 row in set (0.00 sec)

werkt gewoon.....

Acties:
  • 0 Henk 'm!

  • codeweb
  • Registratie: Juni 2002
  • Laatst online: 17-09 16:36
jij hebt per "extra" een aparte rij: dat is bij mij niet het geval. Zal wel ff wat dumps geven:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
CREATE TABLE hosting (
  id int(10) NOT NULL auto_increment,
  naam varchar(255) NOT NULL default '',
  ruimte varchar(255) NOT NULL default '0',
  dataverkeer varchar(255) NOT NULL default '0',
  installatiekosten varchar(255) NOT NULL default '',
  minimum_contractduur varchar(255) NOT NULL default '',
  emails int(10) NOT NULL default '0',
  email_ruimte varchar(255) NOT NULL default '',
  prijs decimal(10,0) NOT NULL default '0',
  domein_gratis tinyint(1) NOT NULL default '0',
  stemmen int(10) NOT NULL default '0',
  punten int(10) NOT NULL default '0',
  website varchar(255) NOT NULL default '',
  platform varchar(255) NOT NULL default '',
  webserver varchar(255) NOT NULL default '',
  land varchar(255) NOT NULL default '',
  extra text NOT NULL,
  PRIMARY KEY  (id)
) TYPE=MyISAM;

code:
1
2
INSERT INTO hosting VALUES (1, 'ik', '50', '15', '', '', 50, '25', '18', 0, 0, 
0, 'http://www.ik.nl', 'Linux', 'Apache', 'ne', 'o01,o02,o05');


misschien dat het zo duidelijker word, ik heb dan de checkbox o01 & o02 op de pagina ervoor aangeklikt

[ Voor 15% gewijzigd door codeweb op 06-12-2002 15:50 ]


Acties:
  • 0 Henk 'm!

Verwijderd

ow duhhhhhhhhhhhhhhhh

dat kun je niet goed door een select terughalen en zoeken. pas je db model maar aan :)

je kunt wel like gebruiken, maar haal je niet het resultaat wat je wilt hebben denk ik

[ Voor 82% gewijzigd door Verwijderd op 06-12-2002 15:52 ]


Acties:
  • 0 Henk 'm!

  • codeweb
  • Registratie: Juni 2002
  • Laatst online: 17-09 16:36
ok, dan zal ik mn database wel aanpassen

jammer dat het niet kan :P

toch iedereen bedankt voor zijn of haar hulp

[ Voor 26% gewijzigd door codeweb op 06-12-2002 15:56 ]

Pagina: 1