Aanpassen records in een tabel

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Niels Hurkmans

Niels Hurkmans

10/04/2015 11:44:51
Quote Anchor link
Beste mede PHP Hulp forum gebruikers,


Voor een opdracht voor school moet ik een configuratiemanagement applicatie maken, nu heb ik vrij weinig ervaring met PHP en MySQL maar ik heb ondertussen wel al een paar simpele php scripts gemaakt.
Nu heb ik het voor elkaar gekregen om een configuratie toe te voegen aan de mysql database door middel van een form, ook heb ik een pagina waarin alle configuraties worden weergegeven in een tabel.
Nu wil ik ook graag een optie/knop in die tabel waarmee ik een specifieke configuratie/record kan aanpassen en updaten, ik heb al op internet naar informatie gezocht maar ik zie door de bomen het bos niet meer.

Kunnen jullie me hier bij helpen?


Met vriendelijke groet,


Niels
 
PHP hulp

PHP hulp

28/11/2024 05:54:05
 
Thomas van den Heuvel

Thomas van den Heuvel

10/04/2015 11:54:04
Quote Anchor link
Laat eens zien wat je al hebt.
 
- Ariën  -
Beheerder

- Ariën -

10/04/2015 11:56:24
Quote Anchor link
Je wilt een waarde in de database aanpassen? Gebruik dan een UPDATE-query.

Zomaar een voorbeeld, bij gebrek aan een extra informatie over je databaseopbouw:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
UPDATE settings SET status='aan', optie_zus='dus', optie_zo='dat' WHERE id='1'
 
Niels Hurkmans

Niels Hurkmans

10/04/2015 11:56:38
Quote Anchor link
Dit heb ik tot nu toe, de pagina waarop een overzicht van de configuratie staan:

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
82
83
84
85
86
87
88
89
90
91
92
93
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">


<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="nl" lang="nl">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta name="description" content="Venstervullende lay-out met vaste header en 3 kolommen, middelste kan scrollen - voorbeeld. Gebruikt alleen xhtml en css." />
    <title>Home</title>
    <link rel="stylesheet" type="text/css" href="style.css" />
    <link href="/menu_assets/styles.css" rel="stylesheet" type="text/css">
    

</head>
<body>

        
</div></p>
    </div>
    <div id="links">
    
    <div class="menu_simple">
<ul>
<li><a href="index.php">Home</a></li>
<li><a href="configuratiebeheer.php">Configuraties</a></li>
<li><a href="ipbeheer.php">IP Beheer</a></li>
<li><a href="patchpunten.php">Patchpunten</a></li>
<li><a href="gebruikers.php">Gebruikers</a></li>
<li><a href="vlans.php">VLAN's</a></li>
</ul>
</div>
    </div>
</div>
        
    </div>
    </div>
    <div id="rechts">
    
    </div>
    <div id="midden">
    
    <?php
mysql_connect('localhost','root','');
mysql_select_db('muziekgebouw') or die (mysql_error());



  {

  ?>


  
 <h1> Overzicht Configuraties:</h1>
<table border="1" style="width:45%">
<tr>
<td><b>ID</b></td>
<td><b>Merk</b></td>
<td><b>Type</b></td>  
<td><b>Serienummer</b></td>
<td><b>Besturingssysteem</b></td>
<td><b>Locatie</b></td>


</tr>


<?php
  $select_configuratie
  = mysql_query('SELECT * FROM `hardwarebeheer`') or die (mysql_error());
  while($configuratie = mysql_fetch_array($select_configuratie))
    {

      echo '<tr>
                <td>'
.$configuratie['id'].'</td>
                <td>'
.$configuratie['merk'].'</td>
                <td>'
.$configuratie['type'].'</td>
                <td>'
.$configuratie['serienummer'].'</td>
                <td>'
.$configuratie['os'].'</td>
                <td>'
.$configuratie['locatie'].'</td>
                
            </tr>'
;
    }

     echo '</table>';
   }

?>








    
    </div>
</div>
</body>
</html>
Gewijzigd op 10/04/2015 11:57:59 door - Ariën -
 
- Ariën  -
Beheerder

- Ariën -

