[PHP] Hulp nodig met update query

Pagina: 1
Acties:
  • 626 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • ilovetechno
  • Registratie: Oktober 2001
  • Laatst online: 15:59
Het is al laat :z en het lukt me niet om deze query uit te laten. Hij is niet veilig.. Ik weet het maar het is voor intern gebruik.

Kan iemand mij helpen met de SQL syntax? Ik staar me al een uur blind |:(

alvast bedankt. Alle data wordt goed gepost en de sessie vars zijn gevuld.

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
<?php 
session_start();
?>
<?php 
switch ($_GET['action']){
    case wijzig: 
        //  taalkeuze
        $taal = $_SESSION['propol_taal'];
        $id = $_SESSION['propol_id'];
        $prod_naam = $_POST['naam'];
        $tekst = $_POST['tekst'];
        switch ($taal){
            case nl: $naam="naam_nl"; break;
            case nl: $text1="text_nl"; break;
            case de: $naam="naam_de"; break;
            case de: $text1="text_de"; break;
            case en: $naam="naam_en"; break;
            case en: $text1="text_en"; break;
            case fr: $naam="naam_fr"; break;
            case fr: $text1="text_fr"; break;
        }
        // mysql edit 
        mysql_connect("localhost", "test", "test") or die(mysql_error());
        mysql_select_db("vandermeij_prop") or die(mysql_error());
        $sql = "UPDATE producten SET $naam='$prod_naam' , $text='$tekst' WHERE id='$id'";
        mysql_query($sql) or die(mysql_error());;
    break;
}
?>

Acties:
  • 0 Henk 'm!

  • Koppensneller
  • Registratie: April 2002
  • Laatst online: 16:17

Koppensneller

winterrrrrr

PHP:
1
$sql = "UPDATE producten SET $naam='$prod_naam' , $text='$tekst' WHERE id='$id'";


Moet dat niet worden:

PHP:
1
$sql = "UPDATE producten SET naam='$prod_naam' , text='$tekst' WHERE id='$id'";


Let op de dollars voor "text" en "naam" :)

Acties:
  • 0 Henk 'm!

  • ilovetechno
  • Registratie: Oktober 2001
  • Laatst online: 15:59
KoppenSneller schreef op zaterdag 03 november 2007 @ 02:12:
PHP:
1
$sql = "UPDATE producten SET $naam='$prod_naam' , $text='$tekst' WHERE id='$id'";


Moet dat niet worden:

PHP:
1
$sql = "UPDATE producten SET naam='$prod_naam' , text='$tekst' WHERE id='$id'";


Let op de dollars voor "text" en "naam" :)
Nope..

Probleem is dat de rijen $naam variabel kunnen zijn ..

ik heb een kolom naam_nl / naam_de enz.. vandaar de switch :?

Acties:
  • 0 Henk 'm!

  • Koppensneller
  • Registratie: April 2002
  • Laatst online: 16:17

Koppensneller

winterrrrrr

Moeten er wel quotes om 'id'? Zodat ie zo wordt:

PHP:
1
$sql = "UPDATE producten SET $naam='$prod_naam' , $text='$tekst' WHERE id=$id";


Post anders eens de waarde van de $sql variabele :)

[ Voor 15% gewijzigd door Koppensneller op 03-11-2007 02:26 ]


Acties:
  • 0 Henk 'm!

  • --MeAngry--
  • Registratie: September 2002
  • Laatst online: 19-09 16:35

--MeAngry--

aka Qonstrukt

Deze vind ik ook wel creatief:
PHP:
1
2
3
4
5
6
7
8
9
10
switch ($taal){
            case nl: $naam="naam_nl"; break;
            case nl: $text1="text_nl"; break;
            case de: $naam="naam_de"; break;
            case de: $text1="text_de"; break;
            case en: $naam="naam_en"; break;
            case en: $text1="text_en"; break;
            case fr: $naam="naam_fr"; break;
            case fr: $text1="text_fr"; break;
        }


Je beseft hopelijk dat elke tweede taalcase nooit doorlopen wordt?

Tesla Model Y RWD (2024)


Acties:
  • 0 Henk 'm!

  • 418O2
  • Registratie: November 2001
  • Nu online
--MeAngry-- schreef op zaterdag 03 november 2007 @ 02:28:
Deze vind ik ook wel creatief:
PHP:
1
2
3
4
5
6
7
8
9
10
switch ($taal){
            case nl: $naam="naam_nl"; break;
            case nl: $text1="text_nl"; break;
            case de: $naam="naam_de"; break;
            case de: $text1="text_de"; break;
            case en: $naam="naam_en"; break;
            case en: $text1="text_en"; break;
            case fr: $naam="naam_fr"; break;
            case fr: $text1="text_fr"; break;
        }


Je beseft hopelijk dat elke tweede taalcase nooit doorlopen wordt?
:) echo je sql-string maar, zie je dat $text1 niet geset wordt. Daarbij, als hij geset zou worden zou je er niets aan hebben, omdat je $text in de sql gebruikt.

nog een tip: let op de naamgeving van je variabelen. Als je deze code later nog weer moet updaten ga je het wss niet in 1x begrijpen

je kan het trouwens ook zo doen

PHP:
1
2
3
4
if($taal == 'nl' OR $taal == 'de' OR $taal == 'fr' OR $taal == 'en') {
$naam = 'naam_' . $taal;
$text1 = 'text_' . $taal;
}

[ Voor 23% gewijzigd door 418O2 op 03-11-2007 02:36 ]


Acties:
  • 0 Henk 'm!

  • ilovetechno
  • Registratie: Oktober 2001
  • Laatst online: 15:59
