[PHP] wegschrijven van gegevens naar database gaat fout.

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • iznogood
  • Registratie: September 2001
  • Niet online
code:
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
                                                                        $con=mysql_connect($host,$user,$pass) or die("Geen verbinding mogelijk");
                                    @mysql_select_db($database,$con) or die("Database kan niet geselecteerd worden");
                                    
                                    $query="SELECT * FROM colorsettings";
                                    $result=mysql_query($query,$con) or die("query kan niet worden uitgevoerd");
                                    $row=mysql_fetch_row($result);
                                    $query="UPDATE colorsettings SET ";
                                    
                                    if($val1){} else $val1=$row[0];
                                    if($val2){} else $val2=$row[1];
                                    if($val3){} else $val3=$row[2];
                                    if($val4){} else $val4=$row[3];
                                    if($val5){} else $val5=$row[4];
                                    if($val6){} else $val6=$row[5];
                                    if($val7){} else $val7=$row[6];
                                    if($val8){} else $val8=$row[7];

                                    $query=$query+"normal=".$val1;
                                    $query=$query+",headings=".$val2;
                                    $query=$query+",links=".$val3;
                                    $query=$query+",linksonmouse=".$val4;
                                    $query=$query+",linksvisited=".$val5;
                                    $query=$query+",linksclicked=".$val6;
                                    $query=$query+",headstyle=".$val7;
                                    $query=$query+",textstyle=".$val8." WHERE normal='*'";

                                    $result=mysql_query($query,$con) or die($query); }


Ik ben bezig met het schrijven van een website waar je kleuren kunt selecteren en opslaan zodat deze de volgende keer worden weergegeven op de website.

Nu is het zo dat bij het wegschrijven van de gegevens telkens wat fout gaat. Uit die($query); op de laatste regel komt er continu 00 WHERE normal='*' uit. Er is wel verbinding met de database en degelijke.

Graag een frisse kijk op dit stukje code....

[ Voor 11% gewijzigd door iznogood op 27-09-2004 21:26 ]

Just as Good


Acties:
  • 0 Henk 'm!

  • oscarvdb
  • Registratie: December 2001
  • Laatst online: 20-05 09:45

oscarvdb

and like that...

Je voegt variabelen verkeerd in een variabele.
$a = $b + 3; betekent namelijk dat je $b wil _optellen_ bij 3.
$a = $b . "hoi"; betekent daarentegen dat je $b voor 'hoi' wil zetten.

Voorbeeldje:
$query=$query."normal=".$val1.",";
De + dus vervangen door .

Nog makkelijker:
$query.="normal=".$val1.",";
Dan wordt het aan het eind van $query gevoegd.

Je if's zijn ook een beetje vreemd, zou if(!isset($val1)) $val1=$row[0]; niet makkelijker zijn?
Ik snap trouwens niet helemaal wat je met die regels wil bereiken, daar zou ik meer code voor moeten helpen.

Nog steeds proberen? Echo dan de query eens even voordat je 'm uit wil voeren. Meestal zie je het dan meteen.

Maar nu moet het iig werken. :) Succes!

[ Voor 23% gewijzigd door oscarvdb op 27-09-2004 21:28 ]

... he's gone.


Acties:
  • 0 Henk 'm!

  • X-Lars
  • Registratie: Januari 2004
  • Niet online

X-Lars

Just GoT it.

Ja, zoiets dus: :)
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
$con=mysql_connect($host,$user,$pass) or die("Geen verbinding mogelijk");
@mysql_select_db($database,$con) or die("Database kan niet geselecteerd worden");

$query = "SELECT * FROM colorsettings";
$result = mysql_query($query,$con) or die("query kan niet worden uitgevoerd");

$row = mysql_fetch_row($result);

$query = "UPDATE colorsettings SET ";

if(!$val1) $val1=$row[0];
if(!$val2) $val2=$row[1];
if(!$val3) $val3=$row[2];
if(!$val4) $val4=$row[3];
if(!$val5) $val5=$row[4];
if(!$val6) $val6=$row[5];
if(!$val7) $val7=$row[6];
if(!$val8) $val8=$row[7];

$query .= "normal="+$val1+",";
$query .= "headings="+$val2+",";
$query .= "links="+$val3+",";
$query .= "linksonmouse="+$val4+",";
$query .= "linksvisited="+$val5+",";
$query .= "linksclicked="+$val6+",";
$query .= "headstyle="+$val7+",";
$query .= "textstyle="+$val8+" WHERE normal='*'";

