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.
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/
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')
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..
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...
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.
Joo. Ei se ihan noin voi mennä se UPDATE:kaan. Täytyy siinä olla id mukana. Muuten menee ihan pasmat sekaisin.
En oikein saa toimimaan.
Miten se haku ei auttanut? Laitat vain lähettäjäksi itsesi, niin hakee kaikki ketjut johon olet laittanut viestin.
Haku kyllä toimi niinkuin pitääkin. Ongelmani on koodissa tällä hetkellä. En löytänytkään samanlaista kysymystä kuin tämä vastaavani on.
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 )
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'"); } ?>
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.
Luulin ymmärtäväni täysin, mutta mitä meinaat muuttujalla $taulu["id"];
Osaako kukaan selventää minulle mitä tuo $taulu['id'] meinaa. Eli siis mistä/miten saadaan arvo tuohon muuttujaan $taulu.
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?
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 )
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.
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.
Aihe on jo aika vanha, joten et voi enää vastata siihen.