MySQL UPDATE SET $variabele werkt niet?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

T voskuil

t voskuil

01/03/2011 17:22:44
Quote Anchor link
Hallo,
in mijn script heb ik wat code, en dan komen deze regels:

echo $fieldnamen;
mysql_query("UPDATE table1 SET $fieldnamen='$iValue' WHERE Naam='$sNaam'");

als ik de pagina open zie ik op de plaats dat ik $fieldnamen laat echoen een woord dat de naam van een kolom is. bijvoorbeeld: kolom3. Maar als ik bovenstaand script gebruik en ik kijk in de mysql table is er niks veranderd.
Als ik $fieldnamen in de query vervang door het woord kolom3 vult hij wel gewoon $iValue in in de table in kolom3!? Hoe kan ik ervoor zorgen dat $iValue in de kolom $fieldnamen komt??

alvast bedankt
 
PHP hulp

PHP hulp

15/01/2025 01:06:07
 
Jordi Kroon

Jordi Kroon

01/03/2011 17:26:26
Quote Anchor link
zet dit bovenin je script:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
ini_set('display_errors', 'On');
error_reporting(E_ALL);
?>
Gewijzigd op 01/03/2011 17:26:54 door Jordi Kroon
 
T voskuil

t voskuil

01/03/2011 17:31:21
Quote Anchor link
nadat ik dat gedaan heb geeft hij geen errors ;/
 
Wouter J

Wouter J

01/03/2011 17:36:29
Quote Anchor link
- $fieldnamen waarom die $?
- Bouw goede foutafhandeling in
- Variabelen buiten quotes
- Denk aan SQL injection
- $iValue en $sNaam ik denk dat je variabele aan het kopiëren bent, dit is fout en moet je niet doen
 

01/03/2011 17:42:34
Quote Anchor link
Wouter J op 01/03/2011 17:36:29:
(...)
- $iValue en $sNaam ik denk dat je variabele aan het kopiëren bent, dit is fout en moet je niet doen


Dat kan je niet zomaar stellen. Als de data gevalideerd is dan is het juist handig om wel te doen. Zoals die $iValue, dat duid er waarschijnlijk op dat er een integer in die variabele zit. Dat kan je mooi krijgen door gewoon te type casten.
Maar dat betekend dus wel dat die variabele niet tussen enkele quotes in de query mag.
 
T voskuil

t voskuil

01/03/2011 17:52:04
Quote Anchor link
Wouter, de laatste 3 punten die u zegt die hebben er helaas niks mee te maken, want zoals ik zei als ik $fieldnamen vervang door kolom3 wordt er wel gewoon de $iValue (bv 300) ingevuld in de table. Dus de andere variabelen zijn allemaal goed.
Als ik fieldnamen zonder $ in zou vullen, dan zou php kijken in de table naar de kolom genaamd fieldnamen, en die kolom bestaat niet. PHP moet juist de string opgeslagen in $fieldnamen als kolomnaam gebruiken.

Karl, bedoelt u dat "type casten" de oplossing is voor dit probleem of ging u alleen op Wouter J. in?
 
Jordi Kroon

Jordi Kroon

01/03/2011 17:52:55
Quote Anchor link
geef eens wat meer code :) Waar worden die variabelen aangemaakt ?
Heb je ook fouthandeling in je script
 
T voskuil

t voskuil

01/03/2011 18:01:42
Quote Anchor link
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
<?php
ini_set('display_errors', 'On');
error_reporting(E_ALL);

