Autor Zpráva
slovakCZ
Profil
Dobry den, trosku jsem se zasekl na vytvoreni administrace pro jednoduchou webovou stranku. Vyuzivam pritom MySQL databazi a problem mi dela konkretne cenik.. databazi ceniku mam rozvrzenou nasledovne:
tabulka cenik:
id - nadpis_id - popis_sluzby - cena_sluzby

kde:
id = ID nabizene sluzby
nadpis_id = ID kategorii.. napr: Pece o vlasy (ma id=1), Pece o nehty (ma id=2), Manikura (ma id=3)......
popis_sluzby = jednotlive polozky ceniku, napr: Strihani, Holeni, Meliry....
cena_sluzby = to je snad jasne.. cena jednotlive sluzby....

na strance potom vypisuji sluzby nasledovne:
nejaka tabulka, kde je nadpis "PECE O VLASY".. v tabulce je pote php skript, kde je: vypis vsechny hodnoty z databaze, kde je "nadpis_id" rovno "1"... pote mam tabulku s nadpisem "PECE O NEHTY" a skript se opakuje jen s tim, ze nadpis_id=2.............

ovsem dela mi problem vytvorit jednoduchou administraci... jsem schopen to vytvorit tak, ze po rozkliknuti dane sluzby si admin muze upravit jeji cenu a ulozit... ovsem kdyz ma cenik 70polozek a u kazde polozky by nejdrive musel otevrit danou polozku, upravit cenu a ulozit a takto to delat jednotlive tak se asi zblazni....

je mozne tedy vytvorit administraci tak, abych pomoci cyklu vypsal vsechny sluzby, ktere maji nadpis_id napr 1 a najednou je vsechny upravil (jejich ceny a nazev) a pote je hromadne do DB zase ulozil?? vypsat je neni problem, udelat input pole s cenami take neni problem, problem mi pote dela vysledne ukladani (UPDATE) databaze... jelikoz nyni mam skript (napr pro upravu planovanych akci) takto:

