login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Meerdere vraagjes

Offline lasdesigner - 30/11/2008 17:16 (laatste wijziging 30/11/2008 17:19)
Avatar van lasdesignerPHP beginner Hé hallo!

Ik heb een aantal problemen waar ik niet helemaal uit kom.
Ik heb namelijk de volgende string:
'gelderland, overijssel, friesland,'
En dan moet de laatste komma weg.

Ik weet wel dat je substr($string, -1) kan doen om die komma te pakken, maar deze moet hij juist weghalen (er kunnen ook meer provincies zijn.)

Hoe kan ik dit doen?

Daarnaast, ik heb een zoeksysteem (met SELECT / LIKE etc) en dan komt deze query er soms uit;

SELECT * FROM kandidaten WHERE beroep LIKE '%%' OR functiegroep = OR branche = OR dienstverband = '' OR provincies LIKE '%%' OR rijbewijs = '' OR werkervaring = ''

Want je hoeft niet alles in te vullen.
Maar dan krijg ik wel deze foutmelding:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'OR branche = OR dienstverband = '' OR provincies LIKE '%' at line 9

Wat doe ik fout? mat dat '%%' niet?

Alvast bedankt.

Edit

Volgens mij heb ik het zoeksysteem sowieso fout, nu zoekt die ook op 1 ding. Maar hij moet dus, stel ik vul 2 dingen in, moet hij op die 2 dingen zoeken.
Maar vul ik er 1 in, moet die zoeken etc.

Hoe kan ik dit beter maken?

11 antwoorden

Gesponsorde links
Offline Martijn - 30/11/2008 17:26 (laatste wijziging 30/11/2008 17:49)
Avatar van Martijn Crew PHP
  1. $string="gelderland, overijssel, friesland,"
  2. $array=explode(",",$string);
  3. $string=implode(",",$array);


Volgens mij werkt dat op je eerste, niet getest

dat 2e kun je zo doen:
  1. $where="WHERE ";
  2. if(isset($functiegroep)){$where.="functiegroep='".$functiegroep."'";$or=1;}
  3. if(isset($branche)){
  4. if($or==1){$or=0;$where.=" OR "}
  5. $where.="branche='".$branche."'";}
  6. if(isset($plaats)){
  7. if($or==1){$or=0;$where.=" OR "}
  8. $where.="plaats='".$plaats."'";}
  9.  
  10. etc
  11.  
  12.  
  13. mysql_query("SELECT * FROM kandidaten ".$where) or die mysql_error());
Offline nemesiskoen - 30/11/2008 17:33 (laatste wijziging 30/11/2008 17:34)
Avatar van nemesiskoen Gouden medaille

PHP expert
substr(string, 0, -1); kapt het laatste er af. Dan moet je het resultaat opvangen in je nieuwe string:--)
Offline Martijn - 30/11/2008 17:37 (laatste wijziging 30/11/2008 17:37)
Avatar van Martijn Crew PHP maar dan loop je ook het risico dat als je dit krijgt:
gelderland, overijssel, friesland, noordholland
dat ie dus de d van noordholland eraf haald, wat dus niet de bedoeling is lijkt mij 
Offline Wim - 30/11/2008 17:58
Avatar van Wim Crew algemeen handiger is waarschijnlijk het probleem aanpakken waar de $string gemaakt wordt: in je oude code maak je een verzameling van elementen (array) en je voegt deze samen met daar tussen te tekens ", " ([komma][spatie]). PHP.net: implode

Verder gaat hij die d niet wegkrijgen waarschijnlijk, omdat er altijd een , op het einde zal staan....
Offline lasdesigner - 30/11/2008 18:27
Avatar van lasdesigner PHP beginner Dan heb ik nog een probleem,

Het komt er namelijk nu wel goed uit, wat ik wilde weten.

Maar ik heb nu een database met daarin
SET('Groningen', 'Friesland' ....)

En dan heb ik dus bijvoorbeeld erin staan;
Groningen, Friesland

Maar nu doe ik:
En dan is provincie: Friesland, Groningen
WHERE provincies LIKE '%".$provincie."%'

Maar dan vind die toch niks?
Hoe kan ik dit verbeteren?
Offline Martijn - 30/11/2008 18:31 (laatste wijziging 30/11/2008 18:35)
Avatar van Martijn Crew PHP door te zorgen dat Friesland en Groningen apart staan...

  1. $string="Friesland,Groningen";
  2. $array=explode(",",$string);
  3. $string2="";
  4.  
  5. $i=0;
  6. foreach($array as $key => $value){
  7. if($i>0 && $i<count($array)){$string2.=" OR ";}
  8. $string2.="provincies LIKE %".$value."%";
  9. $i++;
  10. }


en dan doe je
  1. SELECT * WHERE ".$string2
Offline lasdesigner - 30/11/2008 18:35 (laatste wijziging 30/11/2008 18:36)
Avatar van lasdesigner PHP beginner Ja, dat klinkt gemakkelijk hahah, maar hoe kan ik dat dan doen.

Moet ik dan iets doen als:
  1. <?php
  2. $provincieArray = explode($provincie, ',');
  3. for($i=0;$i<count($provincieArray);$i++) {
  4. $where .= " AND provincie LIKE '%".$provincieArray[$i]."%'";
  5. }
  6. ?>

of gaat dat niet werken?

edit

Ah joune ziet er idd goed uit, dankjewel voor de hulp. Ik ga het is even uittesten!
Offline Martijn - 30/11/2008 18:36
Avatar van Martijn Crew PHP mjawel, op je eerste value na 

"WHERE AND provincie LIKE" krijg je dan
Offline lasdesigner - 30/11/2008 18:51
Avatar van lasdesigner PHP beginner maar nu krijg ik bijvoorbeeld een query als:

SELECT * FROM kandidaten WHERE provincies LIKE '%Friesland%' OR provincies LIKE '%Overijssel%' OR dienstverband LIKE '%detachering%' AND branche = 21
en dan geeft die toch een resultaat terwijl ik geen enkele kandidaat heb met branche nummer 21. Wel met provincie Friesland.

Maar de query moet dus zo worden dat je krijgt:
Provincie mág (dus aangegeven, dan moet de kandidaat 1 van die provincies bevatten)
En dan branche nummer MOET goed zijn (als die is opgegeven) daarom die AND. Maar, dat werkt niet zo goed.

Want hij geeft resultaten zonder dat die deze bevat.
Offline Martijn - 30/11/2008 19:10
Avatar van Martijn Crew PHP SELECT * FROM kandidaten WHERE (provincies LIKE '%Friesland%' OR provincies LIKE '%Overijssel%' OR dienstverband LIKE '%detachering%') AND branche = 21

zie de haakjes. De AND doet nu "dienstverband LIKE '%detachering%') AND branche = 21"
ipv alle ors+ de and
Offline lasdesigner - 30/11/2008 19:18
Avatar van lasdesigner PHP beginner Super, Super bedankt voor je hulp devioursoul!
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.493s