Hallo, ik loop tegen een probleempje aan, ik heb de volgende tabel:

CREATE TABLE `uitslagen` (
`id` int(11) NOT NULL auto_increment,
`jaartal` varchar(255) NOT NULL,
`vluchtcode` varchar(255) NOT NULL,
`plaats` varchar(255) NOT NULL,
`uitslag` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

als ik uitslag.php?jaartal=2010 doe, dan wil ik alle rows met het jaar 2010 hebben,
en als ik uitslag.php?jaartal=2009 doe, dan wil ik alle rows waar als jaartal 2009 staat zichtbaar hebben etc,

Hoe doe ik dit.
Herhaling van wat ik eerder gepost heb maar dan nu met de uitslag parameter

Noppes Homeland op 24/07/2010 23:05:11

Tip 1: gebruik de InnoDB engine ipv MyISAM
Tip 2: gebruik mysql_fetch_assoc ipv de _fetch_array
Tip 3: superglobals zijn gedefinieerd in hoofdletters $_get[] <> $_GET[]
Tip 4: pas op voor sql-injectie

<?php
$sWhereClause = '';

if (isset($_GET['uitslag']) && ctype_digit($_GET['uitslag']) {
$sWhereClause = "WHERE jaartal = ".mysql_real_escape_string($_GET['uitslag']);
}

$sql = "SELECT *
FROM uitslagen ".$sWhereClause;

if (($result = mysql_query($sql)) === false) {
echo mysql_error().'<br />'.$sql;
}
else {
while ($row = mysql_fetch_assoc($result)) {
print_r($row);
}
}
?>




Blijkbaar vergeet je nog steeds te controleren en te validaren
Thanks, nog maar eens even proberen :)
Tip 1: gebruik de InnoDB engine ipv MyISAM

Mag je negeren ;) Ligt totaal aan je database ontwerp.
Negeer Remco maar, die weet blijkbaar niet beter

Alleen als je een fulltext search wilt doen dan zal je de MyISAM engine nodig hebben voor de tabel

MySQL InnoDB engine is de enige waarbij je redelijkerwijs een relationele database kan opzetten
Het verschil tussen InnoDB en MyIsam heeft functioneel gezien geen fluit met relationele databases en het redelijkerwijs opzetten daarvan te maken. Je kan met beide (storage!) engines dezelfde relationele databases opzetten en zolang je geen 250 transacties per seconde te verwerken hebt maakt het geen verschil. Enne ik verneem graag onderbouwde tegenargumenten.
heren, allemaal erg bedankt, ben weer tot nieuw inzichten gekomen ;)

mijn oplossing is de volgende :

<?php
$jaartal = "'" . mysql_real_escape_string ( $_GET['jaartal']) . "'";
$query = "SELECT * FROM uitslagen WHERE jaartal = " . $jaartal;
$result = mysql_query($query);
while ($row = mysql_fetch_array($result)) {
?>

werkt prima, bedankt allemaal.
MyIsam ondersteunt geen transacties!

@Gerrit Wiersma
Op deze manier ben je weer terug bij af:
controle en validatie ontbreekt!

je kan dan net zo goed doen:
<?php
$sql = "SELECT * FROM uitslagen where jaartal = ".mysql_real_escape_string($_GET['uitslag'];
?>
@Noppes: "MyIsam ondersteunt geen transacties" Wat is een transactie ?
Update table set veld = NOW() is een elementaire transactie. We kunnen nu wel gaan kiften over de definitie van een transactie maar nogmaals het is niet zinvol om tegen iemand te roepen: Tip 1: gebruik de InnoDB engine ipv MyISAM

The only advantage InnoDB has over MyISAM is that it supports row locking, while MyISAM only supports table locking. Therefore, if lots of reads and writes are constantly being done to a very large table, it eliminates the constant database errors that using a MyISAM table would cause from the overload. InnoDB would therefore be a tad more reliable when you don't mind taking a small performance hit in exchange for not suffering from table locking issues. To achieve a very high lock speed, MySQL uses table locking (instead of page, row, or column locking) for all storage engines except InnoDB, BDB, and NDBCLUSTER.
als ik die

$sql = "SELCT * FROM uitslagen where jaartal = ".mysql_real_escape_string($_GET['uitslag'];

er in pleur werkt het niet xD

Reageren