2 selectboxen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: « vorige 1 2 3 volgende »

- Ariën  -
Beheerder

- Ariën -

13/09/2015 22:53:16
Quote Anchor link
je variabelen staan nu binnen je "-quotes.


Dus deze moet je even afsluiten op deze manier. Met de punt kan je een string en een variabele met elkaar koppelen.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
echo "Dit is een string met een ".$variabele." gevolgd door een nieuwe string.";
?>
 
PHP hulp

PHP hulp

16/11/2024 02:53:23
 
Pierre Web

Pierre Web

13/09/2015 23:22:42
Quote Anchor link
Dit dus

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
  WHERE YEAR(datum) = ".$year."  OR temperatuur = ".$temp."


dit werkt hieronder , bovenstaande niet
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
  WHERE YEAR(datum) = ".$year."  


Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in....
 
- Ariën  -
Beheerder

- Ariën -

13/09/2015 23:25:02
Quote Anchor link
Dan mist er nog wat foutafhandeling op je query.

http://snipplr.com/view/47814/goede-foutafhandeling-mysqli/
 
Pierre Web

Pierre Web

13/09/2015 23:40:55
Quote Anchor link
Pffffffff...
 
- Ariën  -
Beheerder

- Ariën -

13/09/2015 23:42:11
Quote Anchor link
Pierre Web op 13/09/2015 23:40:55:
Pffffffff...

??
 
Pierre Web

Pierre Web

13/09/2015 23:45:31
Quote Anchor link
Haha..

Die foutafh, zal wel lukken maar voor het moment ff stoppen, morgen weer verder , Bedankt alvast.

Warning: mysqli::query(): Empty query in..
Het ophalen lukt niet!
Notice: Use of undefined constant DEBUG_MODE - assumed 'DEBUG_MODE' in..
Gewijzigd op 13/09/2015 23:46:14 door Pierre Web
 
- Ariën  -
Beheerder

- Ariën -

13/09/2015 23:49:44
Quote Anchor link
Ik vermoed dat $year en $temp geen waarde hebben.
Die andere melding komt omdat DEBUG_MODE niet gedefineerd is, terwijl je die wel aanroept.
 
Pierre Web

Pierre Web

13/09/2015 23:55:15
Quote Anchor link
Volgens mij zit het in
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
OR temperatuur = ".$temp."  


de waarden zijn er worden ook geprint als test
 
- Ariën  -
Beheerder

- Ariën -

13/09/2015 23:55:55
Quote Anchor link
Het beste is om de query-string te echo'en. Dan weet je precies hoe de variabelen gevuld worden.
 
Pierre Web

Pierre Web

14/09/2015 00:05:41
Quote Anchor link
Al je bedoelt

