Autor Zpráva
Mufna
Profil
Zdravím Vás. Nevím dost dobře jaký jsem měl dát tomuhle tématu název. Zkusím raději popsat, o co mi jde, doufám, že mi někdo poradí.

V nějakém PHP souboru, který se stará o editaci dat jdoucích do DB, mám pomocí JS řešeno přidávání fotografií (funguje to tak, že po kliknutí na "Přidat" se pomocí JS otevře pop-up okno, kde jsou seřazeny všechny názvy fotografií, tam se klikne na aktivní šipečku u fotografie a ta se následně přidá do seznamu v tom hlavním skriptu, resp. hlavní stránce. Takto přidané fotografie se postupně řadí do formulářového prvku <select>. A pak se zapisují do databáze (zapisují se jen názvy oddělené ; ). A tohle mi právě dělá problémy za jistých okolností, a to tehdy, pokud na hlavní stránce zvolím přidat, tím se otevře pop-up okno, ale v něm už nic nezvolím a zavřu ho. V takovém případě se mi v <select> objeví prázdný řádek. A tohle bych potřeboval nějak ošetřit, aby se (pokud fotku nevyberu) tenhle řádek vůbec neobjevil. A hlavně ne na začátku. Pak tam zůstává ten středník, který způsobuje problémy, když to pak všechno zapíšu do databáze. Pak je třeba v DB řetězec ";;fotka1;fotka2;fotka3;" a při výpisu na web se první fotka vůbec nezobrazí.

EDIT: Resp. ono se to všechno sice zobrazí, ale já používám pro hlavní fotku přímo $row([photo][0]) a to mi dělá problémy.

Zkoušel jsem to taky řešit mimo JS pomocí PHP přímo před zápisem do DB

if (strlen(trim($_POST["photo"]==0)))
nebo if (!isset($_POST["photo"]))

ale nějak to nedělá to co potřebuju.

Ten javascript mám takhle:

* v hlavním skriptu
<script type="text/javascript">
function add_photo() {
  var plist=document.forms[0].elements["plist"];
  plist.options[plist.length]=new Option();
  window.open('selectphoto.php','SelectPhoto');
  return;
}
function remove_photo() {
  var plist=document.forms[0].elements["plist"];
  plist.options[plist.selectedIndex]=null;

  var photos="";
  for (var i=0;i<plist.length;i++) photos+=";"+plist.options[i].value;
  photos=photos.slice(1);
  document.forms[0].elements["photos"].value=photos;
  return;
}
</script>

<select name="plist" id="plist">
<?php
  $photos=explode(";",$data["photos"]);
  foreach ($photos as $photo) {
    if ($photo!="") echo '<option value="'.$photo.'">'.$photo.'</option>';
  }
?>
</select>
<input value="Přidat" onclick="add_photo();">
<input value="Odebrat" onclick="remove_photo();">


* ve skriptu "selectphoto.php"
<script type="text/javascript">
  function select(file) {
    var doc=window.opener.document;
    plist=doc.forms[0].elements["plist"];
    plist.options[plist.length-1].text=file;
    plist.options[plist.length-1].value=file;    

    var photos="";
    for (var i=0;i<plist.length;i++) photos+=";"+plist.options[i].value;
    photos=photos.slice(1);
    doc.forms[0].elements["photos"].value=photos;   
    
    window.close();
  }
</script>
Mufna
Profil
A nebo by mi úplně stačilo jakkoliv ošetřit, aby (pokud tam budou) se nahradili samotné znaky ; na začátku řetězce zapisovaného do DB prázdným místem (resp. "ničím") - pomocí PHP.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

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

0