Resultaat (MySQL) afhankelijk van radio buttons in tabel zetten.

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

T T

T T

06/08/2012 12:45:03
Quote Anchor link
Hallo allemaal,

Ik heb hulp nodig bij het maken van een script waar ik het zoekresultaat wil laten afhangen van een 3-tal radio buttons. Deze velden hebben een vast waarde en ik heb een radio button checked. Bij default zou hij deze moeten gebruiken in de Query. Dit krijg ik alleen niet werkend.

Ik heb al geprobeerd dit met een elseif statement te doen maar hier kwam ik niet uit en volgens mij moet het makkelijker kunnen. Daarnaast zijn 3 losse pagina's uiteraard niet wenselijk.

Weet iemand wat ik fout doe en hoe ik dit kan oplossen? Alvast bedankt. :)

Onderstaand staat mijn script in een reply. Ik ben beginnend het te leren voor een school opdracht dus de code zal zeker niet perfect zijn.
Gewijzigd op 06/08/2012 13:35:36 door T T
 
PHP hulp

PHP hulp

24/11/2024 12:56:06
 
Erwin H

Erwin H

06/08/2012 13:19:44
Quote Anchor link
T T op 06/08/2012 12:45:03:
Weet iemand wat ik fout doe en hoe ik dit kan oplossen? Alvast bedankt

Ik zal niet alle fouten gaan opsommen.... maar een paar:


mysql_connect("$host", "$username", "$password")
Een variabele in een string plaatsen? Wat is dat nu voor onzin. Al die quotes om variabelen weghalen, nergens voor nodig. Is alleen maar trager en inefficienter. Pure onzin.

or die("cannot connect");
Niemand gaat dood, bouw juiste foutafhandeling in. Is genoeg over te vinden.


$query = mysql_query("select * from `table` where Status='$sort';");
Geen backticks gebruiken, andere naam voor je tabel verzinnen. table is een reserved word en moet je dus gewoon NIET gebruiken.
$sort buiten quotes halen (zie ook boven), maar bovenal, waar komt $sort vandaan. Zo te zien komt het gewoon uit de lucht vallen.
Bouw ook hier foutafhandeling in. Als je query niet lukt ga je hier nat, want je controleert het niet eens.

$nr1 = $row['Identificatie'];
variabelen met nummers zijn echt not done en hier ook nog eens totaal overbodig. In plaats van $nr1 te echoen in je HTML kan je ook gewoon direct $row['Identificatie'] echoen.
 
T T

T T

06/08/2012 14:29:43
Quote Anchor link
Hoi Erwin bedankt voor je reactie. Ik ben een echte newbie en moet dit nog leren voor school vandaar dat ik er niet uitkom. Ik heb met bovenstaande tips het eea aangepast en onderstaand is mijn nieuwe resultaat. Het is fijn dat iemand ook tips geeft over wat ik fout doe.

Foutafhandeling heb ik me nog niet echt in verdiept en ga ik straks gelijk doen. Ik heb $sort vervangen voor $keuze en ik wil graag dat deze afkomstig is uit het resultaat van de radio buttons. Hierop word de Query gebaseerd.

Heb je enig idee of een andere oplossing wat betrekking het verwerken van de criteria? Of kan ik het beter met een Elseif commando doen?
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
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
<?php
<html>
<
head>
<
script src="sorttable.js"></script>

</head>
<body>
<style type="text/css">
td.kleur1 {
    background-color: #CCFFCC;
}
td.kleur2 {
    background-color: #FFFFFF;
}
tr.header1 {
        background-color: black;
        color: white;
        font-weight: bold;
        
}
</style>
<form method="post" action="<?php echo $PHP_SELF;?>">
<strong>Display:</strong>
<input type="radio" name="display" value="Openstaand" checked> Openstaand   |   <input type="radio" name="display" value="Afgehandeld"> Afgehandeld   |  <input type="radio" name="display" value="alles"> Alles   |  
<input type="submit" name="display" value="sumbit">

</form><br>
<table width="1550" border="1" align="left" class="sortable" cellpadding="5" cellspacing="3">
  <tr class="header1">