10/04/2015 12:01:31
Quote Anchor link
Je zou een link kunnen maken naar settings.php, waar je dan aan de hand van GET-waardes aan kan geven welke optie je wilt aanpassen en welke waarde je daarvan wilt gebruiken.

"settings.php?id=1&setting=merk&value=Sony"

Dan even uitlezen en met een UPDATE-query de boel aanpassen.
 
Thomas van den Heuvel

Thomas van den Heuvel

10/04/2015 12:08:37
Quote Anchor link
- gebruik MySQLi of PDO in plaats van mysql_-functies
- zorg dat je een character encoding selecteert bij het maken van je database-connectie

En dan wat Aar zegt: bak een formuliertje waarbij je refereert aan hardwarebeheer.id via een variabele in je URL. (aanroep: wijzig.php?id=1234, uitlezen in wijzig.php via $_GET['id']).
 
Niels Hurkmans

Niels Hurkmans

10/04/2015 12:29:50
Quote Anchor link
Bedankt voor de reacties!

De id is in dit geval het serienummer van de PC en is ook de PK, moet ik dit veranderen naar autoincrement zodat er steeds een automatische unieke ID word gemaakt voor elke nieuwe configuratie?
Mijn database tabel ziet er nu zo uit:

Afbeelding
Gewijzigd op 10/04/2015 12:30:31 door Niels Hurkmans
 
Thomas van den Heuvel

Thomas van den Heuvel

10/04/2015 12:35:15
Quote Anchor link
Niels Hurkmans op 10/04/2015 12:29:50:
moet ik dit veranderen naar autoincrement zodat er steeds een automatische unieke ID word gemaakt voor elke nieuwe configuratie?

Dat lijkt mij wel zo handig ja.

EDIT: actually: misschien moet je het serienummer van een PC in een apart veld opslaan met de eigenschap "UNIQUE" als deze ook echt uniek is. Daarnaast heb je een auto-increment veld die als enig doel heeft om de informatie van een record "bij elkaar te houden".
Gewijzigd op 10/04/2015 12:37:05 door Thomas van den Heuvel
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

10/04/2015 13:12:13
Quote Anchor link
Als het serienummer uniek is dan is het niet nodig om nog eens extra een unieke auto increment kolom als primary key te gebruiken. Men noemt dit niet voor niets surrogate keys.
 
Niels Hurkmans

Niels Hurkmans

10/04/2015 14:01:46
Quote Anchor link
Het probleem is dat de serienummers van de pc's die we hier hebben nogal lang zijn, voorbeeld: CZCXXXXXX

Hoe krijg ik dit voor elkaar: "bak een formuliertje waarbij je refereert aan hardwarebeheer.id via een variabele in je URL. (aanroep: wijzig.php?id=1234, uitlezen in wijzig.php via $_GET['id'])."
Het formulier maken is geen probleem, maar hoe zorg ik er voor dat als ik op een van de configuraties klik (op het ID denk ik) dat ik dan automatisch naar die pagina word gestuurd waarop ik de configuratie kan aanpassen?
 
- Ariën  -
Beheerder

- Ariën -

10/04/2015 14:08:13
Quote Anchor link
Je haalt met een SELECT-query dan de juiste gegevens op in wijzig.php, aan de hand van het ID-nummer.
 
Thomas van den Heuvel

Thomas van den Heuvel

10/04/2015 14:34:43
Quote Anchor link
Ger van Steenderen op 10/04/2015 13:12:13:
Als het serienummer uniek is dan is het niet nodig om nog eens extra een unieke auto increment kolom als primary key te gebruiken. Men noemt dit niet voor niets surrogate keys.

Het serienummer van het apparaat zou je als een foreign key kunnen beschouwen waarmee je een apparaat uniek identificeert. Het (aparte) auto_increment id daarintegen is de kapstok waar je deze en andere informatie aan ophangt.

Je kunt niet op voorhand zeggen dat het serienummer geschikt is als PK simpelweg omdat deze alle uit unieke waarden bestaan, dit moet ook blijken uit het gebruik. Stel bijvoorbeeld dat om wat voor reden dan ook het serienummer van een apparaat kan veranderen (er worden bijvoorbeeld onderdelen vervangen of wat dan ook), met jouw oplossing zul je dan ook gerelateerde tabellen moeten gaan omnummeren of je moet in deze tabellen constraints hangen dat daarin de waarden van foreign keys kunnen veranderen ofzo maar dat lijkt mij (als dat al kan) niet bepaald intuïtief.

Waarom niet voor een oplossing kiezen waar je dit probleem helemaal niet hebt? Het is ook een makkelijke rule-of-thumb: introduceer in alle tabellen (behalve wellicht koppeltabellen tenzij daar weer meer informatie in zit behalve enkel foreign keys) gewoon een auto_increment kolom.

Daarnaast is nog het issue met de indexeerbaarheid als deze serienummers (erg) lang zijn... Afhankelijk van (de ontwikkeling van) de lengte van de serienummers zou dat een probleem kunnen zijn.

Maar waarom zou je een oplossing kiezen waarbij je wellicht rekening moet houden met dit soort zaken als er een simpel alternatief is.
 
Niels Hurkmans

Niels Hurkmans

10/04/2015 15:02:04
Quote Anchor link
IK maak dus een aparte pagina met daarin een select-query en dan een update-query? Of zit ik nu helemaal mis?
 
- Ariën  -
Beheerder

- Ariën -

10/04/2015 15:03:43
Quote Anchor link
Ja, eerst haal je de data op met een SELECT-query, en zodra er gekozen is om het formulier te versturen, dan voer je een UPDATE-query uit.
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

14/04/2015 14:07:57
Quote Anchor link
Thomas van den Heuvel op 10/04/2015 14:34:43:
Het serienummer van het apparaat zou je als een foreign key kunnen beschouwen waarmee je een apparaat uniek identificeert. Het (aparte) auto_increment id daarintegen is de kapstok waar je deze en andere informatie aan ophangt.

Nee, de primary key is de kapstok waaraan de informatie hangt, of dit nu een surrogate key of een natural key is, is in die zin niet relevant.

Thomas van den Heuvel op 10/04/2015 14:34:43:
Je kunt niet op voorhand zeggen dat het serienummer geschikt is als PK simpelweg omdat deze alle uit unieke waarden bestaan, dit moet ook blijken uit het gebruik. Stel bijvoorbeeld dat om wat voor reden dan ook het serienummer van een apparaat kan veranderen (er worden bijvoorbeeld onderdelen vervangen of wat dan ook), met jouw oplossing zul je dan ook gerelateerde tabellen moeten gaan omnummeren of je moet in deze tabellen constraints hangen dat daarin de waarden van foreign keys kunnen veranderen ofzo maar dat lijkt mij (als dat al kan) niet bepaald intuïtief.

De surrogate(keys) community zal je van harte verwelkomen, dit is een argument wat vaak gebruikt wordt door de voorstanders van de auto-generated keys.
In theorie is een key die unique en NOT NULL is prima geschikt als PK, dat zijn namelijk de enige voorwaarden die gesteld worden aan een PK.
Als je in MySQL een auto increment op een kolom zet, geef je daarmee alleen een default waarde aan, zonder verdere maatregelen voorkom je niet dat die kolom achteraf nog gewijzigd kan worden.
Nee dat is niet logisch, noch is het logisch om een serienummer van een apparaat te wijzigen omdat je een onderdeel vervangt.

Thomas van den Heuvel op 10/04/2015 14:34:43:
Maar waarom zou je een oplossing kiezen waarbij je wellicht rekening moet houden met dit soort zaken als er een simpel alternatief is.

Het is geen alternatief, het is een extra.
Als er een business-rule is die bepaalt dat een serienummer uniek moet zijn kan je dat niet afdwingen met alleen een AI key, dan zal er daarnaast een unique constraint moeten komen op het serienummer.
Het probleem met de lengte van de index wordt dus niet mee verholpen.

Natuurlijk speelt de lengte van een PK een rol bij het maken van de meest optimale keuze, en zijn er ook nog andere factoren die daar van inloed op (zouden moeten) zijn, maar naar mijn mening moet je de verschillende opties tegen elkaar afwegen en niet zonder meer een algemene regel hebben een AI kolom in elke tabel te zetten.
Gewijzigd op 14/04/2015 14:09:49 door Ger van Steenderen
 



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.