Autor Zpráva
Pan X
Profil
Zdravím,
narazil jsem na jednu věc se kterou si nevím rady. Mám 30 proměných, které potřebuju uložit do DB ale tyto proměné nemusí být vždy plné. V případě, že bude proměnná plná potřebuji do DB uložit nějakou hodnotu.
Zatím to řeším takto, ale vypadá to šíleně a doufám že se to dá vyřešit i jinak...

if($a == false){
$a == 'prazdno';
}if($b == false){
$b == 'prazdno';
}....


Takto by tam bylo zapsaných 30 podmínek....
Výsledný zápis do db

 MySQL_Query("INSERT INTO `tabulka` VALUES('','$a','$b',.....)");


Jak by se to dalo vyřešit jinak?
Radek9
Profil
Pan X:
Za prvé bych použil pole, tohle je zbytečnost, a za druhé, to se dá krásně vyřešit cyklem:
$array = array("něco", "něco", false, "něco", …);
foreach($array as $key => $val){
  $array[$key] = $val==false?"NULL":"'".mysql_real_escape_string($val)."'";
}
…
mysql_query("INSERT INTO tabulka VALUES (".implode(", ", $array).");");

Edit: Nox má pravdu, spíš použít NULL.
Edit 2: Ajaj, ty apostrofy jsou zlo! :D
Edit 3: No, ještě jsem to trochu zkrátil.
Nox
Profil
Pro "prázdno" se v MySQL používá NULL (do query vkládat jako řetězec; pro sloupec se musí nastavit parametr že může být NULL),

Jinak pokud máš proměnné $a, $b... to je špatný nápad, použij pole, pak můžeš udělat

$values = "";
foreach($pole as $prvek)
  $values .= ($prvek == false ? "NULL" : mysql_real_escape_string($prvek)).", ";

$values = substr($values, 0, -2);
MySQL_Query("INSERT INTO `tabulka` VALUES($values)");
Pan X
Profil
Jestli teda mýu navázat ještě jedním dotazem, jak dostanu z odeslaného formuláře pole, aniž bych do něj musel všechny proměnné manuálně vypsat?
Mastodont
Profil
jak dostanu z odeslaného formuláře pole
Odeslaný formulář ti už jako pole přijde, buď $_GET nebo $_POST.
joe
Profil
$vars = array('item1', 'item2', 'item3', ...);
foreach($vars as $var) {
echo $_POST[$var];
}
Pan X
Profil
Aha, jasný to jsem si neuvědomil. Děkuji za pomoc

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: