1 2 3 4 5 | SELECT reg.id, reg.branche_code AS branche_code, branche.name AS branche_name, branche.total_in AS total FROM reg_reg reg LEFT JOIN reg_branche branche ON reg.branche_code ON branche.code ?> |
1 2 3 4 5 | SELECT reg.id, reg.branche_code AS branche_code, branche.name AS branche_name, branche.total_in AS total FROM reg_reg reg LEFT JOIN reg_branche branche ON reg.branche_code LIKE '%,'branche.code',%' ?> |
1 2 3 4 5 6 | SELECT reg.id, reg.branche_code AS branche_code, branche.name AS branche_name, branche.total_in AS total FROM reg_reg reg, reg_branche branche WHERE reg.branche_code LIKE '%,'branche.code',%' ?> |
1 2 3 4 5 6 | SELECT reg.id, reg.branche_code AS branche_code, branche.name AS branche_name, branche.total_in AS total FROM reg_reg reg, reg_branche branche WHERE (reg.branche_code LIKE '%,'branche.code',%' OR reg.branche_code IS NULL) ?> |
Wat staat er in dat veld?quote:Op maandag 10 november 2008 19:41 schreef Likkende_Lassie het volgende:
Het moet namelijk een like zijn met een veld van de tabel
Onzinquote:Op maandag 10 november 2008 19:23 schreef JortK het volgende:
Die LIKE moet in je WHERE clause, je JOIN clause is om tabellen aan elkaar te koppelen, niet om criteria in aan te leggen
Ook onzin, maar dan met niet werkende voorbeelden.quote:Op maandag 10 november 2008 19:48 schreef Arjan321 het volgende:
JOINS zijn alleen maar syntax sugar, dus iets als dit zou ook moeten werken:
Voor een INNER JOIN:
[ code verwijderd ]
Of een LEFT JOIN
[ code verwijderd ]
1 2 3 | FROM reg_reg r LEFT JOIN reg_branche b ON r.branche_code LIKE Concat('%', b.code, '%') |
In dat veld staan de ID's van de branches, als volgt: ,6543,34543,4323,65432,1234,quote:Op maandag 10 november 2008 20:33 schreef Light het volgende:
[..]
Wat staat er in dat veld?
Over het algemeen moet je LIKE met "%text%" zien te vermijden. Door de % vooraan kan er namelijk geen gebruik gemaakt worden van indexen, dus is je query per definitie inefficient.
1 2 3 4 5 | FROM register_register register LEFT JOIN register_branches branche ON branche.code = LIKE Concat('%', register.branche_code, '%') WHERE register.id IN (".$sphinx['result']." 0) AND total_in > 0 AND branche.in_small_overview > 0 GROUP BY `branche_code` ORDER BY total_in DESC LIMIT 10") |
Daar was ik al bang voor. Een koppeltabel is dan een veel betere oplossing. Gewoon een tabel met id's, kun je ook indexen op zetten. Is ook veel sneller met doorzoeken.quote:Op maandag 10 november 2008 20:44 schreef Likkende_Lassie het volgende:
[..]
In dat veld staan de ID's van de branches, als volgt: ,6543,34543,4323,65432,1234,
Bedankt voor de reacties tot nu toe!
Zoek eens op databasenormalisatie. Je kunt wel proberen om dit werkend te krijgen (en het kan vast ook) maar je kunt veel beter je tijd investeren in uitzoeken hoe het beter kan.quote:Bovenstaande oplossingen werken overigens niet.
Hierbij de gehele query, zoals de laatst genoemde mogelijkheid, niet werkend.
[ code verwijderd ]
1 2 3 4 5 6 7 8 9 | FROM register_register r LEFT JOIN register_branches b ON b.code = LIKE Concat('%', r.branche_code, '%') WHERE r.id IN (". $sphinx['result']. " 0) AND b.total_in > 0 AND b.in_small_overview > 0 GROUP BY branche_code ORDER BY total_in DESC LIMIT 10" |
GAD-VER-DAM-MEquote:Op maandag 10 november 2008 20:44 schreef Likkende_Lassie het volgende:
In dat veld staan de ID's van de branches, als volgt: ,6543,34543,4323,65432,1234,
Een koppeltabel, zou die er zou uit kunnen zien?quote:Op maandag 10 november 2008 21:01 schreef Light het volgende:
[..]
Daar was ik al bang voor. Een koppeltabel is dan een veel betere oplossing. Gewoon een tabel met id's, kun je ook indexen op zetten. Is ook veel sneller met doorzoeken.
[..]
Zoek eens op databasenormalisatie. Je kunt wel proberen om dit werkend te krijgen (en het kan vast ook) maar je kunt veel beter je tijd investeren in uitzoeken hoe het beter kan.
1 |
Yepquote:Op maandag 10 november 2008 21:06 schreef Likkende_Lassie het volgende:
[..]
Een koppeltabel, zou die er zou uit kunnen zien?
brancheID registerID
04200 123456
0915 123456
3116 654321
dus meerdere regels voor een registerid?
1 2 3 4 5 6 7 8 | `id` int(11) NOT NULL auto_increment, `brancheID` int(11) NOT NULL, `registerID` int(11) NOT NULL, PRIMARY KEY (`id`), KEY `brancheID` (`brancheID`), KEY `registerID` (`registerID`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1; |
Dat veld ID is niet echt nuttig. Ik zou de tabel anders maken:quote:Op maandag 10 november 2008 21:32 schreef Likkende_Lassie het volgende:
Ok! Hij is nu bezig alles in te voeren, moet heel wat records inlezen en verwerken, duurt dus even.
De tabel ziet er zo uit:
[ code verwijderd ]
1 2 3 4 5 6 | `brancheID` int(11) NOT NULL, `registerID` int(11) NOT NULL, PRIMARY KEY (`brancheID`,`registerID`), KEY `registerID` (`registerID`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | $Month = "11"; $Year = "2008"; $DaysMonth = cal_days_in_month(CAL_GREGORIAN, $Month, $Year); for ($i = 1; $i <= $DaysMonth; $i++) { echo 'De datum ' .$i. '-' .$Month. '-' .$Year. ', valt op '; $day = date("l", mktime(0, 0, 0, $Month, $i, $Year)); if ($day == "Monday") { echo 'Maandag'; } if ($day == "Tuesday") { echo 'Dinsdag'; } if ($day == "Wednesday") { echo 'Woensdag'; } if ($day == "Thursday") { echo 'Donderdag'; } if ($day == "Friday") { echo 'Vrijdag'; } if ($day == "Saturday") { echo 'Zaterdag'; } if ($day == "Sunday") { echo 'Zondag'; } echo '<br />'; } ?> |
1 2 3 4 | $nlDagen=Array('','Maandag','Dinsdag','Woensdag','Donderdag','Vrijdag','Zaterdag','Zondag'); $dagNaam=$nlDagen[time(N)]; ?> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | <ul> <li><a href="/">Home</a></li> <li><a href="http://www.biertafel.eu/index.php?submit">Over ons</a></li> <li><a href="/">Archief</a></li> <li><a href="http://forum.biertafel.eu">Forum</a></li> <li><a href="/">Winkel</a></li> <li><a href="/">Contact</a></li> </ul> </div> <div id="main"> <?php if(isSet($_GET['submit'])) { include('polladmin.php'); } else { include('poll.php'); } ?> <P> |
kijk maar naar de poll op de homepagequote:Op dinsdag 11 november 2008 17:26 schreef Xcalibur het volgende:
op zich een prima manier, maar ik zou het includen van de admin niet af laten hangen van het gezet zijn van een get-variabele... dat is nogal een security risk namelijk
De poll op zn homepage heeft totaal geen beveiliging, iedereen kan een nieuwe poll aanmaken..quote:Op dinsdag 11 november 2008 17:40 schreef Xcalibur het volgende:
uh, poll, homepage?
Ik geloof niet dat ik snap waar je het over hebt....
ik weet dat iedereen de admin-pagina kan bereiken. dit is ook alleen maar om te testen.quote:Op dinsdag 11 november 2008 17:26 schreef Xcalibur het volgende:
op zich een prima manier, maar ik zou het includen van de admin niet af laten hangen van het gezet zijn van een get-variabele... dat is nogal een security risk namelijk :)
1 2 | include('polladmin.php'); |
klopt, dat weet ik.quote:Op dinsdag 11 november 2008 17:42 schreef qu63 het volgende:
[..]
De poll op zn homepage heeft totaal geen beveiliging, iedereen kan een nieuwe poll aanmaken..
En een extra check op je polladmin kan ook geen kwaad..quote:Op dinsdag 11 november 2008 17:26 schreef Xcalibur het volgende:
op zich een prima manier, maar ik zou het includen van de admin niet af laten hangen van het gezet zijn van een get-variabele... dat is nogal een security risk namelijk
Zoiets bedoel je?quote:Op dinsdag 11 november 2008 17:44 schreef rulerofdeath het volgende:
[..]
ik weet dat iedereen de admin-pagina kan bereiken. dit is ook alleen maar om te testen.
ben een beetje aan het klooien met m'n webpagina.
is het ook mogelijk om onderstaande te vervangen door variabelen en dat ik niet alles hoef te hardcoden? (Dat ik dus de naam van de webpagina als variabele kan gebruiken)
[ code verwijderd ]
1 2 3 | include($_GET['page'].'.php'); ?> |
bedankt. zoiets bedoel ik.quote:Op dinsdag 11 november 2008 18:11 schreef Light het volgende:
[..]
Zoiets bedoel je?
/path/to/site/index.php?page=poll
[ code verwijderd ]
Dat werkt gewoon. Het is absoluut niet veilig, maar dat vroeg je ook niet.
Het probleem met variabelen uit de QueryString is dat ze zo makkelijk te beïnvloeden zijn en dus erg vatbaar zijn voor kwaadwillige injectie vanuit de gebruikerskant. Er kunnen op die manier dus allerlei onverwachte problemen opduiken.quote:Op dinsdag 11 november 2008 19:18 schreef rulerofdeath het volgende:
[..]
bedankt. zoiets bedoel ik.![]()
Qua veiligheid maakt het toch niets uit als ik op deze manier alleen pagina's wil weergeven en niet een pagina als die polladmin.php wil bereiken?
Laat ik je een geheimpje verklappen: Met het programmeerwerk voor expliciet hetgeen dat je wilt doen, ben je meestal zo klaar. Vaak ben je echter meer dan de helft van de tijd bezig met het 'hufterproof' maken van je script/programma.quote:Op dinsdag 11 november 2008 19:46 schreef rulerofdeath het volgende:
dus ietsjes meer typewerk scheelt wel in de veiligheid?
dan gaat dat voor.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | function quote_smart($value, $type = false, $NULL = false) { $value = trim($value); if ($type != 'html'){ $value = strip_tags($value); } if (strlen($value)) { # We have something if ($type == 'num'){ if (is_numeric($value)){ return $value; }else{ trigger_error(sprintf("%s: '%s' is not a number!", __FUNCTION__, $value), E_USER_ERROR); return null; } }else{ if (get_magic_quotes_gpc()) { $value = stripslashes($value); } if(version_compare(phpversion(),"4.3.0") == "-1") { return mysql_escape_string($value); } else { return mysql_real_escape_string($value); } } }else{ if ($NULL) { return null; } } } ?> |
Ja, het is wanneer we het over data-opslag hebben natuurlijk logisch dat data opgeslagen wordt hoe het door de gebruiker ingevoerd wordt. Het beveiligen is nodig op het moment dat de invoer-query uitgevoerd wordt, op dat moment worden aanhalingstekens e.d. dusdanig onschadelijk gemaakt zodat de uitvoerende functie niet geïnjecteerd kan worden met bagger.quote:Op vrijdag 14 november 2008 09:28 schreef Likkende_Lassie het volgende:
Vraagje, als ik waardes door de volgende functie haal, om ze veilig te maken, komen ze alsnog met quotes en zonder slashes in de database, ik weet waarom, maar is het veilig genoeg?
[ code verwijderd ]
1 2 3 4 5 6 7 8 9 | if(get_magic_quotes_gpc()){ $value=stripslashes($value); } if(!is_numeric($value)){ $value=mysql_real_escape_string($value); } return $value; } |
1 2 3 4 5 6 7 8 9 | $Month = '11'; $Year = '2008'; $a_query = mysql_query("SELECT `datum` FROM `data` WHERE `datum` LIKE '%-$Month-$Year'"); while ($array = mysql_fetch_array($a_query, MYSQL_ASSOC)) { $arrays[] = $array; } ?> |
1 2 3 4 5 6 7 8 9 10 | $DaysMonth = cal_days_in_month(CAL_GREGORIAN, $Month, $Year); for ($i = 1; $i <= $DaysMonth; $i++) { $date = '' .$i. '-' .$Month. '-' .$Year. ''; if (in_array('$date', $arrays)) { echo "yes"; } } ?> |
Waarom zo omslachtig? Je kunt toch ook al door middel van DAY() / MONTH() / YEAR() MySQL functies in je query de records ophalen die je moet hebben?quote:Op vrijdag 14 november 2008 10:25 schreef saban het volgende:
Om te voorkomen dat ik 30 keer een query moet doen in een for bouw ik een array op buiten mijn for, dit doe ik door middel van:
[ code verwijderd ]
Nu heb ik de data wat uit de terug komt gezet in $arrays.
Vervolgens wil ik in een for checken of de datum in mijn for voorkomt in de array, door middel van:
[ code verwijderd ]
Echter werkt dit niet omdat ik in mijn while een array in een array maak.
Wat is hier de oplossing van?
MySQL draait gewoon op een server waarmee met een server adres/IP, gebruikersnaam en wachtwoord op ingelogd dient te worden. In plaats van localhost dus gewoon de MySQL/database server of het IP adres daarvan, en uiteraard de correcte gebruikersnaam en wachtwoord voor die server, zou genoeg moeten zijn.quote:Op vrijdag 14 november 2008 10:33 schreef Pizzahut het volgende:
Vraagje voor MySQL:
Ik heb een MySQL query browser van de officiële website.
Nu gebruik ik die heel veel voor localhost wat ook prima werkt.
Maar nu wil ik ook een externe host, bij voorkeur dus mijn eigen website eraan toevoegen.
Kan iemand mij vertellen wat ik moet invullen bij host? (waar normaal localhost staat).
ik heb dus al http://dbadmin.one.com gedaan als mijn website.
Ik heb nu dit gedaan:quote:Op vrijdag 14 november 2008 10:39 schreef Tuvai.net het volgende:
[..]
MySQL draait gewoon op een server waarmee met een server adres/IP, gebruikersnaam en wachtwoord op ingelogd dient te worden. In plaats van localhost dus gewoon de MySQL/database server of het IP adres daarvan, en uiteraard de correcte gebruikersnaam en wachtwoord voor die server, zou genoeg moeten zijn.
Dat kan.quote:Op vrijdag 14 november 2008 10:31 schreef Tuvai.net het volgende:
[..]
Waarom zo omslachtig? Je kunt toch ook al door middel van DAY() / MONTH() / YEAR() MySQL functies in je query de records ophalen die je moet hebben?
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |