Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ PHP _ (PHP) działało, ale przestało...

Napisany przez: innyDariusz 13.07.2020, 21:13:35

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).

Napisany przez: aras785 14.07.2020, 00:43:34

może na serwerze została podbita wersja php i dlatego dzieją się takie kwiatki?

Napisany przez: gino 14.07.2020, 13:17:40

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

Napisany przez: trueblue 14.07.2020, 13:25:59

A zmieniałeś może asortyment, tj. coś usuwałeś, a coś innego dodawałeś?

Napisany przez: innyDariusz 14.07.2020, 18:04:49

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. :-)

Napisany przez: trueblue 14.07.2020, 18:07:59

Ponawiam swoje pytanie.

Napisany przez: innyDariusz 14.07.2020, 20:01:59

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.

Napisany przez: Mega_88 14.07.2020, 20:14:39

Strzelam, masz serwer na home.pl ?

Napisany przez: viking 14.07.2020, 20:45:24

Co mówią logi serwera? Tak można sobie strzelać. Tym bardziej że jak sam pisałeś kod najwyższych lotów nie jest .

Napisany przez: innyDariusz 14.07.2020, 21:01:33

Cytat(Mega_88 @ 14.07.2020, 21:14:39 ) *
Strzelam, masz serwer na home.pl ?

Nie, cyber_Folks, do niedawna LinuxPL.

Napisany przez: trueblue 14.07.2020, 21:02:34

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.

Napisany przez: innyDariusz 15.07.2020, 00:36:44

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. :-)


Napisany przez: Tomplus 15.07.2020, 05:10:40

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.

Napisany przez: trueblue 15.07.2020, 07:57:46

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.

Napisany przez: innyDariusz 15.07.2020, 18:59:03

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/53539248/how-can-i-change-my-array-of-values-if-some-other-value-changes-in-javascript-ht).

Napisany przez: trueblue 15.07.2020, 20:08:30

Zmień:

  1. $mail .= "Wybor: $selectedcake <br />";

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

i daj znać.

Napisany przez: innyDariusz 16.07.2020, 19:54:26

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.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)