[PHP/MySQL] Simpel updaten complete tabel

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • pierre-oord
  • Registratie: April 2002
  • Laatst online: 10-02 23:00
Om een aantal instellingen voor een website aan te passen moet ik een hele tabel structuur kunnen aanpassen. De eerste kolom in de tabel is de setting name, deze geef ik gewoon weer op een webpagina, met daarachter het invulveld met de waarde. Dit werkt goed, zie het volgende stuk PHP code:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# Tabel is een tabel met 3 kolommen, namelijk: id, name, contents.
# Name wordt weergegeven waarvan je de waarde (contents) moet kunnen aanpassen.

$query = mysql_query("SELECT * FROM ".$settings_table) or die(mysql_error());
$rows = mysql_num_rows($query);
if ($rows == 0) {
    die ('Error receiving settings from database!');
}
echo '<form action="index.php?page=admin_change_settings" method="post" name="change_settings">';
echo '<table width="100%" border="0" align="center" cellpadding="0" cellspacing="3">';

while($disp = mysql_fetch_array($query)){
    echo '<tr><td><strong>'.$disp['name'].'</strong></td>';
    if (strlen($disp['contents']) < 30){
        echo '<td><input type="text" name="'.$disp['name'].'" size="70" value="'.$disp['contents'].'"></td>';
    } else {
        echo '<td><textarea name="'.$disp['name'].'" cols="70" rows="7">'.$disp['contents'].'</textarea></td>';
    }
    echo '</tr>';
}
echo '<tr><td align="center" colspan="2"><input name="Update" type="submit" value="Update"></td></tr>';
echo '</table></form>';


Nu ben ik aangeland bij de update pagina, en was bezig totdat ik dacht: Dit gaat niet werken. Het is niet zo'n mooie code, ik denk daarom ook dat er betere manieren voor zijn, maar zou graag willen horen wat volgens jullie de snelste manier is om dit in elkaar te zetten. Op deze manier hoef ik dan niet als er een nieuwe setting komt in de database meteen de pagina's aan te passen:

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
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $ud_accesslevel = addslashes ($_POST['ud_accesslevel']);
    $ud_password = addslashes ($_POST['ud_password']);
    $ud_firstname = addslashes ($_POST['ud_firstname']);

    $query = mysql_query("SELECT * FROM ".$settings_table) or die(mysql_error());
    $rows = mysql_num_rows($query);
    if ($rows == 0) {
        die ('Error receiving settings from database!');
    }
    
    $query = "UPDATE ".$settings_table." SET ";
    $disp_row = 0;
    
    while($disp = mysql_fetch_array($query)){
        $disp_row++;
        if ($disp_row == $rows){
            $query .= $disp['name']."='".$disp['contents']."'";
        } else {
            $query .= $disp['name']."='".$disp['contents']."',";
        }
    }
     # Dit werkt dus maar voor 1 rij. De mysql_query moet eigenlijk de while lus staan, maar da's niet zo handig, voor een redelijke lijst settings is dat nogal wat update-werk...
    mysql_query($query) or die("Bad query: " . mysql_error());
    echo '<div align="center"><strong>Settings changed!</strong></div><br>';
}


Het lijkt erop dat ik eigenlijk gewoon in de while lus ook de query moet laten uitvoeren, voor iedere rij wordt dan een query uitgevoerd, dit lijkt me erg database intensief. Volgens mij kunnen er ook meer query's in 1 "mysql_query" worden meegestuurd door een puntkomma tussen te voegen, is dit de juiste manier, of kan het nog handiger? Bedankt!

edit:
Dit gebruik ik nu wat juist werkt maar alles behalve snel natuurlijk...:
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
<?php
if ($isadmin != 1){
    die ('Only admin access allowed!');
}
 
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $query = mysql_query("SELECT * FROM ".$settings_table) or die(mysql_error());
    $rows = mysql_num_rows($query);
    if ($rows == 0) {
        die ('Error receiving settings from database!');
    }
    
    while($disp = mysql_fetch_array($query)){
        # DISP gaat iedere rij af. In $disp['name'] staat de variabele naam die moet worden geupdate.
        $name = addslashes($_POST[$disp['name']]);
        $query_settings = "UPDATE ".$settings_table." SET 
        contents='".$name."' WHERE name='".$disp['name']."'";
        mysql_query($query_settings) or die("Bad query: " . mysql_error());
    }
    echo '<strong>Settings changed!</strong><br>';
} else {
    echo '<strong>No data POST-ed!</strong><br>';
}
include ('pages/admin_change_settings.php');
    
?>

[ Voor 47% gewijzigd door pierre-oord op 04-06-2005 15:36 ]


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:44

crisp

Devver

Pixelated

code:
1
2
3
4
5
REPLACE INTO
  table (field1, field2)
VALUES
  (value1, value2),
  (value1, value2)

lijkt me een oplossing voor jouw probleem. Echter heb je dan geen controle-mogelijkheid of de key al dan niet bestaat in je tabel.

[ Voor 23% gewijzigd door crisp op 04-06-2005 20:10 ]

Intentionally left blank