Stránka 1 z 1

Vložení pole do MySQL databáze - PHP

Napsal: 14 pro 2014 20:55
od kuxik009
Zdravím,
mám formulář, kde uživatel vyplní určité číslo, a podle toho mu vyjede další formulář, s určitým počtem políček. Jsou vždy dvě políčka, která spolu souvisí (název a URL). V dalším skriptu se for cyklem ty hodnoty uloží do dvou polí (pozn a obr) s tím, že název a související URL mají stejný klíč. A teď bych to potřeboval vložit do databáze. Každé dvě položky se stejným klíčem by se vložili do jednoho řádku. Názvy řádků jsou nazev a url. Zkoušel jsem takovýto kód, který by podlě mě měl fungovat, ale nic to nevloží (ani nevypíše error). Děkuji všem předem.

Kód: Vybrat vše

  $pocet_pozn = (int)$_SESSION["pocet_pozn"];
  $pozn = array(0 => "'pozn'");
  $obr = array(0 => "'obrazek'");
  $nazev = array(0 => "nazev");
  $url = array(0 => "url");
  for ($i=1; $i <= $pocet_pozn; $i++)
   {
    $pozn[$i] = "&#39;". $_POST["pozn$i"] . "&#39;";
    $obr[$i] = "&#39;" . $_POST["obr$i"] . "&#39;";
    $nazev[$i] = "nazev";
    $url[$i] = "url";
   }
  $poznp = implode(", ", $pozn);
  $obrp = implode(", ", $obr);
  $nazevp = implode(", ", $nazev);
  $urlp = implode(", ", $url);
  $insert = $nazevp . ", " . $urlp;
  $values = $poznp . ", " . $obrp;
  $dotaz = mysql_query("INSERT INTO pozn_polozky (\"$insert\") VALUES (\"$values\")");
  if (mysql_error($dotaz))
    echo mysql_errno($dotaz) . " - " . mysql_error($dotaz);

Re: Vložení pole do MySQL databáze - PHP

Napsal: 15 pro 2014 18:59
od CZechBoY
Zdravím,
moc ten tvůj kod nechápu, lepší by bylo poslat formulář :D

Ukážu ti jak bych to řešil já

Kód: Vybrat vše


<form>
<?php for ($i = 0; $i < 5; $i++) { ?>
  <input type="text" name="nazev[]">
  <textarea name="pozn[]"></textarea>
  <input type="text" name="url[]">
  <input type="text" name="obr[]">
<?php } ?>
</form>

<?php
if 
($_SERVER['REQUESTED_METHOD'] == 'POST') {
  $indexy = array('pozn', 'obr', 'nazev', 'url');  // tu si dáš názvy políček z formuláře

  foreach ($_POST['nazev'] as $i => $nazev) {
    if (empty($_POST['nazev'][$i]) || empty($_POST['pozn'][$i])) { // tu si napíšeš podmínky pro políčka, který vyžaduješ mít vyplněné
      continue;
    }

    $ukoncit = false;
    $hodnoty = array();
    // kontrola jestli je odesláno vše, co potřebuju + naházení do pole, které vložím do db
    foreach ($indexy as $index) {
      if (!isset($_POST[$index][$i])) {
        $ukoncit = true;

        break;
      }

      $hodnoty[$index] = mysql_real_escape_string($_POST[$index][$i]);
    }

    if ($ukoncit) {
      break;
    }

    mysql_query('INSERT INTO pozn_polozky (`' . implode('`,`', $indexy) . '`) VALUES (\'' . implode('\', \'', $hodnoty) . '\')');
  }
}
?>

Re: Vložení pole do MySQL databáze - PHP

Napsal: 15 pro 2014 19:50
od kuxik009
Super, já zase vůbec nechápu ten tvůj :D
Ten můj je myšlen tak, že uživatel odešle x hodnot (počet zjistím ze sešny) ze dvou typů políček - jedno je pozn a druhy obr, z toho každá hodnota má jiné číslo (pozn1 atd). Já si cyklem vyberu hodnoty do pole, ale potom nevím co dál. Sloupce v db se jmenují url a nazev, takže jsem k cyklu zkusil dát, aby se do proměnné uložilo tolik názvů sloupců, kolik bude hodnot. A z toho mi vyšel ten skript. Ještě jsem ho zjednodušil tak, jak by to podle mě mělo být správně, ale neuloží se to do databáze, přitom echem se mi ty hodnoty zobrazí tak, jak bych je tam normálně napevno dopsal.

Kód: Vybrat vše

  $pozn = array(0 => "pozn");
  $obr = array(0 => "obr");
  for ($i=1; $i <= $pocet_pozn; $i++)
   {
    $pozn[$i] = $_POST["pozn$i"];
    $obr[$i] = $_POST["obr$i"];
    $nazev[$i] = "nazev";
    $url[$i] = "url";   
    $_SESSION["pozn_$i"] = $pozn[$i];
    $_SESSION["obr_$i"] = $obr[$i];
   }
  $hodnoty = "'" . implode("', '", $pozn) . "', '" . implode("', '", $obr) . "'";
  $indexy = "'" . implode("', '", $nazev) . "', '" . implode("', '", $url) . "'";
  // echo $hodnoty . "<br>" . $indexy;
  mysql_query("INSERT INTO pozn_polozky ('$indexy') VALUES ('$hodnoty')");

Re: Vložení pole do MySQL databáze - PHP

Napsal: 15 pro 2014 20:26
od CZechBoY
Zkus to způsobem jak jsem psal.. Ty máš strašně moc proměnných se mi zdá, a je to zbytečné.

Jinak multi insert můžeš napsat ve stylu

Kód: Vybrat vše


INSERT INTO tabulka 
(sloupec1sloupec2VALUES ('abc''def'), ('hodnota1''hodnota2'), ('hodnota sloupce1''hodnota sloupce2');