Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: foreach ja tiedon tallentaminen

Sivun loppuun

Vasta_alkaja [11.09.2008 13:28:05]

#

Hei,

Aikaisemminkin muistelisin, että olen saman tyylistä ongelmaa koittanut ratkoa avullanne. En vain löytänyt semmoista jättämääni ketjua. Tästä tulikin sitten mieleen, että olisi hyvä jos voisi hakea tuolla hakukoneella esim kaikki omat jättämät viestit. Näin olisin mahdollisesti löytänyt jättämäni ketjun.

Itse asiaan.

while($r = mysql_fetch_assoc($t)){
    echo '<tr>';
    echo '<td>'. htmlspecialchars($r['asiakasid']) .'</td>';
    echo '<td>'. htmlspecialchars($r['vientiajankohta']) .'</td>';
    echo '<td>'. htmlspecialchars($r['milloinvoihakea']) .'</td>';
    echo '<td><input type="text" name="haettu['.$r['reseptinid'].']"
          value="" class="kuittaus" /></td>';
    echo '<td><input type="text" name="haki['.$r['reseptinid'].']"
          value="" class="kuittaus" /></td>';
    echo '</tr>';
    }

Eli, kuten koodista näkyy haen tietokannasta rivejä, joita voi olla useampia ja luon niiden perään kaksi tyhjää kenttään joiden nimeksi tulee

haettu[1]
haettu[2]

haki[1]
haki[2]

Näiden kenttien täyttämisen jälkeen haluaisin tietenkin tallentaa ne tietokantaan. Olettaisin, että tämä menisi parhaiten foreach rakenteella, mutta miten se tulisi toteuttaa.

Blaze [11.09.2008 13:49:20]

#

Vasta_alkaja kirjoitti:

olisi hyvä jos voisi hakea tuolla hakukoneella esim kaikki omat jättämät viestit.

Sillä voi. https://www.ohjelmointiputka.net/keskustelu/haku.php

Vasta_alkaja [11.09.2008 14:54:15]

#

Eipäs ollut tuostakaan apua. Valitettavasti.

Kokeilin seuraavanlaista koodi

foreach($_REQUEST['haettu'] as $haetturesepti)
    {
        foreach($_REQUEST['haki'] as $henkilonnimi)
        {
           $arvot[] = sprintf("('%s' , '%s')", $henkilonnimi,
           $haetturesepti);
        }
    }

Tulos oli seuraava :

UPDATE reseptit (haki, haettu) VALUES
 ('Jussi' , 'eilen'),('Matti' , 'eilen'),
 ('Jussi' , 'tänään'),('Matti' , 'tänään')

Haluttu tulos olisi ollut

('Jussi' , 'eilen'),('Matti' , 'tänään')

Grez [11.09.2008 15:07:13]

#

En kyllä ymmärrä, mistä esimerkiksi toi UPDATE resepetit -rivi tulee, kun ei tossa sun sorsassa näy mitään siihen suuntaankaan.

Ehkä haet kuitenkin jotain tyyliin:

foreach($_REQUEST['haettu'] as $avain=>$haetturesepti)
{
    $arvot[] = sprintf("('%s' , '%s')",
        $_REQUEST['haki'][$avain],
        $haetturesepti);
}

Sinänsä en ehkä itse toteuttaisi sitä noin..

Vasta_alkaja [11.09.2008 15:10:00]

#

Laitetaan vielä se viimein UPDATE rivikin.

    foreach($_REQUEST['haettu'] as $haetturesepti)
    {
        foreach($_REQUEST['haki'] as $henkilonnimi)
        {
           $arvot[] = sprintf("('%s' , '%s')", $henkilonnimi, $haetturesepti);
        }
    }

$k = "UPDATE reseptit (haki, haettu) VALUES " . implode(',', $arvot);

Ei toiminut tuo ehotuksesi vaan antoi ilmoituksen :
Cannot access empty property in...

Grez [11.09.2008 15:14:30]

#

lainaus:

Vinkkejä toteutuksen kannalta saa antaa. ?

No ihan ensimmäisenä tulee mieleen, että jos tuossa on lista respeteistä, joissa kullakin on oma ID, niin tietoja käsitellessä en varmaan tunkisi niitä $arvot -taulukoon hukaten ne ID:t kokonaan. En myöskään ymmärrä miksi siinä käytetään sprintf:ää. Ennemmin käyttäisin jotain kunnollista eskapointifunktiota.

Muutenkin kun yleensä täytyy jonkin verran myös huolehtia siitä, että käyttäjä ei vaan muuta ID:tä ja haksoroi jonkin toisen käyttäjän tietoja, niin varmaankin hakisin tietokannasta myös talletettaessa saman listan ja sitten katsoisin onko ko. id:tä vastaavaan kenttään syötetty arvoa. Näin jos käyttäjä muuttelisi ID:itä muiksi, niin ne jäisivät vain huomiotta.

