waarde uit vorige rij ophalen
ik ben een forum aan het maken maar dan moet je bijvoorbeeld ook de verschillende forums omhoog of omlaag kunnen verplaatsen
nu zou je kunnen zeggen, verander de ID naar degene die erboven staat
dat is ook mijn idee
maar nu heb ik bijvoorbeeld id 1, 2 en 5.
en dan moetten 5 en 2 verwisseld worden, maar hoe doe ik dat dan ?
Vincent.
Iets meer uitleg graag. Waarom zou je verschillende forums omhoog of omlaag willen plaatsen? Het id moetje vanaf blijven, je kan wel een extra veld toevoegen, en die gaan verplaatsen. Ik heb daar geloof ik nog wel ergens een voorbeeldcode voor liggen.
http://phphulp.robertdeiman.net/menu.php
Als dit ongeveer is wat je zoekt kan ik de code wel posten. Maar ik dacht dat er voor het topic waarvoor ik dit maakte nog iemand was die zoiets had gemaakt, dat zag er erg goed uit.
ik neem aan dat je bekent ben met de phpBB forums en hun manier van veplaatsen van forums
die link die je net postte was ongeveer net zo`n idee
Maar onderstaand is de voorbeeldcode hiervoor, moet je maar eens kijken wat je er mee kan.
Code (php)
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
94
95
96
97
98
99
100
101
102
103
104
105
106
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
94
95
96
97
98
99
100
101
102
103
104
105
106
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>Wijzig menuvolgorde</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<style type="text/css">
.menuitem{
display:block;
background-color:#cccccc;
width:50px;
float:left;
}
</style>
</head>
<body>
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);
// maak database verbinding
$db = mysql_connect("localhost","robertdeiman_net","dbpass") or die ( "Het maken van de verbinding met de database is mislukt");
//$db = mysql_connect("localhost","root") or die ( "Het maken van de verbinding met de database is mislukt");
mysql_select_db("robertdeiman_net_1",$db);
if(!isset($_GET['up']) && !isset($_GET['down'])){
for($i=1;$i<=4;$i++){
mysql_query("UPDATE menu SET nummer = ".$i." WHERE id = ".$i)or trigger_error(mysql_error());
}
}
//haal hoogste nummer op
$maxnr_row = mysql_fetch_assoc(mysql_query("SELECT MAX(nummer) AS maximum FROM menu"))or trigger_error(mysql_error());
$maxnr = $maxnr_row['maximum'];
//controleer of er op de downlink is geklikt
if(isset($_GET['down']) && is_numeric($_GET['down']) && isset($_GET['nummer']) && is_numeric($_GET['nummer'])){
if($_GET['nummer'] > $maxnr || $_GET['nummer'] < 1){
echo 'U moet het script zijn werk laten doen en er niet zelf mee gaan prutsen';
}
else{
//bepaal het nummer van de andere link die van plaats veranderd
$nr_change=$_GET['nummer']+1;
//controleer of het wel mogelijk is een item nog verder op te schuiven
if($nr_change >$maxnr){
echo 'Dit Item kan niet nog verder naar het einde van het menu worden geschoven';
}
//als op kan schuiven, voer dan de update uit
else{
$downqry = "SELECT id FROM menu WHERE nummer = '".$nr_change."'";
$downrow = mysql_fetch_assoc(mysql_query($downqry));
$update_down = mysql_query("UPDATE menu SET nummer = nummer+1 WHERE id=".$_GET['down']);
if (!$update_down){
trigger_error(mysql_error());
}
$update_up = mysql_query("UPDATE menu SET nummer = nummer-1 WHERE id=".$downrow['id']);
if (!$update_up){
trigger_error(mysql_error());
}
}
}
}
//controleer of op de uplink is geklikt
if(isset($_GET['up']) && is_numeric($_GET['up']) && isset($_GET['nummer']) && is_numeric($_GET['nummer'])){
if($_GET['nummer'] > $maxnr || $_GET['nummer'] < 1){
echo 'U moet het script zijn werk laten doen en er niet zelf mee gaan prutsen';
}
else{
// bepaal het nummer van de andere link die van plaats veranderd
$nr_change=$_GET['nummer']-1;
// controleer of het mogelijk is het gekozen item nog verder omhoog te schuiven
if($nr_change == 0){
echo 'Dit Item kan niet nog verder naar het begin van het menu worden geschoven';
}
//als het goed is gekeurd, dan de rijen weer updaten.
else{
$upqry = "SELECT id FROM menu WHERE nummer = '".$nr_change."'";
$uprow = mysql_fetch_assoc(mysql_query($upqry));
$update_up = mysql_query("UPDATE menu SET nummer = nummer-1 WHERE id=".$_GET['up']);
if (!$update_up){
trigger_error(mysql_error());
}
$update_down = mysql_query("UPDATE menu SET nummer = nummer+1 WHERE id=".$uprow['id']);
if (!$update_down){
trigger_error(mysql_error());
}
}
}
}
$sql = "SELECT linknaam,url,id,nummer FROM menu ORDER BY nummer ASC";
$result = mysql_query($sql);
if($result){
while($row = mysql_fetch_assoc($result)){
echo '<p><a href="'.$row['url'].'" class="menuitem">'.$row['linknaam'].'</a> <a href="?up='.$row['id'].'&nummer='.$row['nummer'].'">omhoog</a> <a href="?down='.$row['id'].'&nummer='.$row['nummer'].'">omlaag</a></p>';
}
}
else{
trigger_error(mysql_error());
}
?>
</body>
</html>
<html>
<head>
<title>Wijzig menuvolgorde</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<style type="text/css">
.menuitem{
display:block;
background-color:#cccccc;
width:50px;
float:left;
}
</style>
</head>
<body>
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);
// maak database verbinding
$db = mysql_connect("localhost","robertdeiman_net","dbpass") or die ( "Het maken van de verbinding met de database is mislukt");
//$db = mysql_connect("localhost","root") or die ( "Het maken van de verbinding met de database is mislukt");
mysql_select_db("robertdeiman_net_1",$db);
if(!isset($_GET['up']) && !isset($_GET['down'])){
for($i=1;$i<=4;$i++){
mysql_query("UPDATE menu SET nummer = ".$i." WHERE id = ".$i)or trigger_error(mysql_error());
}
}
//haal hoogste nummer op
$maxnr_row = mysql_fetch_assoc(mysql_query("SELECT MAX(nummer) AS maximum FROM menu"))or trigger_error(mysql_error());
$maxnr = $maxnr_row['maximum'];
//controleer of er op de downlink is geklikt
if(isset($_GET['down']) && is_numeric($_GET['down']) && isset($_GET['nummer']) && is_numeric($_GET['nummer'])){
if($_GET['nummer'] > $maxnr || $_GET['nummer'] < 1){
echo 'U moet het script zijn werk laten doen en er niet zelf mee gaan prutsen';
}
else{
//bepaal het nummer van de andere link die van plaats veranderd
$nr_change=$_GET['nummer']+1;
//controleer of het wel mogelijk is een item nog verder op te schuiven
if($nr_change >$maxnr){
echo 'Dit Item kan niet nog verder naar het einde van het menu worden geschoven';
}
//als op kan schuiven, voer dan de update uit
else{
$downqry = "SELECT id FROM menu WHERE nummer = '".$nr_change."'";
$downrow = mysql_fetch_assoc(mysql_query($downqry));
$update_down = mysql_query("UPDATE menu SET nummer = nummer+1 WHERE id=".$_GET['down']);
if (!$update_down){
trigger_error(mysql_error());
}
$update_up = mysql_query("UPDATE menu SET nummer = nummer-1 WHERE id=".$downrow['id']);
if (!$update_up){
trigger_error(mysql_error());
}
}
}
}
//controleer of op de uplink is geklikt
if(isset($_GET['up']) && is_numeric($_GET['up']) && isset($_GET['nummer']) && is_numeric($_GET['nummer'])){
if($_GET['nummer'] > $maxnr || $_GET['nummer'] < 1){
echo 'U moet het script zijn werk laten doen en er niet zelf mee gaan prutsen';
}
else{
// bepaal het nummer van de andere link die van plaats veranderd
$nr_change=$_GET['nummer']-1;
// controleer of het mogelijk is het gekozen item nog verder omhoog te schuiven
if($nr_change == 0){
echo 'Dit Item kan niet nog verder naar het begin van het menu worden geschoven';
}
//als het goed is gekeurd, dan de rijen weer updaten.
else{
$upqry = "SELECT id FROM menu WHERE nummer = '".$nr_change."'";
$uprow = mysql_fetch_assoc(mysql_query($upqry));
$update_up = mysql_query("UPDATE menu SET nummer = nummer-1 WHERE id=".$_GET['up']);
if (!$update_up){
trigger_error(mysql_error());
}
$update_down = mysql_query("UPDATE menu SET nummer = nummer+1 WHERE id=".$uprow['id']);
if (!$update_down){
trigger_error(mysql_error());
}
}
}
}
$sql = "SELECT linknaam,url,id,nummer FROM menu ORDER BY nummer ASC";
$result = mysql_query($sql);
if($result){
while($row = mysql_fetch_assoc($result)){
echo '<p><a href="'.$row['url'].'" class="menuitem">'.$row['linknaam'].'</a> <a href="?up='.$row['id'].'&nummer='.$row['nummer'].'">omhoog</a> <a href="?down='.$row['id'].'&nummer='.$row['nummer'].'">omlaag</a></p>';
}
}
else{
trigger_error(mysql_error());
}
?>
</body>
</html>
en zodra je die aanpast dat het getal dan wordt opgeteld of er vanaf wordt gehaalt
maar dat zou betekenen dat ik een nieuwe rij met een nieuwe auto_increment moet maken
maar aangezien ik al type_id Primary en auto_increment heb gegeven is dit niet mogelijk
en om het zo simpel mogelijk te houden voor de administrator moet het niet zo zijn dat hij zelf nog helemaal moet gaan uitvogelen waar die komt te staan door zelf een getal te moeten invoeren
Waarom ik dit zo heb gedaan is omdat je risico loopt als je met de id gaat werken. Als je die kolom nu toevoegd kan je een heel simpel scriptje maken waarmee je in eerste instantie alle waarden al aangeeft.
Als jij met je id gaat "schuiven" zal je een omweg moeten zoeken (de id die je wil verschuiven eerst een id geven die nog niet bestaat -> MAX id + 1) dan de andere id's veranderen, en dan de id die je wilt veranderen, terug zetten naar de waarde waar je wilt dat die komt.
Zoals je leest nogal ingewikkeld.
ik zal eens even kijken
iniedergeval bedankt :)