$result = mysql_query($query,$con) or die($query);

Acties:
  • 0 Henk 'm!

  • iznogood
  • Registratie: September 2001
  • Niet online
oscarvdb schreef op 27 september 2004 @ 21:27:
Je voegt variabelen verkeerd in een variabele.
$a = $b + 3; betekent namelijk dat je $b wil _optellen_ bij 3.
$a = $b . "hoi"; betekent daarentegen dat je $b voor 'hoi' wil zetten.

Voorbeeldje:
$query=$query."normal=".$val1.",";
De + dus vervangen door .

Je if's zijn ook een beetje vreemd, zou if(!isset($val1) $val1=$row[0]; niet makkelijker zijn?
Ik snap trouwens niet helemaal wat je met die regels wil bereiken, daar zou ik meer code voor moeten helpen.

Maar nu moet het iig werken. :)
Dus $quote=$quote+"" moet dan ook $quote=$quote."" worden ??

Ik ga idd if(!isset($val1) $val1=$row[0]; gebruiken ... is makkelijker, maar ik kon er even niet op komen :) thanks.

Ik ben een pagina aan het maken met een colorselector. Deze pagina verstuurd de waarden van de kleuren ( vanuit JS ) naar de bovenstaande pagina en hier wordt dan gechecked welke waarden er veranderd zijn. Deze worden aangepast in de database.

Just as Good


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

iznogood schreef op 27 september 2004 @ 21:30:
Ik ben een pagina aan het maken met een colorselector. Deze pagina verstuurd de waarden van de kleuren ( vanuit JS ) naar de bovenstaande pagina en hier wordt dan gechecked welke waarden er veranderd zijn. Deze worden aangepast in de database.
Waarom zou je dan überhaupt checken? Het levert voor je query wel wat tijdswinst op als je dingen die niet veranderd zijn niet update, maar het kost je een hoop meer tijd in PHP om het allemaal te checken. Update gewoon standaard alles wat je binnen krijgt, dan heb je veel kortere en duidelijkere code, en volgens mij nog sneller ook.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • iznogood
  • Registratie: September 2001
  • Niet online
NMe84 schreef op 27 september 2004 @ 21:33:
[...]

Waarom zou je dan überhaupt checken? Het levert voor je query wel wat tijdswinst op als je dingen die niet veranderd zijn niet update, maar het kost je een hoop meer tijd in PHP om het allemaal te checken. Update gewoon standaard alles wat je binnen krijgt, dan heb je veel kortere en duidelijkere code, en volgens mij nog sneller ook.
Dit levert me denk ik een kortere code op. Zo zorg ik er iig voor dat er geen gevult veld leeggemaakt wordt.

Just as Good


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

PHP:
1
2
3
4
5
6
7
8
$con=mysql_connect($host,$user,$pass) or die("Geen verbinding mogelijk");
mysql_select_db($database,$con) or die("Database kan niet geselecteerd worden");

$query = "UPDATE colorsettings SET normal=".$val1.", headings=".$val2.", links=".$val3.
         ", linksonmouse=".$val4.", linksvisited=".$val5.", linksclicked=".$val6.
         ", headstyle=".$val7.", textstyle=".$val8." WHERE normal='*'";

$result = mysql_query($query,$con) or die($query);

Dit lijkt mij anders een heel stuk korter. Lege velden zou je niet van je formulier moeten kunnen krijgen, en als dat wel zo is kun je eventueel daar dan nog op checken. Maar wat jij allemaal controleert is IMHO allemaal overbodig. :)

[ Voor 25% gewijzigd door NMe op 27-09-2004 21:40 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • oscarvdb
  • Registratie: December 2001
  • Laatst online: 20-05 09:45

oscarvdb

and like that...

NMe84 schreef op 27 september 2004 @ 21:39:
PHP:
1
2
3
4
5
6
7
8
$con=mysql_connect($host,$user,$pass) or die("Geen verbinding mogelijk");
mysql_select_db($database,$con) or die("Database kan niet geselecteerd worden");

$query = "UPDATE colorsettings SET normal=".$val1.", headings=".$val2.", links=".$val3.
         ", linksonmouse=".$val4.", linksvisited=".$val5.", linksclicked=".$val6.
         ", headstyle=".$val7.", textstyle=".$val8." WHERE normal='*'";

$result = mysql_query($query,$con) or die($query);

Dit lijkt mij anders een heel stuk korter. Lege velden zou je niet van je formulier moeten kunnen krijgen, en als dat wel zo is kun je eventueel daar dan nog op checken. Maar wat jij allemaal controleert is IMHO allemaal overbodig. :)
Eensch :)
Heb niet echt inhoudelijk naar de code gekeken, alleen naar hoe er geen foutmeldingen zouden komen.

