Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: (PHP) działało, ale przestało...
Forum PHP.pl > Forum > PHP
innyDariusz
Kłaniam się.

Akcja rozgrywa się w malutkim sklepie internetowym. A nawet nie sklepie, lecz na stronce z zamówieniem: parę produktów do wyboru (można wybrać tylko jeden z nich, "albo - albo") i checkbox dla zaznaczenia, że nabywca wybiera wysyłkę pobraniową. Do tego pole na adres e-mailowy nabywcy i na ew. komentarz. Tyle.

Z pomocą dobrych ludzi w Sieci udało mi się stworzyć taką stronkę, która przez kilka lat skutecznie przyjmowała zamówienia i wysyłała mi wiadomość ze szczegółami (HTML + PHP). Jednak jakiś czas temu zaczęło się psuć: niektóre wiadomości były niekompletne, brakowało im informacji, co wybrał kupujący. A od niedawna "wybrakowane" są już wszystkie wiadomości.

Zastanawiam się oczywiście nad przyczyną. Ja niczego nie zmieniałem, wzięło się samo z siebie. Czy ktoś z Was ma jakiekolwiek podejrzenia, dlaczego mój stworzony w bólach skrypcik mógł przestać działać? Będę wdzięczny za sugestie (moja znajomość PHP jest zerowa).
aras785
może na serwerze została podbita wersja php i dlatego dzieją się takie kwiatki?
gino
bez kodu to wróżenie z fusów, jak piszesz że nie działa wysyłanie powiadomień o zakupach to chociaż ten fragment kodu który za to odpowiada.

gino
trueblue
A zmieniałeś może asortyment, tj. coś usuwałeś, a coś innego dodawałeś?
innyDariusz
Specjalnie nie wkleiłem kodu, żeby skupić Waszą uwagę na (dziwnym dla mnie) fakcie, że działało – a już nie działa, choć zupełnie niczego nie zmieniałem. Mowa o dokładnie tych samych plikach, co na początku.

O zmianach wersji php też pomyślałem, bo znalazłem wzmiankę o tym gdzieś w Sieci. Pogadałem z konsultantem z firmy hostingowej (to cyber_Folks, kiedyś LinuxPL). Okazało się, że użytkownik może sobie zmienić wersję (z racji mojego bladego o tych sprawach pojęcia, zdziwiłem się, że tak można). No i zmieniałem, od 5.6 aż do 7.7, przez kilka wersji pośrednich. Rezultat odmienny od oczekiwanego: teraz brakuje nie tylko informacji o zakupionym asortymencie, ale też znikły dodatkowe komentarze kupującego...

Widzę, że bez fragmentów kodu się nie obejdzie. Spróbuję je wkleić jeszcze dziś.

Dziękuję za już i, zaliczkowo, za jeszcze. :-)
trueblue
Ponawiam swoje pytanie.
innyDariusz
Cytat(trueblue @ 14.07.2020, 19:07:59 ) *
Ponawiam swoje pytanie.

Ale... już odpowiedziałem na nie w ostatnim wpisie: "...zupełnie niczego nie zmieniałem. Mowa o dokładnie tych samych plikach, co na początku". Z mojej strony nie było żadnych zmian.
Mega_88
Strzelam, masz serwer na home.pl ?
viking
Co mówią logi serwera? Tak można sobie strzelać. Tym bardziej że jak sam pisałeś kod najwyższych lotów nie jest .
innyDariusz
Cytat(Mega_88 @ 14.07.2020, 21:14:39 ) *
Strzelam, masz serwer na home.pl ?

Nie, cyber_Folks, do niedawna LinuxPL.
trueblue
Cytat(innyDariusz @ 14.07.2020, 21:01:59 ) *
Ale... już odpowiedziałem na nie w ostatnim wpisie: "...zupełnie niczego nie zmieniałem. Mowa o dokładnie tych samych plikach, co na początku". Z mojej strony nie było żadnych zmian.

Rozumiem, że asortyment jest na sztywno w plikach, a nie w bazie. Ok.
Pokaż kawałek skryptu gdzie jest budowana treść do maila.
innyDariusz
Cytat(trueblue @ 14.07.2020, 22:02:34 ) *
Rozumiem, że asortyment jest na sztywno w plikach, a nie w bazie. Ok.


Dokładnie tak.


Dobrze, to teraz pokazuję bebechy. Stronkę uprościłem, żeby niepotrzebne elementy nie odwracały uwagi, ale to, co istotne, raczej tutaj jest.

Najpierw skrypt php:

<?php

function sprawdz($zmienna){
$new = htmlspecialchars(stripslashes(strip_tags(trim($zmienna))));
return $new;
}

$Email = sprawdz($_POST['Email']);
$KL = sprawdz($_POST['zupa']);
$ML = sprawdz($_POST['kotlet']);
$OM = sprawdz($_POST['deser']);
$trzy = sprawdz($_POST['trzy']);
$suma = sprawdz($_POST['cakePrice']);
$dowoz = sprawdz($_POST['dowoz']);
$Komentarz = sprawdz($_POST['Komentarz']);