<td>Status:</td>
<td>Prioriteit:</td>
<td>IT Medewerker:</td>
  <td>Pc nummer:</td>
<td>Eigenaar:</td>
<td>Gebr. specifiek:</td>
<td>Objectsoort:</td>
<td>Merk:</td>
<td>Type:</td>
<td>Serienummer:</td>
<td>Asset Tag:</td>
<td>Operating System:</td>
  </tr>
<?php
$host
="localhost"; // Host name
$username="*****"; // Mysql username
$password="*****"; // Mysql password
$db_name="view"; // Database name

// Connect to server and select databse.

mysql_connect($host, $username, $password)or die("Verbinding mislukt");
mysql_select_db($db_name)or die("Kan de database niet selecteren");
?>

<?php
$keuze
= $_POST['display'];


//Query starten
$query = mysql_query("select * from vervangingen where Status='$keuze'");
 
//Geef het resultaat van de array en loop elke rij!
while ($row = mysql_fetch_array($query)){
 ?>

   <tr>
<td class="kleur1"><?php echo $row['Status'] ;?></td>
<td class="kleur2"><?php echo $row['Prioriteit'] ?></td>
<td class="kleur1"><?php echo $row['IT medewerker'] ?></td>
   <td class="kleur2"><?php echo $row['Identificatie'] ;?></td>
   <td class="kleur1"><?php echo $row['Eigenaar'] ;?></td>
   <td class="kleur2"><?php echo $row['Gebr specificatie'] ;?></td>
   <td class="kleur1"><?php echo $row['Objectsoort'] ;?></td>
<td class="kleur2"><?php echo $row['Merk'] ;?></td>
<td class="kleur1"><?php echo $row['Type'] ;?></td>
<td class="kleur2"><?php echo $row['Serienummer'] ;?></td>
<td class="kleur1"><?php echo $row['Asset Tag']; ?></td>
<td class="kleur2"><?php echo $row['Operating system'] ;?></td>
  </tr>
  
<?php } //afsluiten van de statement: if?>
 
</table>
</html>
?>
Gewijzigd op 06/08/2012 15:32:17 door T T
 
- SanThe -

- SanThe -

06/08/2012 14:35:32
Quote Anchor link
Zet dit eens helemaal bovenin je script:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
ini_set('display_errors', 1); // 0 = uit, 1 = aan
error_reporting(E_ALL);

// rest
?>


Toevoeging op 06/08/2012 14:42:08:

Gebruik in de database kolom- en veldnamen nooit spaties. Gebruik daar de underscore voor. Dus geen 'IT medewerker' maar 'IT_medewerker'.

Hou $vars buiten quotes.

Je query is lek. SQL-Injection is mogelijk.
Gebruik mysql_real_escape_string() om te beveiligen.

$PHP_SELF zal niet bestaan. Je bedoelt $_SERVER['PHP_SELF'].
Maar ook die kun je beter niet gebruiken i.v.m. veiligheid.
Gewoon action="" is vaak het best.
Gewijzigd op 06/08/2012 14:42:51 door - SanThe -
 
T T

T T

06/08/2012 14:58:56
Quote Anchor link
Bedankt voor de nieuwe info :)

Ik heb de tabel aangepast en de spaties verwijderd.

Ik heb nog niets tegen SQL injectie gedaan dat weet ik. Dit wil ik pas gaan toepassen als ik alles draaiend heb. Ik moet een soort van helpdesk systeem maken en het draait enkel intern (niet op i-net) en achter een login. Dit vraag me af of ik dit nodig heb. Toch bedankt voor de tip iig.

Ik heb je script toegevoegd. Maar weet niet precies wat deze weer moet geven. Als ik mijn script nu draai krijg ik wel een foutmelding:

Notice: Undefined index: display in C:\xampp\htdocs\test\overzicht.php on line 58

en ik krijg onderstaande melding als ik de ' weghaal bij $keuze:

Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\test\overzicht.php on line 65