@TS, je code is nogal omslachtig :) Bouw er een algemene check omheen die controleert of er geen lege vakken zijn als dat echt nodig is, dan ben je tenminste een stuk sneller en eenvoudiger klaar. Of een javascriptje dat test of alle velden ingevuld zijn.

[ Voor 10% gewijzigd door oscarvdb op 27-09-2004 21:47 ]

... he's gone.


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

oscarvdb schreef op 27 september 2004 @ 21:46:
Of een javascriptje dat test of alle velden ingevuld zijn.
offtopic:
Vertrouwen op Javascript is nooit een goed plan bij checks op user input. JS kan uit staan, of de gebruiker draait een aangepaste versie van het script op zijn eigen pc, en voilà, beveiliging omzeild. ;) Altijd ook in PHP checken dus. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • iznogood
  • Registratie: September 2001
  • Niet online
NMe84 schreef op 27 september 2004 @ 21:52:
[...]

offtopic:
Vertrouwen op Javascript is nooit een goed plan bij checks op user input. JS kan uit staan, of de gebruiker draait een aangepaste versie van het script op zijn eigen pc, en voilà, beveiliging omzeild. ;) Altijd ook in PHP checken dus. :)
Sinds SP2 van MS WinXP moet je steeds zeggen dat je activex elementen in wilt schakelen. Genoeg mensen die die niet zullen doen denk ik.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
    if($clicked=="Save Changes") {  $clicked="1";
                                    $con=mysql_connect($host,$user,$pass) or die("Geen verbinding mogelijk");
                                    @mysql_select_db($database,$con) or die("Database kan niet geselecteerd worden");
                                    
                                    $query="SELECT * FROM colorsettings";
                                    $result=mysql_query($query,$con) or die("query kan niet worden uitgevoerd");
                                    $row=mysql_fetch_row($result);
                                    
                                    if(!isset($val1)) $val1=$row[0];
                                    if(!isset($val2)) $val2=$row[1];
                                    if(!isset($val3)) $val3=$row[2];
                                    if(!isset($val4)) $val4=$row[3];
                                    if(!isset($val5)) $val5=$row[4];
                                    if(!isset($val6)) $val6=$row[5];
                                    if(!isset($val7)) $val7=$row[6];
                                    if(!isset($val8)) $val8=$row[7];
                                    $query="UPDATE colorsettings SET 

normal='".$val1."',headings='".$val2."',links='".$val3."',linksonmouse='".$val4."',linksvisited='".$val5."',linksclicked='".$val6."',headstyle='".$val7."',te

xtstyle='".$val8."'";

                                    $result=mysql_query($query,$con) or die($query); }


Dit is de nieuwe code. Hij past nu dingen aan in de database. 1 probleem; hij vult alleen de velden waarvan hij van de vorige pagina variabelen heeft meegekregen, de anderen velden in de database maakt hij leeg :(

Just as Good


Acties:
  • 0 Henk 'm!

  • X-Lars
  • Registratie: Januari 2004
  • Niet online

X-Lars

Just GoT it.

Je kunt ook dit gebruiken:
PHP:
1
$val1 = isset($val1) ? $val1 : '0';

Hoe dit werkt laat zich wel raden denk ik :)

Edit: in jouw geval dus
PHP:
1
$val1 = isset($val1) ? $row[0] : '0';

[ Voor 28% gewijzigd door X-Lars op 27-09-2004 22:00 ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Haal die checks en die select query er nou uit....

En hoe ziet je form eruit op de pagina ervoor? Als je in dat formulier nou eens gewoon de waarden uit de database inlaadt, dan heb je in principe geen lege velden. En eventueel kun je daar op checken...

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • iznogood
  • Registratie: September 2001
  • Niet online
NMe84 schreef op 27 september 2004 @ 22:00:
Haal die checks en die select query er nou uit....

En hoe ziet je form eruit op de pagina ervoor? Als je in dat formulier nou eens gewoon de waarden uit de database inlaadt, dan heb je in principe geen lege velden. En eventueel kun je daar op checken...
You the man ... natuurlijk !!! Gewoon eerst de waarden inladen in de values van het form op de vorige pagina. Werkt perfect ! Thanks!!

Just as Good

Pagina: 1