$naglowek = 'MIME-Version: 1.0' . "\r\n";
$naglowek .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$naglowek .= 'From: Strona-Zamowienie' . "\r\n";

$mail = "Od kogo: $Email <br /> ";
$mail .= "Wybor: $selectedcake <br />";
$mail .= "Dowoz: $dowoz <br />";
$mail .= "Komentarz: $Komentarz <br />";


if (!mail("mail@mail.pl", "Strona Formularz", $mail, $naglowek)){echo "Błąd";}
else {echo "Dziękujemy za złożenie zamówienia, smacznego.";}

?>

Teraz stronka:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Czas_na_obiad</title>

<script type="text/javascript">

var cake_prices = new Array();
cake_prices["KL"]=16;
cake_prices["ML"]=21;
cake_prices["OM"]=12;
cake_prices["trzy"]=31;

// Here, we need to take user's the selection from radio button selection
function getCakeSizePrice()
{
var cakeSizePrice=0;
//Get a reference to the form id="cakeform"
var theForm = document.forms["cakeform"];
//Get a reference to the cake the user Chooses name=selectedCake":
var selectedCake = theForm.elements["selectedcake"];
for(var i = 0; i < selectedCake.length; i++)
{
//if the radio button is checked
if(selectedCake[i].checked)
{
//we set cakeSizePrice to the value of the selected radio button
cakeSizePrice = cake_prices[selectedCake[i].value];
break;
}
}
return cakeSizePrice;
}

//sprawdzenie, czy ma być dowóz
function candlesPrice()
{
var candlePrice=0;
//Get a reference to the form id="cakeform"
var theForm = document.forms["cakeform"];
//Get a reference to the checkbox id="dowoz"
var dowoz = theForm.elements["dowoz"];

//If they checked the box set candlePrice to 10
if(dowoz.checked==true)
{
candlePrice=10;
}
//finally we return the candlePrice
return candlePrice;
}

function calculateTotal()
{
//Here we get the total price by calling our function
//Each function returns a number so by calling them we add the values they return together
var cakePrice = 0 + getCakeSizePrice() + candlesPrice();

//display the result
var divobj = document.getElementById("totalPrice");
divobj.style.display="block";
divobj.innerHTML = "Łaczna wartosć zamówienia "+cakePrice +" zł";

}

function hideTotal()
{
var divobj = document.getElementById("totalPrice");
divobj.style.display="none";
}

function Validate(theForm)
{

if (theForm.Email.value == "")
{
alert("Prosze wpisac adres poczty elektronicznej");
theForm.Email.focus();
return (false);
}

return (true);
}
</script>

</head>
<body bgcolor="#eeeeee">
<form method="POST" action="mail-cambiado.php" onsubmit="return Validate(this)" name="ofrm" id="cakeform">
<table border="0" width="90%" align="center"><tr><td>
<div>
<div class="cont_order">
<h2><font color="#9D0000">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Zamówienie</font></h2>
<h3><font color="#9D0000">Prosimy wybrać zamawiane danie:</font></h3>
&nbsp;&nbsp;&nbsp;<label class='radiolabel'><input type="radio" name="selectedcake" value="KL" onclick="calculateTotal()" />&nbsp;&nbsp;&nbsp;1 &nbsp;x &nbsp;<b>Zupa</b>&nbsp;&nbsp; <font color="#9D0000">(10,-)</font></label><br/>
&nbsp;&nbsp;&nbsp;<label class='radiolabel'><input type="radio" name="selectedcake" value="ML" onclick="calculateTotal()" />&nbsp;&nbsp;&nbsp;1 &nbsp;x &nbsp;<b>Kotlet</b> &nbsp;&nbsp;<font color="#9D0000">(15,-)</font></label><br/>
&nbsp;&nbsp;&nbsp;<label class='radiolabel'><input type="radio" name="selectedcake" value="OM" onclick="calculateTotal()" />&nbsp;&nbsp;&nbsp;1 &nbsp;x &nbsp;<b>Deser</b> &nbsp;&nbsp;<font color="#9D0000">(6,-)</font>&nbsp;&nbsp;</label></b><br/>
<font color="#9D0000">albo</font><br/>
&nbsp;&nbsp;&nbsp;<label class='radiolabel'><input type="radio" name="selectedcake" value="trzy" onclick="calculateTotal()" />&nbsp;&nbsp;&nbsp;<b>Wszystkie trzy dania</b>&nbsp;&nbsp;<font color="#9D0000">(25,-)</font></label><br/>
<br/><br>&nbsp;<br/>
<label><font color="#9D0000"><b>+ Napiwek dla kelnera lub kierowcy</b></font>&nbsp;&nbsp; <font color="#9D0000">6,-</font> </label>
</p>&nbsp;<br/>
<label for='dowoz' class="inlinelabel"><font color="#9D0000"><b>Dowoz?</b></font>&nbsp;&nbsp;
<font color="#9D0000">(+ 10,-)</font> &nbsp;&nbsp; <input type="checkbox" id="dowoz" name='dowoz' onclick="calculateTotal()" /></label>