Als ik vervolgens mijn radio buttons gebruik verdwijnt deze. Ik krijg trouwens nooit een resultaat te zien enkel de tabel koppen.
Gewijzigd op 06/08/2012 15:04:18 door T T
 
Erwin H

Erwin H

06/08/2012 15:08:20
Quote Anchor link
niet:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?Php
$query
= mysql_query("select * from vervangingen where Status='$keuze'");
?>

maar:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$query
= mysql_query("select * from vervangingen where Status='".$keuze."'");
?>

Maar dan nog blijft de vraag, waar komt $keuze opeens vandaan. Het lijkt zo uit de lucht te komen vallen, want je geeft het nergens een waarde. Je query zal hierdoor dus mislukken en daardoor krijg je die foutmelding over die boolean. Vandaar ook, foutafhandeling toevoegen! Daarmee vang je dit soort fouten op!
 
T T

T T

06/08/2012 15:13:08
Quote Anchor link
Ik probeer $keuze in te stellen via de radio buttons maar weet niet of dit zo´n goed idee is gezien ik het niet werkend krijg.

Ik heb daarvoor deze code toegevoegd:
$keuze = $_POST['display'];

Deze zou gezet moeten worden door de Send button. Volgens mij zit daar nu nog ergens de fout.

Als ik trouwens $keuze niet gebruik werkt mijn tabel perfect. Alleen het "zoek" gedeelte werkt nog niet
 
- SanThe -

- SanThe -

06/08/2012 15:32:54
Quote Anchor link
Wat zijn de waarden in de database in het veld Status?
 
Erwin H

Erwin H

06/08/2012 15:36:14
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<input type="radio" name="display" value="Openstaand" checked> Openstaand   |
<input type="radio" name="display" value="Afgehandeld"> Afgehandeld   |
<input type="radio" name="display" value="alles"> Alles   |  
<input type="submit" name="display" value="sumbit">

Je geeft de drie radiobuttons de naam display (dat kan, maar 1 value zal doorgegeven worden), maar ook de submit button. Dat kan niet. Die zal je een andere naam moeten geven.
 
- SanThe -

- SanThe -

06/08/2012 15:38:06
Quote Anchor link
@Erwin: Wauw. Scherpe blik. Ik had dat niet opgemerkt. ;-)
 
T T

T T

06/08/2012 15:58:46
Quote Anchor link
Jullie zijn geweldig ik ben er bijna. De Openstaande en Afgehandelde werken nu nadat ik op zoeken druk. Perfect dus!!

Ik wil ook graag dat hij zoekt op niks (dus alle resultaten laat zien). Openstaand moet de default blijven. En ik wil graag dat hij deze standaard gebruikt als ik de pagina overzicht.php opvraag. Nu krijg ik nog een foutmelding dat $keuze niet is gedefinieerd.

Hebben jullie nog ideeën?
 
Reshad F

Reshad F

06/08/2012 16:04:23
Quote Anchor link
je moet er een if/else constructie omheen bouwen. om te zien of er op een submit geklikt is.. en anderrs laat je alles zien..

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php

if($_SERVER['REQUEST_METHOD'] == 'POST') {
// hier je code die je gebruikt wanneer er op een knop gedrukt is

}

else {
// hier een query draaien die alles laat zien dus zonder de WHERE clausen
}
 
T T

T T

06/08/2012 16:06:01
Quote Anchor link
Oke bedankt weer. Ga eens proberen dat in te bouwen :)
 
- SanThe -

- SanThe -

06/08/2012 16:07:51
Quote Anchor link
- SanThe - op 06/08/2012 15:32:54:
Wat zijn de waarden in de database in het veld Status?
 
T T

T T

06/08/2012 16:10:11
Quote Anchor link
Deze zijn: Openstaand of Afgehandeld en hier komt waarschijnlijk later nog Overgeslagen bij o.i.d
 
Kris Peeters

Kris Peeters

06/08/2012 16:12:26
Quote Anchor link
Sorry als ik even de boel wat in een andere richting trek, doe er mee wat je wil ...

Het punt is vooral het volgende: logica hoort bovenaan, HTML onderaan.