Hmmz.. Heb het maar zo opgelost:

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
switch ($_GET['action']){
    case wijzig: 
        //  taalkeuze
        $taal = $_SESSION['propol_taal'];
        $id = $_SESSION['propol_id'];
        $prod_naam = $_POST['naam'];
        $tekst =  htmlspecialchars(stripslashes($_POST['tekst']));
        switch ($taal){
            case nl: 
                mysql_connect("localhost", "test", "test") or die(mysql_error());
                mysql_select_db("vandermeij_prop") or die(mysql_error());
                $sql = "UPDATE producten SET naam_nl='$prod_naam', text_nl='$tekst' WHERE id='$id'";
                mysql_query($sql) or die(mysql_error());;
            break;
            case de:
                mysql_connect("localhost", "test", "test") or die(mysql_error());
                mysql_select_db("vandermeij_prop") or die(mysql_error());
                $sql = "UPDATE producten SET naam_de='$prod_naam', text_de='$tekst' WHERE id='$id'";
                mysql_query($sql) or die(mysql_error());;           
            break;
            case en:
                mysql_connect("localhost", "test", "test") or die(mysql_error());
                mysql_select_db("vandermeij_prop") or die(mysql_error());
                $sql = "UPDATE producten SET naam_en='$prod_naam', text_en='$tekst' WHERE id='$id'";
                mysql_query($sql) or die(mysql_error());;
            break;
            case fr:
                mysql_connect("localhost", "test", "test") or die(mysql_error());
                mysql_select_db("vandermeij_prop") or die(mysql_error());
                $sql = "UPDATE producten SET naam_fr='$prod_naam', text_fr='$tekst' WHERE id='$id'";
                mysql_query($sql) or die(mysql_error());;
            break;
        }
                
    break;
}
?>



Iig bedankt..

Acties:
  • 0 Henk 'm!

  • krvabo
  • Registratie: Januari 2003
  • Laatst online: 19-09 22:02

krvabo

MATERIALISE!

Wacht even.. je doet een STRIPslashes voordat je het in je database gooit?
Als je toch een slashes wilt gebruiken: addslashes.
Beter: mysql_real_escape_string.
Doe dit trouwens ook bij je sessievariabelen en je prod_naam.
Gooi die mysql_connects trouwens ook buiten de case.

(Ik zie dat je gelukkig je username/pass uit je topicstart hebt gehaald)

Pong is probably the best designed shooter in the world.
It's the only one that is made so that if you camp, you die.


Acties:
  • 0 Henk 'm!

  • ilovetechno
  • Registratie: Oktober 2001
  • Laatst online: 15:59
krvabo schreef op zaterdag 03 november 2007 @ 03:06:
Wacht even.. je doet een STRIPslashes voordat je het in je database gooit?
Als je toch een slashes wilt gebruiken: addslashes.
Beter: mysql_real_escape_string.
Doe dit trouwens ook bij je sessievariabelen en je prod_naam.
Gooi die mysql_connects trouwens ook buiten de case.

(Ik zie dat je gelukkig je username/pass uit je topicstart hebt gehaald)
Thanks.. Ga ik gelijk doen!

Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 15:14

Creepy

Tactical Espionage Splatterer

En let in het vervolg aub op Programming Beleid en dan met name Programming Beleid - De Quickstart zodat je weet wat we hier van je verwachten (en eigenlijk weet je dat oko wel ;) ). Nu is het niet meer dan een "dit is de code, please fix het" en dat is hier niet de bedoeling. In elk geval verwachten we dat je aangeeft wat je nu zelf al hebt geprobeerd en wat daar niet mee lukte en dat laat je nu totaal achterwege.

Daarnaast heb je je probleem waarschijnlijk vrij snel zelf opgelost als je de complete query nu eens af zou drukken en die proberen los uit te voeren in MySQL. Je query los afdrukken is het minste wat je qua debuggen zou kunnen doen.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • FragFrog
  • Registratie: September 2001
  • Laatst online: 09:34
418O2 schreef op zaterdag 03 november 2007 @ 02:32:
je kan het trouwens ook zo doen

PHP:
1
2
3
4
if($taal == 'nl' OR $taal == 'de' OR $taal == 'fr' OR $taal == 'en') {
$naam = 'naam_' . $taal;
$text1 = 'text_' . $taal;
}
Ik zelf gebruik in dit soort situaties (Waarin je zeker wilt zijn dat een bepaalde variabele een van de eerder gedefinieerde waardes heeft) de volgende syntax:
PHP:
1
2
3
4
5
$talen = array('nl', 'de', 'fr', 'en');
if(!in_array($taal, $talen) 
  return false;
$naam  = 'naam_' . $taal;
$text1 = 'text_' . $taal;


Op die manier kun je simpel je opties bewerken zonder overal in if condities te gaan klieren - vooral ook handig als je bijvoorbeeld je opties op gaat slaan in een database of config file :)

Alternatief, stel dat je een default wilt opgeven kun je dat ook zo doen:
PHP:
1
2
3
4
$talen = array('nl', 'de', 'fr', 'en');
$taal  = in_array($taal, $talen) ? $taal : 'nl';
$naam  = 'naam_' . $taal;
$text1 = 'text_' . $taal;

In beide gevallen weet je zeker dat in de code erna $naam en $text1 geen ongeldige waarde hebben, wat je dit soort problemen al bespaart :+

[ Voor 30% gewijzigd door FragFrog op 04-11-2007 14:20 ]

[ Site ] [ twitch ] [ jijbuis ]

Pagina: 1