Hei. Olen tehnyt tämän ( https://www.ohjelmointiputka.net/koodivinkit/
Eli tein nyt sellaisen että formilla lähetetään ostajan tiedot send.php:seen joka sitten lähettää adminille s-postin ostoksesta yms. tallentaa ostajan tiedot.
Sinne pitäisi nyt siis saada koodinpätkä, joka poistaa kaikki nuo tuotteet ostoskorista oston yhteydessä. Kyseisessä koodissa yksi tietty tuote poistetaan tällaisella koodilla:
<?php if (isset($_GET['poista']) && $_GET['poista'] == true) { //Vastaanotetaan GET-taulukon kautta lähetetty tuotteen id $poistaID = $_GET['tuoteID']; /* Luetaan edellä vastaanotetun id:n avulla oikeaa evästettä ja pilkotaan sen tiedot omiin muuttujiin */ $tiedot = explode("=",$_COOKIE['tuote'.$poistaID]); $id = $tiedot[0]; $maara = $tiedot[1]; /* Selvitetään onko tuotteita ostoskorissa enemmän kuin yksi, jotta tiedetään poistetaanko koko eväste vai päivitetäänkö määrä-tieto */ if ($maara > 1) { //Vähennetään tuotteen määrää yhdellä ja päiviteen eväste luomalla uusi... $maara--; setcookie('tuote'.$id,$id.'='.$maara,time() + 60*60*24); } else { //Tuotteiden ollessa vain yksi, koko eväste poistetaan setcookie('tuote'.$id,'',time() - 60*60*24); } ?>
mutta miten kaikki keksit saisi poistettua kerralla eikä ainoastaan yhden tuotteen?
<?php foreach($_COOKIE as $cookie) { setcookie($cookie, time() - 60 * 60 * 24); // Tai, jollei $cookie toimi setcookie-funktiossaa, niin koita $_COOKIE[$cookie] }
Käy läpi koko $_COOKIE taulun ja poistaa kaikki cookiet. En testannut, mutta sanoisin sen olevan näin.
uuh. no nyt send.php sisältö:
<?php $mail = $_POST['email']; $etunimi = $_POST['etunimi']; $sukunimi = $_POST['sukunimi']; $katu = $_POST['katu']; $postinro = $_POST['postinro']; $postitoimipk = $_POST['postitoimpk']; $puhelin = $_POST['puh']; $yhteensa = $_POST['yhteensa']; $to = $mail; $subject = "tilauksesi"; $message = "tilaajalle lähetettävä sähköposti tähän"; mail($to, $subject, $message); foreach($_COOKIE as $cookie) { setcookie($cookie, time() - 60 * 60 * 24) } header("location: /?id=ostoskori&subid=tilausvastaanotettu"); ?>
ja sain vastauksena koodia ajettaessa:
Parse error: syntax error, unexpected '}' in /home/u3639/public_html/ostoskori/send.php on line 16
Sulta puuttuu tuolta 4. vikalta riviltä puolipiste (;).
Joo, se puuttui ensin tuosta sunkin viestistä.. Mutta puolipisteen lisättyä tuli uusi errori:
Warning: Cookie names can not contain any of the following '=,; \t\r\n\013\014' in /home/u3639/public_html/ostoskori/send.php on line 28
Warning: Cookie names can not contain any of the following '=,; \t\r\n\013\014' in /home/u3639/public_html/ostoskori/send.php on line 28
Warning: Cookie names can not contain any of the following '=,; \t\r\n\013\014' in /home/u3639/public_html/ostoskori/send.php on line 28
Warning: Cannot modify header information - headers already sent by (output started at /home/u3639/public_html/ostoskori/send.php:28) in /home/u3639/public_html/ostoskori/send.php on line 30
Örhm..Kuulostaa siltä että se liittyy tuohon ostajalle lähetettävään sähköpostiviestiin jossa on tällaista:
<?php $message = "Hei $etunimi $sukunimi .. \n Olemme bla bla \n jne \n"; ?>
Niin, siinähän se lukee. Evästeen nimi ei voi sisältää merkkejä mitkä virheissä 1-3 mainittiin. Viimeinen johtuu siitä, että tekstiä on tulostettu ennen header-funktiota.
Joo, se puuttui. Pythonissa kun ei käytetä niitä, niin eipä muistunut mieleen. Kumminkin kannattaisi jättää koodit kopioimatta, sillä opit parhaiten kirjoittamalle ne itse muistista.
Hmm.. Eli en pysty poistaa noita ostoskorin keksejä? :d se siitä skriptistä sitten
Tai sitten muutat niiden cookieiden nimiä?
Miten se sitten osaa poistaa yhden "rivin" (vai miksikä kutsutaankaan) tuossa aloitusviestissä lukevassa koodinpätkässä?
Mailia laiteltaessa ei tarvitse kirjoitella erikseen rivinvaihto-merkkei.
Rivinvaihdot toimii näin:
<?php $message = "Hei $etunimi $sukunimi .. Olemme bla bla jne riviä vaihdoin ja toimii"; ?>
Pekka Mansikka kirjoitti:
Mailia laiteltaessa ei tarvitse kirjoitella erikseen rivinvaihto-merkkei.
Rivinvaihdot toimii näin:<?php $message = "Hei $etunimi $sukunimi .. Olemme bla bla jne riviä vaihdoin ja toimii"; ?>
Niin, jos viesti lähetetään text/plain-muodossa. Jos se lähetetään HTML-muotoisena, vaaditaan rivinvaihdoksi <br>.
PHP-kooditagi on koodiphp eikä koodi.
no kummassa muodossa seuraava koodinpätkä sen lähettää?
<? $to = $mail; $subject = "tilauksesi"; $message = "tilaajalle lähetettävä sähköposti tähän"; mail($to, $subject, $message); ?>
miksi seuraava koodinpätkä(t) toimi? eli sähköposti ei lähde, menee kyllä oikeaan headeriin ja error viestit toimii. kyseinen skripti toimi ennen noita varmistus viestejä..
## send.php <form method="post" action="bot.php"> <input type="hidden" name="yhteensa" value="<? echo $yht2; ?>"> <table cellspacing="0" width="70%" style="border: solid 0px black;"> <tr><td class="vari1">Etunimi</td><td class="vari1"><input type="text" name="etunimi" maxlenght="15" value=""></td></tr> <tr><td class="vari1">Sukunimi</td><td class="vari1"><input type="text" name="sukunimi" maxlenght="20" value=""></td></tr> <tr><td class="vari1">Katuosoite</td><td class="vari1"><input type="text" name="katu" maxlenght="25" value=""></td></tr> <tr><td class="vari1">Postinumero</td><td class="vari1"><input type="text" name="postinro" maxlenght="15" value=""></td></tr> <tr><td class="vari1">Postitoimipaikka</td><td class="vari1"><input type="text" name="postitoimpk" maxlenght="25" value=""></td></tr> <tr><td class="vari1">Puhelinnumero</td><td class="vari1"><input type="text" name="puh" maxlenght="15" value=""></td></tr> <tr><td class="vari1">E-mail</td><td class="vari1"><input type="text" name="email" maxlenght="25" value=""></td></tr> <tr><td class="vari1"><input type="reset" class="amr" value="Tyhjennä"></td><td class="vari1"><input type="submit" class="amr" name="submit" value="Lähetä tilaus"></td></tr> </table></form>
ja
## bot.php <?php $mail = $_POST['email']; $etunimi = $_POST['etunimi']; $sukunimi = $_POST['sukunimi']; $katu = $_POST['katu']; $postinro = $_POST['postinro']; $postitoimipk = $_POST['postitoimpk']; $puhelin = $_POST['puh']; $yhteensa = $_POST['yhteensa']; if ($etunimi == "") { die(header("location: /?id=ostoskori&subid=virhe&virhe=Etunimi")); }else if ($sukunimi == "") { die(header("location: /?id=ostoskori&subid=virhe&virhe=Sukunimi")); }else if ($katu == ""){ die(header("location: /?id=ostoskori&subid=virhe&virhe=Katuosoite")); }else if ($postinro == "") { die(header("location: /?id=ostoskori&subid=virhe&virhe=Postinumero")); } else if ($postitoimipk == "") { die(header("location: /?id=ostoskori&subid=virhe&virhe=Postitoimipaikka")); } else if ($mail == "") { die(header("location: /?id=ostoskori&subid=virhe&virhe=S%E4hk%F6posti")); } $mail = $_POST['email']; $to = $mail; $subject = "tilauksesi"; $message = "jee"; mail($to, $subject, $message); header("location: /?id=ostoskori&subid=tilausvastaanotettu"); ?>
Clacier kirjoitti:
Hei. Olen tehnyt tämän ( https://www.ohjelmointiputka.net/koodivinkit/
25190-php-ostoskoriskripti ) koodin pohjalta
Ikävää, että olet joutunut tekemäni purkan uhriksi, varsinkin kun olen koko ostoskoriskriptiä uusimassa...
Koodi on toki purkkaa, mutta käyttökelpoista. Varsinkin kuin olen sitä suhteellisen paljon muokannut..
Tarvisin silti vieläkin apuja tuohon edelliseen ja sitä edelliseen viestiini, kaikkien keksien kerralla poistamiseen ja s-posti ongelmaan..
Kaikki evästeet saa helposti poistettua ainakin näin:
Edit.
Macron esimerkki ei toiminut, koska täytyy ottaa huomioon, että $_COOKIE-taulukko on assosiatiivinen. Sen lisäksi täytyy huomata, että setcookie-funktio vaatii evästeet nimen ja arvon erikseen...
Tohon s-posti-ongelmaan en muuta osaa sano kuin, että onhan sulla smtp-servu?
Edit. Testasin skriptiä ja se toimi omalla serverilläni, joten näin ollen uskon tuon smtp-serverin puuttumiseen täysin.
Ihan turha sille cookielle on mitään arvoa laittaa, kun se poistetaan kuitenkin. Myös tuo time() on tuolla ihan turha. Itse poistan cookiet ainakin näin:
<?php setcookie($cookien_nimi, "", 0); ?>
Niin no tuosta arvosta ja ajasta en tiedä, mutta ainakin se evästeen nimi täytyy tietää...
Tässä nyt olisi toinen tapa hoitaa kaikkien evästeiden poistaminen:
<?php foreach (array_keys($_COOKIE) as $name) setcookie($name, "", 0); ?>
Triton kirjoitti:
Tohon s-posti-ongelmaan en muuta osaa sano kuin, että onhan sulla smtp-servu?
Edit. Testasin skriptiä ja se toimi omalla serverilläni, joten näin ollen uskon tuon smtp-serverin puuttumiseen täysin.
Hmm. Mulla oli se käytössä pari tuntia ja hyvin toimi kunnes lisäsin noi tyhjän lomakkeen estot... :O
Clacier kirjoitti:
Hmm. Mulla oli se käytössä pari tuntia ja hyvin toimi kunnes lisäsin noi tyhjän lomakkeen estot... :O
Kyllä sulla täytyy muutakin olla pielessä. MBNetissä toimi aivan täysin pelkästään noin...
Aihe on jo aika vanha, joten et voi enää vastata siihen.