<?php 
  if(isset($_GET['id-akce'])){
  $id_akce=(int)$_GET['id-akce'];
  require_once "../db.php";
  $Vyber=mysql_query("SELECT * FROM `akce` WHERE `id`='$id_akce' ");
  $Vypis=mysql_fetch_array($Vyber);  
   ?>
 
<form id="form" action="" method="post">
<input name="id" id="lastname" type="hidden" tabindex="1" value="<?php echo "$id_akce"; ?>" />
<input name="nadpis_akce" type="text" value="<?php echo $Vypis['nadpis_akce']; ?> />
<input name="datum_strucne" type="text" value="<?php echo $Vypis['datum_strucne']; ?> />
(a takto bych mohl pokracovat s "inputama" dal a dal....)
<input id="button1" type="submit" value="Ulozit akci" name="Uprav data" />
</form>

<?php
ob_start();              
  if(isset($_POST['sent'])){
    $id=trim($_POST['id']);
	$nadpis_akce=trim($_POST['nadpis_akce']);
	$datum_strucne=trim($_POST['datum_strucne']);
        (takto dalsi a dalsi promene.........)
   require "../db.php";     // pripojime se k databazi

if($id==""){
		}else{
        $VlozData=mysql_query("UPDATE `akce` SET `id`='{$_POST['id']}' WHERE `id`='$id_akce'") or die (mysql_error());
		}

if($nadpis_akce==""){
		}else{
        $VlozData=mysql_query("UPDATE `akce` SET `nadpis_akce`='{$_POST['nadpis_akce']}' WHERE `id`='$id_akce'") or die (mysql_error());
		}

if($datum_strucne==""){
		}else{
        $VlozData=mysql_query("UPDATE `akce` SET `datum_strucne`='{$_POST['datum_strucne']}' WHERE `id`='$id_akce'") or die (mysql_error());
(a takto dal a dal podle toho co chci upravovat)
}
    
  else{
  } }
ob_end_flush();


takze takto mam asi vyresenou administraci doposud a timto zpusobem bych resil i ty ceny.. ale jak rikam, musel bych takto upravovat a otevirat v novce strance kazdou zvlast... kdyz je nazacatku pomoci while vypisi do tech inputu, jak pote vyresim tu spodni cast, kdy se ukladaji do DB? takto to asi resit nemuzu, ze? resi se to take pomoci nejakeho cyklu?

nevim zda to je dost jasne vysvetlene, kdyby nahodou nebylo neco jasneho tak to zkusim jeste objasnit :o)...
predem dekuji za Vasi ochotu. Tom
slovakCZ
Profil
no, zkusil jsem jen v rychlosti neco napsat.. vypise to tedy vsechny ceny z dane "kategorie" ale pote mam ukladani do DB asi spatne... nenapada nekoho jak to tedy resit? nejakym funkcnim zpusobem?
<?php 
	require_once "../db.php";
    if(isset($_GET['nadpis-id'])){ //pokud je dano ID kategorie, vypise to jen sluzby v dane kategorii
    $id_akce=(int)$_GET['nadpis-id'];
    $query = MySQL_Query("SELECT * FROM `cenik` WHERE `id`='$nadpis_id'") or die (mysql_error());

 ?>
      <form id="form" action="" method="post">
      <input type="hidden" name="sent" value=""/>
      <?php 
          while($Vysledek = mysql_fetch_array($query)){ //vypiseme vsechny sluzby obsazene v dane kategorii (zalezi na "nadpis-id")
				echo "
               <input name='id' type='hidden' value='>".$Vysledek['id']."/>
               <input name='popis_sluzby' type='text' value='>".$Vysledek['popis_sluzby']."/>
               <input name='cena_sluzby' type='text' value='>".$Vysledek['cena_sluzby']."/>
						";
			}
      ?>
      <input id="button1" type="submit" value="Ulozit akci" name="Uprav data" /> 
      </form>
      
<?php

ob_start();               
  if(isset($_POST['sent'])){      
  $id=trim($_POST['id']);
	$popis_sluzby=trim($_POST['popis_sluzby']);
	$cena_sluzby=trim($_POST['cena_sluzby']);
   require "../db.php";     
		
		if($nadpis_akce==""){
		}else{
        $VlozData=mysql_query("UPDATE `cenik` SET `popis_sluzby`='{$_POST['popis_sluzby']}' WHERE `id`='$id'") or die (mysql_error());
		}
		
		if($popis_akce_wys_odesli==""){
		}else{
        $VlozData=mysql_query("UPDATE `cenik` SET `cena_sluzby`='{$_POST['cena_sluzby']}' WHERE `id`='$id'") or die (mysql_error());
		}
                 
    }else{}
      
?>
AM_
Profil
Jedním slovem nevíš, jak uložit data z více řádků najednou?
Samozřejmě to uděláš také cyklem - buď uložíš řádky jeden po druhém, nebo - optimální řešení - si cyklem jen vytvoříš delší dotaz a následně vše uložíš jedním dotazem, viz: http://www.techfounder.net/2009/05/14/multiple-row-operations-in-mysql-php/
slovakCZ
Profil
no, kdyz ja jsem to chtel vysvetlit poradne :o) a koukam da se to napsat vse i na jeden radek :o)
mrknu se na to co jsi poslal, verim ze to pomuze, jako kazda tvoje rada ;o) Takze dekuju
slovakCZ
Profil
no, zkousel jsem to, ale nejak se mi nedari... skript mam tedy vytvoren takto:
<?php 
	require_once "../db.php";
    if(isset($_GET['nadpis-id'])){
    $nadpis_id=(int)$_GET['nadpis-id'];
    $query = MySQL_Query("SELECT * FROM `cenik` WHERE `id_nadpis`='$nadpis_id'") or die (mysql_error());

 ?>
      <form id="form" action="" method="post">
      <input type="hidden" name="sent" value=""/>
      <?php 
          while($Vysledek = mysql_fetch_array($query)){
				echo "
               <input name='id' type='hidden' value='".$Vysledek['id']."'/>
               <input name='popis_sluzby' type='text' value='".$Vysledek['popis_sluzby']."'/>
               <input name='cena_sluzby' type='text' value='".$Vysledek['cena_sluzby']."'/>
               <br>
						";
			}
      ?>
      <input id="button1" type="submit" value="Ulozit akci" name="Uprav data" /> 
      </form>
      
<?php

ob_start();               
  if(isset($_POST['sent'])){      
  $id=trim($_POST['id']);
	$popis_sluzby=trim($_POST['popis_sluzby']);
	$cena_sluzby=trim($_POST['cena_sluzby']);
   require "../db.php";  
   
   
          
    }else{}}
      
?>

a nad tim predposlednim radkem ( }else{}}) by melo byt ulozeni do DB.. melo by to UPDATOVAT udaje jiz v databazi obsazene za udaje, ktere jsem ve formulari upravil... podle rady AM_ jsem si precetl clanek a pochopil z toho funkci "foreach"... kdyz jsem se to snazil ale svazat s tim while tak se mi to ani za boha nepovedlo.. =o/ nemohl by mi prosim nekdo ukazat malou ukazku toho, jak bych to na tomto scriptu mohl uplatnit? preci jen po trech hodinach badani mi to uz trochu leze na nervy :)
tiso
Profil
slovakCZ: zaujímavé, podľa tejto témy ponúkaš vytvorenie administrácie, a tu chceš aby ti niekto s tým poradil?
slovakCZ
Profil
slovakCZ: zaujímavé, podľa tejto témy ponúkaš vytvorenie administrácie, a tu chceš aby ti niekto s tým poradil?
ano.. jelikoz tuto cast prace za mne vetsinou odvadi muj bratr, od ktereho se pomalu php a mysql ucim.. momentalne je do uterka pryc a na tuto vec celkem specham a nevim si rady. Byt bratra tak se neptam zde, napsal by mi to raz dva :) Vim jak to vypada (nabizim neco co neumim), ale ono je vetsinou snazsi napsat ze to delam sam nez rozepisovat ze to dela nekdo jiny, pote se s dotycnym financne vyrovnavat atd atd... takto uvedu ze vse delam ja, on proti neni a my dva se uz srovname dle naseho..
slovakCZ
Profil
Dobry den, navazuji na tema:
http://diskuse.jakpsatweb.cz/index.php?action=vthread&forum=9&topic=98492
jelikoz to tam zacinalo byti neprehledne... skript jsem jakztakz vytvoril ale neustale mam problem s ukladanim do DB...
zde na obrazku:

