Function met variablen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Peter de Beer

Peter de Beer

15/04/2014 15:50:11
Quote Anchor link
hallo,

Ik wil een update functie maken voor het updaten voor een profiel in mijn DB. Nu heb ik allen 20 velden en wil dus een functie maken waar bij ik kan zeggen welke data ik mee stuur.

Voorbeeld:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php

function send_data($a, $b, $c, $d, $e, $id){
    $sql = "UPDATE table SET a=$a, b=$b, c=$c, d=$d, e=$e  WHERE id = $id";
    mysql_query($sql);
}


?>


Nu wil ik deze functie kunnen aanroepen en bijv allen A en D mee geven

Kan dit ? zo ja hoe ?
 
PHP hulp

PHP hulp

29/03/2024 12:08:06
 
Michael -

Michael -

15/04/2014 15:54:29
Quote Anchor link
Door de variabele alvast in te vullen kun je deze optioneel maken
Controleer dan vervolgens wel in je function of de variabele die je wilt gebruiken leeg zijn.

Tips: mysql_* is deprecated. Gebruik liever MySQLi of PDO. Ik neem aan dat het alfabet als voorbeeld is, maar altijd duidelijke namen gebruiken.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
function send_data($a='', $b='', $c='', $d='', $e='', $id=''){
}

?>
 
Pieter Zandman

Pieter Zandman

15/04/2014 15:57:00
Quote Anchor link
Hoi Peter,

Je zou eens kunnen kijken naar een Ternary Operator. http://www.php.net/manual/en/language.operators.comparison.php

Je query zal wel veel groter worden maar ook flexibeler.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$sql
= "UPDATE table SET " . ((isset($a) == true) ? "a=$a, ": "") . ((isset($b) == true) ? "b=$b, ": "") . ((isset($c) == true) ? "c=$c, ": "") . "WHERE id = $id";
?>


Bovenstaande code is een indicatie om je op weg te helpen.

Succes!
Gewijzigd op 15/04/2014 15:57:29 door Pieter Zandman
 
Peter de Beer

Peter de Beer

15/04/2014 15:58:57
Quote Anchor link
Michael - op 15/04/2014 15:54:29:
Door de variabele alvast in te vullen kun je deze optioneel maken
Controleer dan vervolgens wel in je function of de variabele die je wilt gebruiken leeg zijn.

Tips: mysql_* is deprecated. Gebruik liever MySQLi of PDO. Ik neem aan dat het alfabet als voorbeeld is, maar altijd duidelijke namen gebruiken.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
function send_data($a='', $b='', $c='', $d='', $e='', $id=''){
}

?>


Oke maar hoe foep ik de fuctie aan ? kan je daar ook een voorbeeld van geven zeg ik wil allen A en D mee geven
 
Michael -

Michael -

15/04/2014 16:02:20
Quote Anchor link
>>> Oke maar hoe foep ik de fuctie aan ? kan je daar ook een voorbeeld van geven zeg ik wil allen A en D mee geven
Dat is dus het lastigste, je moet wel de variabelen in die volgorde gebruiken. Als je A en D wilt mee geven, zul je B en C ook mee moeten geven. E en D kun je wel weg laten.

send_data('A','','','D');

>>> Je zou eens kunnen kijken naar een Ternary Operator

Ternary Operator is niets anders dan een verkorte if/else statement en staat los van function.
 
Peter de Beer

Peter de Beer

15/04/2014 16:26:49
Quote Anchor link
Even ter info ik heb dezelfde vraag ook op een ander site gezet kreeg ik de volgde oplossing (wat denk ik de beste is)

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
function send_data($data, $id) {
    $build = array();
    foreach($data as $k=>$v) {
        $build[] = "`".$k."` = '".mysql_real_escape_string($v)."'";
    }

    $sql = "UPDATE `table` SET ".implode(", ",$build)." WHERE `id`=".intval($id);
    mysql_query($sql);
}

?>
 
Michael -

Michael -

16/04/2014 08:41:51
Quote Anchor link
Daarin stuur je de variabelen in één array mee met je functie. Dan maakt t inderdaad niks uit wat erin staat.
Ik zou de lelijke backticks (`) weglaten en als het enigszins mogelijk is vast gaan kijken naar MySQLi of PDO.
 



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.