lainaus:

Ei toiminut tuo ehotuksesi

Joo, no ulkomuistista heitin foreachiin -> kun pitäisi olla =>.

Ei kyllä toimi minun tuntemissani kannoissa tuollainen UPDATE-syntaksi. Jos tuollainen jossain toimiikin, niin ainakin luulisi rivien järjestyksen menevän näppärästi sekaisin.

Vasta_alkaja [11.09.2008 15:39:34]

#

Joo. Ei se ihan noin voi mennä se UPDATE:kaan. Täytyy siinä olla id mukana. Muuten menee ihan pasmat sekaisin.

Vasta_alkaja [11.09.2008 17:27:45]

#

En oikein saa toimimaan.

http://paste.org/forums/viewtopic.php?id=1467

Kray [13.09.2008 07:41:50]

#

Miten se haku ei auttanut? Laitat vain lähettäjäksi itsesi, niin hakee kaikki ketjut johon olet laittanut viestin.

Vasta_alkaja [13.09.2008 09:10:09]

#

Haku kyllä toimi niinkuin pitääkin. Ongelmani on koodissa tällä hetkellä. En löytänytkään samanlaista kysymystä kuin tämä vastaavani on.

Vasta_alkaja [20.09.2008 15:06:10]

#

Minkälaisella tavalla seuraavan taulukon tiedot olisi järkevintä tallentaa tietokantaan..

[id] => Array
        (
            [1] => 1
            [2] => 2
        )

    [haettu] => Array
        (
            [1] => ekarivi 1
            [2] => tokarivi 1
        )

    [haki] => Array
        (
            [1] => ekarivi 2
            [2] => tokarivi 2
        )

Metabolix [20.09.2008 16:14:44]

#

Oletko silmukasta koskaan kuullut? Sellaista voisit tuossakin käyttää.

<?php
foreach (array_keys($taulu["id"]) as $key) {
  $id = mysql_real_escape_string($taulu["id"][$key]);
  $haki = mysql_real_escape_string($taulu["haki"][$key]);
  $haettu = mysql_real_escape_string($taulu["haettu"][$key]);
  mysql_query("UPDATE taulu SET haettu = '$haettu', haki = '$haki' WHERE id = '$id'");
}
?>

Vasta_alkaja [21.09.2008 09:17:06]

#

Olen kuullut, muuta juuri nuo silmukat ovat minulle jostain syystä ongelma. Kiitoksia esimerkistäsi. Tuon myötä ymmärrän täysin mitä ajat tuolla silmukalla takaa, mutta taas seuraavan silmukan tullessa vastaan en enää muistakkaan siitä mitään. Jospa se nyt alkaisi kuitenkin jo jäädä mieleen.

Vasta_alkaja [22.09.2008 10:52:56]

#

Luulin ymmärtäväni täysin, mutta mitä meinaat muuttujalla $taulu["id"];

Vasta_alkaja [23.09.2008 20:26:03]

#

Osaako kukaan selventää minulle mitä tuo $taulu['id'] meinaa. Eli siis mistä/miten saadaan arvo tuohon muuttujaan $taulu.

Grez [23.09.2008 21:26:14]

#

Näytät taulukon, jonka haluat tallentaa tietokantaan, ja sitten kun kerrotaan miten se onnistuu niin kysyt miten ne arvot siihen taulukkoon $taulu saadaan?

Siis onko sinulla nyt tuo kuvaamasi taulukko vai ei?

Vasta_alkaja [23.09.2008 22:22:53]

#

echo '<pre>', print_r($_REQUEST), '</pre>';

tulee seuraavat arvot pihalle.

    [id] => Array
        (
            [1] => 1
            [2] => 2
        )

    [haettu] => Array
        (
            [1] => ekarivi 1
            [2] => tokarivi 1
        )

    [haki] => Array
        (
            [1] => ekarivi 2
            [2] => tokarivi 2
        )

Grez [23.09.2008 22:26:26]

#

No sitten vaan laitat $taulu tilalle $_REQUEST

Tai voit toki sanoa myös: $taulu = $_REQUEST;


Yleisesti ottaen voisi olla ideaa harrastaa vähän itseopiskelua vaikka jostain PHP-oppaasta.

Vasta_alkaja [23.09.2008 22:40:46]

#

Aaah. Sorry pahainen mokani. Olin kirjoittanut $_REUQEST. Saihan sitä silloin ihmetellä mistä se $taulu tulee. Mutta joo.

Yleisesti ottaen voisi olla ideaa harrastaa vähän itseopiskelua vaikka jostain PHP-oppaasta.

Tuokaan ei olisi varmaan pahasta.


Sivun alkuun

Vastaus

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

Tietoa sivustosta