Op het moment dat je <html> (ofwel <!doctype ...) naar het scherm van de gebruiker stuurt, zou je geen verrassingen meer mogen tegenkomen. Dus, onder <html> geen if's, geen while's, geen database connecties maken, ...

Een voorbeeld van wat je kan doen (er valt nog van alles in te vullen):
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
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
<?php
// settings
$host="localhost";    // Host name
$username="root";     // Mysql username
$password="";         // Mysql password
$db_name="phphulp";   // Database name

// Connect to server and select databse.

$db = mysql_connect($host, $username, $password);
mysql_select_db($db_name);

if( isset($_GET['display'])  &&  ($_GET['display'] == 'Afgehandeld' || $_GET['display'] == 'Openstaand') ) {  // andere waarden verwachten we niet.  Alle andere waarden zien we als zijnde: 'alles'
  $filter = $_GET['display'];
  $sql = "SELECT * FROM vervangingen WHERE status='" . mysql_real_escape_string($_GET['display']) . "'";  // Vervang die * door de velden die je nodig hebt
}
else {
  $filter = 'alles';
  $sql = "SELECT * FROM vervangingen";
}


$res = mysql_query($sql);
$table = "";
while($row = mysql_fetch_assoc($res)) {
  $table .= '<tr><td>' . $row['status'] . '</td><td>...</td></tr>'; // aanvullen met de gewenste velden
}
if ($table !== "") {   // met andere woorden: indien er geen records worden gevonden, zal de hoofding van de tabel niet worden getoond (met verder een lege tabel).
  $table = '
  <table border="1">
    <tr><th>Status</th><th>...</th></tr>
    '
. $table . '
  </table>'
;  // aanvullen met de gewenste velden
}

// formulier met de filter
$form = '
<form method="get" action="">
  <strong>Display:</strong>
  <input type="radio" name="display" value="Openstaand" '
. ($filter == 'Openstaand' ? 'checked="checked"' : '') . '> Openstaand |
  <input type="radio" name="display" value="Afgehandeld" '
. ($filter == 'Afgehandeld' ? 'checked="checked"' : '') . '> Afgehandeld |
  <input type="radio" name="display" value="alles" '
. ($filter == 'alles' ? 'checked="checked"' : '') . '> Alles |
  <input type="submit" value="sumbit">
</form>'
;  // merk op: de notatie (conditie ? dan_dit : dan_dat) heet de "ternary operator".  Google voor meer info ...

// HTML-pagina tonen

echo '<!doctype html>
<html>
  <body>
  '
. $form . '
  '
. $table . '
  </body>
</html>
'
;
?>


O ja, je merkt ook op dat ik dit afhandel met GET; niet met POST.
De redenering is over het algemeen:

POST: de gebruiker voegt iets toe aan de website
GET: op basis van gegevens in de url leest de gebruiker gegevens van de website

Een filter zou ik als GET zetten
 
- SanThe -

- SanThe -

06/08/2012 16:12:40
Quote Anchor link
Als je in je formulier deze value laat staan:
<input type="radio" name="display" value="alles">
Dan zou dit moeten werken volgens mij:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
$keuze
= (isset($_POST['display'])) ? $_POST['display'] : 'Openstaand';
$where = ($keuze == 'alles') ? '' : "WHERE Status='" . mysql_real_escape_string($keuze) . "'";

//Query starten
$query = mysql_query("SELECT *
                      FROM vervangingen
                      "
. $where . "
                      "
);
?>
 
T T

T T

06/08/2012 16:18:05
Quote Anchor link
Bedankt Kris, ik ben hier om te leren dus alle info meegenomen. We hebben een leraar die het zelf ook niet snapt of volgens mij ;-) of hij kan het niet uitleggen..

Ik heb zojuist beide scripts geprobeerd en ze werken beide perfect!!!
Bedankt, bedankt, bedankt!! Ik heb het script van SanThe gebruikt om zoveel mogelijk mijn eigen script te houden..

Heren/Dames bedankt voor de hulp, ik ben geholpen :D
Gewijzigd op 06/08/2012 16:42:35 door T T
 



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.