$query_pag_data = $mysqli->query("
SELECT * ,DATE_FORMAT(datum,..

echo "$query_pag_data";

Catchable fatal error: Object of class mysqli_result could not be converted to string in
 
- Ariën  -
Beheerder

- Ariën -

14/09/2015 00:07:25
Quote Anchor link
Je echo'ed nu een query, en niet de string ;-)
 
Pierre Web

Pierre Web

14/09/2015 00:14:01
Quote Anchor link
sorry ,, dat was geen string..

Kies een jaar:
WHERE YEAR(datum) = 2015 OR temperatuur = niet_gekozen


Kies een temperatuur
WHERE YEAR(datum) = Niet gekozen OR temperatuur = 18

dat klopt zover, temperatuur ook nog eens gecontroleers in table enz.
Gewijzigd op 14/09/2015 00:15:35 door Pierre Web
 
- Ariën  -
Beheerder

- Ariën -

14/09/2015 00:15:33
Quote Anchor link
Wat is je hele query die je uitvoert en echo'ed?
 
Pierre Web

Pierre Web

14/09/2015 00:18:07
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php $year = $_POST['year'];
$temp = $_POST['temp'];?>

  <?php
$query_pag_data
= "SET lc_time_names = 'nl_NL'";
$query_pag_data = $mysqli->query("
SELECT * ,DATE_FORMAT(datum,
'%d-%m-%Y') as formatdatum,
DATE_FORMAT(datum,
'%Y') as jaar,
DATE_FORMAT(datum,
'%W') as weekdag
  FROM $db_resultaten
   WHERE YEAR(datum) = "
.$year." OR temperatuur = ".$temp."  
"
);

// echo " WHERE YEAR(datum) = ".$year." OR temperatuur = ".$temp."  ";
?>




while ....


zonder : OR temperatuur = ".$temp." werkt het

Toevoeging op 14/09/2015 00:29:35:

dit kan ook waarschijnlijk maar kan niet?

WHERE YEAR(datum) = 2015 OR temperatuur = 15



Toevoeging op 14/09/2015 00:32:11:

dit werkt
WHERE temperatuur = ".$temp."

dit ook
WHERE YEAR(datum) = ".$year."

maar niet samen met OR

De server valt hier af en toe uit van forum



Toevoeging op 14/09/2015 09:27:37:

Probleem zat hem in de string , zo werkt het

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
WHERE YEAR(datum) = '$year' OR temperatuur = '$temp'  


Verder lijkt er in de praktijk soms voor temp. en jaar gekozen te worden ,
dus jaar is bijv. 2015 EN temp. is 15 graden, het zou selecteer 2015 OF 15 graden moeten zijn
Het zal door de selectboxen komen ..
Gewijzigd op 14/09/2015 09:00:14 door - Ariën -
 
- Ariën  -
Beheerder

- Ariën -

14/09/2015 23:19:16
Quote Anchor link
Als de selectbox niet is ingevuld, dan heeft de geen $_POST waarde. Daarom is het zeker handig om met isset() te controleren of die waarde ingevuld is, en dan het deel van de query met OR temperatuur = '$temp' toe te voegen.

Zo creëer je een dynamische query.
Zorg er wel voor je in alle gevallen een geldige query genereert. Want als je jaar niet ingevuld is, dan zou je dus krijgen (verkort voorbeeld):

SELECT dit,dat, zus, zo FROM dingetjes WHERE OR temperatuur = '$temp'
.. en dan klopt je query niet meer.
 
Pierre Web

Pierre Web

14/09/2015 23:40:03
Quote Anchor link
Het loopt momenteel allemaal goed.

Ik had het o,a zo gedaan

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
if (!$_POST){
    $year = $laatste_jaar ;
    }

$laatste_jaar haal ik weer uit de table (het laatst bekende jaar dus)

Heb je nog wat tips voor veiligheid van o,a sql injection, zoals je eerder al aangaf voor gebruikte code
 
- Ariën  -
Beheerder

- Ariën -

14/09/2015 23:50:06
Quote Anchor link
ik zou voor het gemak wel isset() gebruiken, want als er niet ge-POST is, zou je een notice-foutmelding krijgen.

Om SQL-injection te voorkomen, zou ik 'prepared statements' gebruiken:
https://www.daniweb.com/web-development/php/threads/231958/using-mysqli-prepared-statements-to-avoid-sql-injection
Gewijzigd op 14/09/2015 23:50:18 door - Ariën -
 
Pierre Web

Pierre Web

15/09/2015 12:04:49
Quote Anchor link
SQL-injection het gaat dus om de query,dus zo:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
$query_pag_data = $mysqli->query("
SELECT * ,DATE_FORMAT(`datum`,
'%d-%m-%Y') as formatdatum,
DATE_FORMAT(`datum`,
'%Y') as jaar,
DATE_FORMAT(`datum`,
'%W') as weekdag
  FROM `$db_resultaten`
 WHERE YEAR(`datum`) = '" .$year . "'  OR `test` = '" .$test . "'
       ORDER BY `id` DESC , `datum` DESC
");


Ik weet niet of isset de beste toepassing is, 3 mogelijkheden:

-De tabel is leeg dus geen jaar
-Er is data in de tabel, hier haal ik bij openen van pagina het laatst gebruikte jaar op met bijbehorende data.
-Met de selectbox kan ik een ander jaar kiezen , de te kiezen jaren zijn de aanwezige jaar of jaren in de table.

Dit laatste doe ik o.a met
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
foreach(range($laatste_jaar, $begin_jaar) as $year)

maar dit terzijde
 
- Ariën  -
Beheerder

- Ariën -

15/09/2015 12:12:26
Quote Anchor link
Het ligt er aan of de selectboxen een value hebben. Soms zijn deze blanco, zodat men in die selectboxen een keuze moet maken, en dan is een isset() zeker een handige optie. Een keuze in een selectbox zonder value staat namelijk gelijk aan dat deze selectbox niet in de POST-request valt.

Voor een checkbox is een isset() altijd verplicht, want de value wordt immers dan alleen maar in de POST-request meegegeven als er een vinkje in geplaatst is, anderzijds is er ook een radio-button waarbij je twee keuzes kan maken.
 
Pierre Web

Pierre Web

15/09/2015 12:18:36
Quote Anchor link
Bedankt,

Zal het nog eens bekijken, klopt bij selectbox is isset zeker handig.

Is de SQL-injection toegepast op de query goed, opmerkingen over veiligheid welkom.

ik weet niet of een $ nog beveiligd moet/kan worden bijv.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
    $laatste_jaar = ($row['laatste_jaar']);
of de seletbox.
 

Pagina: « vorige 1 2 3 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.