if($_SERVER['REQUEST_METHOD'] == 'POST'){
/*connecten*/
mysql_connect("localhost", "*****", "*****") or die(mysql_error());
mysql_select_db("database1") or die(mysql_error());

foreach($_POST as $sWeapon => $iValue){
if(is_numeric($iValue)){
    $query2 = mysql_query("SELECT * FROM table1 WHERE Naam='$sWeapon'");
    $aCurrentPrices = mysql_fetch_array($query2, MYSQL_NUM);

        
    $kolomnr = 1;
    $nullcheck = false;
    while($nullcheck == false){
        $currentvalue = $aCurrentPrices[$kolomnr];
        if(is_null($currentvalue)){
        $nullcheck = true;
        
        $query_output = mysql_query("SELECT * FROM table1 WHERE Naam='$sWeapon'");

        for ($i = $kolomnr; $i < $kolomnr + 1; $i++) {
        $fieldnamen = mysql_field_name($query_output, $i)."<br/>";
        echo $fieldnamen;
        echo $sWeapon;
        echo $iValue;
        mysql_query("UPDATE table1 SET $fieldnamen='$iValue' WHERE Naam='$sWeapon'");
        }
        
        }

        else{
        $kolomnr = $kolomnr + 1;
        }
    }

    
    /*aantal updaten*/
    $query = mysql_query("SELECT * FROM table1 WHERE Naam='$sWeapon'") or die(mysql_error());
    $row = mysql_fetch_row($query) or die(mysql_error());
    $aantalvoor = ($row[1]);
    $aantalna = $aantalvoor + 1;
    mysql_query("UPDATE table1 SET aantal='$aantalna' WHERE Naam='$sWeapon'") or die(mysql_error());
}
}

}

?>
 
Jordi Kroon

Jordi Kroon

01/03/2011 18:17:19
Quote Anchor link
- Letop mysql injection (mysql_real_escape_string
- variabelen buiten de quotes houden
- Bouw fouthandeling in Geen or die
- gebruik mysql_fetch_assoc ipv array
- gebruik geen * dit is een wildcard , Selecteer war je wilt
 
Wesley PHP

Wesley PHP

01/03/2011 18:28:32
Quote Anchor link
@Jordi,

misschien beetje offtopic maar als je alles uit je tabel nodig hebt mag je dan nog geen * gebruiken?
 
Jasper DS

Jasper DS

01/03/2011 18:29:20
Quote Anchor link
neen, geen idee waarom maar het heeft iets met de snelheid te maken denk ik. (en ook met "netjes scripten" bij sql schrijf je wat je doet.
Gewijzigd op 01/03/2011 18:30:05 door Jasper DS
 

01/03/2011 18:33:29
Quote Anchor link
T voskuil op 01/03/2011 17:52:04:
Karl, bedoelt u dat "type casten" de oplossing is voor dit probleem of ging u alleen op Wouter J. in?


Ik ging op Wouter in dat zijn laatste stelling niet zo stellig gesteld kan worden.

PHP Jasper op 01/03/2011 18:29:20:
neen, geen idee waarom maar het heeft iets met de snelheid te maken denk ik. (en ook met "netjes scripten" bij sql schrijf je wat je doet.

Natuurlijk alles mag, maar het is niet handig. Het mooie aan SQL is dat het self documenting is. Verder is * een wildcard, wat wilt zeggen dat de database engine in principe zelfs nul velden mag teruggeven. En zoals Jasper al opmerkt, het gaat om snelheid, de database hoeft niet op te zoeken welke velden er opgehaald worden. En er hoeft minder verwerkt te worden als niet alles opgehaald hoeft te worden.
 
T voskuil

t voskuil

01/03/2011 18:48:50
Quote Anchor link
heeft iemand nu al een idee hoe je de string van $fieldnamen in de query kan weergeven????
 

01/03/2011 19:01:35
Quote Anchor link
- Gebruik geen 'or die' als foutafhandeling, zie wat elke functie teruggeeft en gebruik dat in if statements.
- De foreach is niet logisch. Bovendien kan de submit knop en andere waarden soms mee worden gestuurd.
- Gebruik duidelijke namen. $query2 is geen duidelijke naam. table1 ook niet.
- Selecteer wat je wilt hebben, gebruik geen *.
- Foutafhandeling ontbreekt.
- Waarvoor dient die nullcheck?
- Waarvoor dient $query_output gedeelte tot de eerstvolgende mysql_query?
- Waarvoor dient het laatste gedeelte?
 
T voskuil

t voskuil

01/03/2011 19:06:06
Quote Anchor link
Karl ik snap dat de code niet geweldig is maar ik moet eerst even weten hoe ik $fieldnamen in de query kan opnemen voordat ik de code verder ga verbeteren.
 

01/03/2011 19:10:17
Quote Anchor link
In de database kijken hoe ze heten.
 
T voskuil

t voskuil

01/03/2011 19:12:54
Quote Anchor link
wat nou als de string in $fieldnamen elke keer dat er gepost wordt verandert.... dus de kolom verandert...
 



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.