</p>&nbsp;<br/>&nbsp;<br/>

<font color="#008800" size="5"><div id="totalPrice"></div></font>
</div>
</td></tr>
<tr><td>

<h3><font color="#9D0000">Prosimy podać adres e-mail, na który ma zostać wysłane potwierdzenie:</font></h3>
<table border="0" cellpadding="0" width="550" id="table1">
<tr>
<td width="50">&nbsp;</td>
<td width="450"><input type="text" name="Email" size="30" tabindex="1"></td>
</tr>
<tr>
<td width="50">&nbsp;</td>
<td width="450">&nbsp;</td>
</tr>
</table>

<h3><font color="#9D0000">Uwagi dla kucharza?</font> </h3>
<textarea name="Komentarz" cols="50" rows="5">&nbsp; </textarea>
<p>&nbsp; <p>
<p>&nbsp;</p>
</td></tr>
</table>
<table border="0" cellpadding="0" width="550" id="table3">
<tr>
<td width="563">
<p align="center">
<input type="submit" value="OK, zamawiam." name="subButton" tabindex="50">&nbsp;&nbsp;&nbsp;&nbsp;
</p>
</tr>
</table>
</form>
</body>
</html>


Zapewne są tu składniowe błędy w html-u (już nie pamiętam, czy przepuszczałem to przez jakiś walidator), ale -przypomnę- to kiedyś działało! A w tej chwili na e-mejla dostaję jedynie adres zamawiającego i ew. informację o dowozie, brak natomiast komentarza i najważniejszego: informacji o tym, co wybrał zamawiający.

Aha, jeszcze jedno: zdecydowanie wolałbym coś zmienić w ww. kodzie niż zaczynać od zera (np. z PHPMailerem). Stąd moje wysiłki, żeby jednak tę stronkę przywrócić do życia. :-)

Tomplus
Nie wiem z jakiej przeglądarki korzystasz ale pod CTRL+SHIFT+I możesz Zbadać stronę i tam w zakładce Console możesz zobaczyć jakie błędy pojawiają się podczas wykonywania kodu JS.

Hosting albo na serwerze znajdziesz logi. Patrząc na kod, wina leży raczej po stronie JS.
trueblue
Skąd bierze się zmienna $selectedcake?
  1. $mail .= "Wybor: $selectedcake <br />";


Gdzie w formularzu jest pole o nazwie "zupa", "kotlet", czy "deser" i właściwie w jakim celu je "sprawdzasz"?
  1. $KL = sprawdz($_POST['zupa']);


P.S. Mam wrażenie, że $selectedcake było ustawiane gdy była włączona opcja register_globals.
innyDariusz
Cytat(trueblue @ 15.07.2020, 08:57:46 ) *
Skąd bierze się zmienna $selectedcake?

Gdzie w formularzu jest pole o nazwie "zupa", "kotlet", czy "deser" i właściwie w jakim celu je "sprawdzasz"?


Nie mam pojęcia, do tej rozmowy nie jestem partnerem... ;-)

Cały zastosowany przeze mnie kod to znalezisko sprzed 6 lat, które zaadaptowałem do swoich potrzeb, będąc dalekim od zrozumienia, co jest co i dlaczego.

(To było coś takiego: https://stackoverflow.com/questions/5353924...-javascript-ht).
trueblue
Zmień:
  1. $mail .= "Wybor: $selectedcake <br />";

na:
  1. $mail .= "Wybor: " . $_POST['selectedcake'] . "<br />";

i daj znać.
innyDariusz
Cytat(trueblue @ 15.07.2020, 08:57:46 ) *
Gdzie w formularzu jest pole o nazwie "zupa", "kotlet", czy "deser" i właściwie w jakim celu je "sprawdzasz"?

No właśnie, w jakim? Nie mam pojęcia, tak było w oryginale, z którego ściągnąłem kod. Ale -dążąc do celu głównego, jakim zdecydowanie jest spowodowanie powrotu do funkcjonowania stronki- postanowiłem trochę poeksperymentować i wykasowałem całą sekcję ze sprawdzaniem. Bez jakiejkolwiek szkody dla całości. :-)


Cytat(trueblue @ 15.07.2020, 21:08:30 ) *
Zmień:
$mail .= "Wybor: $selectedcake <br />";
na:
$mail .= "Wybor: " . $_POST['selectedcake'] . "<br />";
i daj znać.

Zacytuję klasyka: "Yes, yes, yes!". Działa perfekcyjnie!

Ponieważ, jak pisałem, w toku różnych moich chaotycznych działań ratunkowych przestało też funkcjonować pole z komentarzami, zastosowałem tę samą zmianę również do niego. I też zadziałało!

Wielkie, wielkie dzięki.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.