[PHP] Update met variable velden

Pagina: 1
Acties:
  • 50 views sinds 30-01-2008

  • Tweaqer
  • Registratie: November 2002
  • Laatst online: 05-02 09:09
Beste tweakers ik heb eigenlijk twee vragen;
1) waarom gaat het fout met de onderstaande code :'(
2) hoe kan de onderstaande code getweaked worden? :Y) Dit moet volgens mij beter kunnen, maar ik kon zo snel even niet bedenken hoe. Zou iemand daar misschien een betere oplossing voor weten? _/-\o_

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
<?

  $id = $_POST['id'];
  $table = $_GET['table'];
  
  # start query
  $query = "UPDATE ". $table ."";
  
  #toevoegingen
  $titel = $_POST['titel'];
  if ($titel != "") { $query = "$query SET titel = '" . $titel . "'";  }
  
  $bericht = $_POST['bericht'];
  if ($bericht != "") { $query = "$query SET bericht = '" . $bericht . "'";  }
  
  $gebruiker = $_POST['gebruiker'];
  if ($gebruiker != "") { $query = "$query SET gebruiker = '" . $gebruiker . "'";  }
  
  $email = $_POST['email'];
  if ($email != "") { $query = "$query SET email = '" . $email . "'";  }
  
  $locatie = $_POST['locatie'];
  if ($locatie != "") { $query = "$query SET locatie = '" . $locatie . "'";  }
  
  $vantot = $_POST['vantot'];
  if ($vantot != "") { $query = "$query SET vantot = '" . $vantot . "'";  }
  
  $welkedatum = $_POST['welkedatum'];
  if ($welkedatum != "") { $query = "$query SET welkedatum = '" . $welkedatum . "'";  }
  
  $organisator = $_POST['organisator'];
  if ($organisator != "") { $query = "$query SET organisator = '" . $organisator . "'";  }
  
  $map = $bla -> $_POST['map'];
  if ($map != "") { $query = "$query SET map = '" . $map . "'";  }
  
  $media = $bla -> $_POST['media'];
  if ($media != "") { $query = "$query SET media = '" . $media . "'";  }
  
  #eind query
  $query = "$query WHERE id = '" . $id . "'";
  
  include("db.php");

  $blup = mysql_query($query) or die (mysql_error());
  
    echo "Het bestand is ge-update!<br><br />
    $query";
    mysql_close();


?>

Verwijderd

En wat gaat er mis bij die code?

Heb je ergens een te bekijken versie staan?

[ Voor 43% gewijzigd door Verwijderd op 25-07-2006 21:27 ]


  • Tweaqer
  • Registratie: November 2002
  • Laatst online: 05-02 09:09
Verwijderd schreef op dinsdag 25 juli 2006 @ 21:27:
En wat gaat er mis bij die code?
Hij update hem niet in alle gevallen.
Als ik alleen het bericht veld wil updaten gaat het goed, maar zodra ik meerdere velden ga updaten gaat het fout en pakt hij hem niet.

Bijvoorbeeld bij het updaten van een formulier dat gebruik maakt van titel, bericht, gebruiker en email krijg ik:

You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SET bericht = 'Bla Bla

[ Voor 31% gewijzigd door Tweaqer op 25-07-2006 21:33 ]


  • TheRookie
  • Registratie: December 2001
  • Niet online

TheRookie

Nu met R1200RT

regel 11 en verder: $query = moet zijn $query .=; nu overschrijf je de query elke keer
moeten er geen komma's tussen de verschillende SETs

definieer "gaat het fout" eens ? krijg je een sql error, of ....
als je een sql error krijgt, echo dan de $query eens voordat je 'm uitvoert

en je zou een functie kunnen maken die de vars checkt zodat je niet identieke code aan het dupliceren bent :)

[ Voor 34% gewijzigd door TheRookie op 25-07-2006 21:35 . Reden: beter lezen ]


  • Scott
  • Registratie: December 2004
  • Laatst online: 22:51

Scott

Ik ben, dus ik tweak

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
$id = $_POST['id'];
  $table = $_GET['table'];
  
  # start query
  $query_start = "UPDATE ". $table ."";
  
  #toevoegingen
  $titel = $_POST['titel'];
  if ($titel != "") { $query = "$query_start SET titel = '" . $titel . "'";  }
  
  $bericht = $_POST['bericht'];
  if ($bericht != "") { $query = "$query_start SET bericht = '" . $bericht . "'";  }
  
  $gebruiker = $_POST['gebruiker'];
  if ($gebruiker != "") { $query = "$query_start SET gebruiker = '" . $gebruiker . "'";  }
  
  $email = $_POST['email'];
  if ($email != "") { $query = "$query_start SET email = '" . $email . "'";  }
  
  $locatie = $_POST['locatie'];
  if ($locatie != "") { $query = "$query_start SET locatie = '" . $locatie . "'";  }
  
  $vantot = $_POST['vantot'];
  if ($vantot != "") { $query = "$query_start SET vantot = '" . $vantot . "'";  }
  
  $welkedatum = $_POST['welkedatum'];
  if ($welkedatum != "") { $query = "$query_start SET welkedatum = '" . $welkedatum . "'";  }
  
  $organisator = $_POST['organisator'];
  if ($organisator != "") { $query = "$query_start SET organisator = '" . $organisator . "'";  }
  
  $map = $bla -> $_POST['map'];
  if ($map != "") { $query = "$query_start SET map = '" . $map . "'";  }
  
  $media = $bla -> $_POST['media'];
  if ($media != "") { $query = "$query_start SET media = '" . $media . "'";  }
  
  #eind query
  $query = "$query WHERE id = '" . $id . "'";
  
  include("db.php");

  $blup = mysql_query($query) or die (mysql_error());
  
      echo "Het bestand is ge-update!<br><br />
    $query";
    mysql_close();


Dit lijkt er al meer op, hoewel ik variabelen buiten haakjes zou halen en zou kijken of POST-variabelen bestaan, anders krijg je van die lelijke warnings. Daarnaast weet ik niet wat $bla inhoudt, maar ik ga er maar van uit dat dat een object is. Zorg iig voor een betere naam daarvoor, want dit zegt niets natuurlijk.

Waar het fout gaat, is als je meerdere velden wilt updaten, elke keer $query wordt overschreven waardoor dus op het eind alleen het laatste veld dat is ingevuld wordt geüpdatet. Dit kan inderdaad op een makkelijkere manier, ik bewerk m'n post zo met de code daarvoor :)

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 15-02 09:21

Janoz

Moderator Devschuur®

!litemod

De foutmelding lijkt me redelijk duidelijk (ondanks dat je die niet in je topicstart hebt vermeld. Druk de query eens af en probeer zelf eens te bedenken waarom het fout gaat wanneer je meer dan 1 veld update.

Daarnaast voldoet een lap code met 2 kleine vraagjes erbij zonder aan te geven wat er nu eigenlijk precies mis gaat, wat voor foutmelding je krijgt en wat je al geprobeert hebt niet aan de
quickstart. Het topic gaat dan ook op slot.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'

Pagina: 1

Dit topic is gesloten.