muzete videt jak vypada tento formular... v pripade ze posledni polozku (LESK) prepisi napr na (PARFEM) a dam ulozit, tak mi to v databazi prepise veskere udaje ve sloupci popis_sluzby... tedy veskere (Manikura, Pedikura, Lesk, Lakovani....) zmizne a misto toho se ulozi prave to "PARFEM"... v pripade ze prepisu napr "MANIKURA" na "ORLOJ" a dam odeslat (viz obr), tak to neudela nic..

muzete mi prosim nekdo poradit, kde mam v kodu chybu? Dekuji mockrat
(predpokladam ze bude nekde na radku 25 a nize... to predtim by melo byt vse OK.
<?php 
	require_once "../db.php";
    if(isset($_GET['nadpis-id'])){
    $nadpis_id=(int)$_GET['nadpis-id'];
    $query = MySQL_Query("SELECT * FROM `cenik` WHERE `id_nadpis`='$nadpis_id'") or die (mysql_error());

 ?>
      <form id="form" action="" method="post">
      <input type="hidden" name="sent" value=""/>
      <?php 
          while($Vysledek = mysql_fetch_array($query)){
				echo "
               <input name='idcko[". $Vysledek["id"] ."]'' type='hidden' value='".$Vysledek['id']."'/>
               <input name='ab[". $Vysledek["popis_sluzby"] ."]' type='text' value='".$Vysledek['popis_sluzby']."'/>
               <input name='bb[". $Vysledek["cena_sluzby"] ."]' type='text' value='".$Vysledek['cena_sluzby']."'/>
               <br>
						";
			}
      ?>
      <input id="button1" type="submit" value="Ulozit akci" name="Uprav data" /> 
      </form>
      
<?php

if(isset($_POST['sent'])){
// po odeslani formulare
foreach ($_POST["ab"] as $key) {
  foreach ($_POST["idcko"] as $ids) {

 $VlozData=mysql_query("UPDATE `cenik` SET `popis_sluzby`='$key' WHERE `id`='$ids'") or die (mysql_error());
 echo "$key";
 echo "$ids";
 echo "<br>";

}}}}      
?>   



AM_
Profil
1) obecná rada: odsazuj kód nějak kulturně, ne jak se ti zrovna zachce, ty foreache máš odsazené dost chaoticky
2) změň ten výpis:
$i = 0;
          while($Vysledek = mysql_fetch_array($query)){
                echo "
               <input name='idcko[". $i."]'' type='hidden' value='".$Vysledek['id']."'/>
               <input name='ab[".$i."]' type='text' value='".$Vysledek['popis_sluzby']."'/>
               <input name='bb[".$i."]' type='text' value='".$Vysledek['cena_sluzby']."'/>
               <br>
                        ";
                $i++;
            }

3) uložení:
foreach ($_POST["idcko"] as $key=>$ids) {
  $VlozData=mysql_query("UPDATE `cenik` SET `popis_sluzby`='${_POST['ab'][$key]}' WHERE `id`='$ids'") or die (mysql_error());
 
  //co tohle tu dělá? to je tam předpokládám jen pro debuggování?
  echo "$key";
  echo "$ids";
  echo "<br>";
}

Princip je v tom, že budeš mít 3 pole:
_POST['idcko'][i], _POST['ab'][i], _POST['bb'][i], přičemž je zajištěno, že záznamy se stejným klíčem (i) patří k sobě. foreach cyklem projdeš pole idcko (logicky nejsprávnější je podle mě právě projít pole klíčů DB) a do DB zapíšeš příslušný záznam pod příslušný klíč.
ještě 2 věci:
1) kód jsem nezkoušel, možná tam mám chybu z nepozornosti, opravil jsem jen princip
2) je to dost nahrubo, vůbec to není ošetřené proti SQL injection (ikdyž s magic_quotes to není potřeba) a ani na ověření existence POSTem předaných dat
slovakCZ
Profil
jj ok dekuju za radu, me se to nakonec nejakym zpusobem podarilo pred chvilkou dat dokupy :o) ale jeste jednou si projdu to co si napsal ty at si to zopaknu ;o)
ok, priste stejne dotazy budu radit do jednoho prispevku, jen mi prislel ten predchozi silene neprehledny. Takze nyni jiz muzete spojit s:
http://diskuse.jakpsatweb.cz/index.php?action=vthread&forum=9&topic=98492
at vam tady v tom nedelam zmatek ;o) a jeste jednou dekuju!

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:

0