Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Ongelma varauksen poistamisessa

Sivun loppuun

latenleffahylly [19.04.2012 15:42:21]

#

Hei,

Eteeni tuli kummallinen ongelma?


Alla olevassa koodissa tulostan tietoa kuten (sukunimi, etunimi, kortinnumero) ja piilotettuna (ID numerot ja varausnumero)...

while($rivi = mysql_fetch_row($kysely))
     {
        echo "<tr>
                 <td>" . $rivi[1] . "</td><td>" . $rivi[2] . "</td><td>" . $rivi[3] . "</td>
                 <td><input type='hidden' name='Asiakas_Id' value='" . $rivi[4] . "'>
                     <input type='hidden' name='Tapahtuma_Id' value='" . $rivi[5] . "'>
                     <input type='hidden' name='varno' value='" . $rivi[6] . "'>
                 </td>
                 <td><input type='submit' name='toiminto' value='poista' class='poistavaraus'></td>
              </tr>";

Kun sitten toisessa php-tiedostossa yritän hakea tietoa niin aina tulee viimeisimmän varauksen tehneen työntekijän tiedot. Eli vaikka klikkaan poista ensimmäinen tyäntekijä niin tulee aina listassa alimpana olevan työntekijän tiedot...


- Työntekijä 1----------poista varaus
- Työntekijä 2----------poista varaus
- Työntekijä 3----------poista varaus


"Klikkaan ekaa tai tokaa ja aina saan viimeiset tiedot. Alla poista-varaus php-tiedoston koodia:

<?php
...AVATAAN TIETOKANTAYHTEYS

  $toiminto = $_REQUEST['toiminto'];
    $A_Id = $_POST['Asiakas_Id'];
    $T_Id = $_POST['Tapahtuma_Id'];
    $V = $_POST['varno'];

    if($toiminto == "poista" )
      {
          echo $A_Id;
          echo $T_Id;
          echo $V;
      }

...Tietokanta suljetaan
                            ?>

Lebe80 [19.04.2012 15:53:40]

#

Varmaan jokaisen rivin pitäis olla omassa formissa, niin viimeisin ei ylikirjoittaisi noita arvoja.

latenleffahylly [19.04.2012 16:24:56]

#

Mistä tiedät tämän asian? Voisin kokeilla, mutta onko silloin jokaisen solun sisällä oma lomake..? ja... tuleeko kaikkiin lomakkeiseen tuo ACTION.. eli kun klikkaa "poista varaus" niin kaikista lomakkeista lähtee tieto saman aikaisesti eteenpäin.

kiitos avusta kuitenkin..

jaketsu [19.04.2012 17:09:56]

#

Helpoimmalla pääset kun teet kuten Lebe80 neuvoi. Eli jokainen rivi (tai solu, jos päätät niin koodata) on oma lomake, kaikissa sama action. Lomakkeen lähettämällä lähtee vain kyseisen rivin tieto eteenpäin.

The Alchemist [19.04.2012 17:15:29]

#

Enpä suosittele. Tuolla tavoin menettää mahdollisuuden implementoida usean rivin poisto yhdellä kertaa. Muutenkin kyse on semanttisessa mielessä yhdestä lomakkeesta.

Poistonappulan tilalle linkki, jonka urliin laittaa get-parametrina poistettavan tietueen ID:n. Tai sitten laittaa jokaiselle buttonille nimeksi "remove[$id]", jolloin poistettava ID välittyy lomaketietojen mukana palvelimelle.

Kolme eri vaihtoehtoa:

<a href="?remove=<?= $id ?>">Poista</a>

<button type="submit" name="remove[<?= $id ?>]">Poista</button>

<button type="submit" name="remove[]" value="<?= $id ?>">Poista</button>

Lisähuomioina "Asiakas_Id" ja "Tapahtuma_Id" vaikuttavat sellaisilta tiedoilta, jotka pitäisi lukea esim. sessiosta ja tietokannasta eikä käyttäjän syötteestä. Näin mikäli jokaisella varauksella on globaalisti uniikki ID:nsä. Luultavasti niillä ei ole mitään syytä olla tuolla lomakkeella.

latenleffahylly [19.04.2012 19:29:44]

#

Hmm.. no jälleen paljon uutta, kiitän!


- tein ylläpitäjälle sellaisen ominaisuuden että työntekijän työvuoron varauksen peruminen pitää vielä erikseen hyväksyä.

+ Vähentää riskiä poistaa vahingossa väärä henkilö, (esim. jos tapahtumassa n.100 varausta)

+ Ylläpitäjä näkee poiston yhteydessä vielä henkilön nimitiedot, varausnumeron ja päivämäärän milloin varaus tehty


----------------------------------------------------------------------------------

Toisaalta tuo Alkemistin tapa olisi kaiketi kätevin sillä koodia vähän jne. Pelkään kuitenkin että väsynyt ja rasittunut ylläpitäjä voisi vahingossa poistaa väärän varauksen ja pettyä kun ei muista kenen varauksen epähuomiossa poisti.

näin hyvä ja homma toimii, thänks alot guys!

Lebe80 [19.04.2012 22:12:16]

#

Alchemistintavalla lähtee kyllä vääriä rivejä, jos käyttäjä avaa eri useamman täbin ja nuo pari id:ä tulee sessioista (mikäli ymmärsin että tapahtuma-id pystyy vaihtumaan esim. Eri sivuilla). Eli kuljeta vaikka urlin mukana noita tarvittavia ylimääräisiä id-arvoja, tai parhaassa tapauksessa käytä yksilöivänä id-arvona tietokannassa olevaa poistettavan rivin omaa id-arvoa.

Ja poiston teet asettamalla rivin deleted-solulle arvon, etkä oikeasti siis poistele rivejä. Tällöin voit helposti vain piilotella rivejä, ja tehdä vaikkapa Undo-toiminnon helposti.

The Alchemist [20.04.2012 06:42:23]

#

En minä käskenyt tekemään asioita väärin vaan ehdotin tehtävän ne oikein. Jos "Asiakas_Id" on jokaiselle käyttäjälle uniikki tai ainakin että niitä on vain yksi per käyttäjä (Admin-käyttäjät oma lukunsa, duh.), niin tällöin se pitää lukea sessiosta tai tietokannasta eikä käyttäjän syötteestä.

Tiedän vallan hyvin, että tapahtumiin ei em. rajoitus päde, mutta todennäköisesti jokaisella varauksella on uniikki tunnisteensa, joten yksin sen perusteella voidaan päätellä myös tapahtuman tunniste. Ts. Tapahtuma_Id on lomakkeella täysin redundantti ja sitten haitallinen. Samalla perusteella myös Asiakas_Id on luultavasti redundantti joka tapauksessa.

Tuossa "minun tavassani" ei ole mitään toimintavarmuutta heikentäviä tekijöitä verrattuna aiemmin esitettyyn "lomake per rivi"-tapaan. Se on kaikin puolin järkevämpi tapa.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta