Autor Zpráva
janka03
Profil
Při zpracování BB značek došlo k samovolnému sežrání celého příspěvku. Pardon.
Prosím o pomoc. Na hostingu bezi PHP 5.2 Skúšala som objednavkový formulár, ktorý načítava produkty so súboru xml a následne odošle objednávku na mailovú adresu. Nefunguje. Problém asi bude s metódou count, ktorá je implementovaná až vo verzii 5.3 Pozerala som dokumentáciu a nie som múdra. Dá sa s tým niečo urobiť ?

[b]Kód objednávky:[/b]
[pre]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html dir="ltr" xmlns="http://www.w3.org/1999/xhtml">

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link href="style.css" rel="stylesheet" type="text/css" />
<title>Objednávkový formulář</title>
</head>

<body>
<script type="text/javascript">
function prepocitat() {
var http_request = false;
var request = "akce=prepocet&";
if (window.XMLHttpRequest) {
http_request = new XMLHttpRequest();
}
else if (window.ActiveXObject) {
try {
http_request = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (error) {
http_request = new ActiveXObject("Microsoft.XMLHTTP");
}
}
var pocetpolozek = <?php $obchod = simplexml_load_file('zbozi.xml'); print $obchod->count(); ?>;
for(var i=1; i < pocetpolozek; i++)
{
if (document.getElementById('pocet_' + i) != null)
{
request = request + 'pocet_' + i + '=' + document.getElementById('pocet_' + i).value + '&';
}
}
http_request.onreadystatechange = function() { prepocitej(http_request); };
http_request.open('POST', 'prepocitej.php', true);
http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
http_request.send(request);
}

function prepocitej(http_request) {
if (http_request.readyState == 4) {
if (http_request.status == 200) {
document.getElementById('rekapitulace').innerHTML = http_request.responseText;
}
else {
alert('Chyba');
}
}
}

function objednat() {
var http_request = false;
var request = "akce=objednavka&";
if (window.XMLHttpRequest) {
http_request = new XMLHttpRequest();
}
else if (window.ActiveXObject) {
try {
http_request = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (error) {
http_request = new ActiveXObject("Microsoft.XMLHTTP");
}
}
request = request + 'jmeno=' + document.getElementById('jmeno').value + '&';
request = request + 'ulice=' + document.getElementById('ulice').value + '&';
request = request + 'mesto=' + document.getElementById('mesto').value + '&';
request = request + 'psc=' + document.getElementById('psc').value + '&';
request = request + 'stat=' + document.getElementById('stat').value + '&';
request = request + 'telefon=' + document.getElementById('telefon').value + '&';
request = request + 'e-mail=' + document.getElementById('e-mail').value + '&';
request = request + 'fakturacni=' + document.getElementById('fakturacni').value + '&';
request = request + 'dodaci=' + document.getElementById('dodaci').value + '&';
request = request + 'celkem=' + document.getElementById('celkem').value + '&';
request = request + 'zprava=' + document.getElementById('zprava').value + '&';
http_request.onreadystatechange = function() { objednej(http_request); };
http_request.open('POST', 'prepocitej.php', true);
http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
http_request.send(request);
}

function objednej(http_request) {
if (http_request.readyState == 4) {
if (http_request.status == 200) {
document.getElementById('rekapitulace').innerHTML = http_request.responseText;
}
else {
alert('Chyba');
}
}
}
</script>


<h1>Objednávka produktů</h1>
<form method="post" action="javascript:prepocitat()">
<table>
<tr>
<td>Kód zboží</td>
<td>Název zboží</td>
<td>Cena</td>
<td>Počet kusů</td>
</tr>

<?php
$obchod = simplexml_load_file('zbozi.xml');
foreach ($obchod->zbozi as $zbozi)
{
print "<tr>\n";
print "<td>". strip_tags($zbozi->id->asXML())."</td>\n";
print '<td>'. strip_tags($zbozi->nazev->asXML())."</td>\n";
print "<td>". strip_tags($zbozi->cena->asXML())."</td>\n";
print '<td><input name="pocet_'. strip_tags($zbozi->id->asXML()).'" id="pocet_'. strip_tags($zbozi->id->asXML()).'" type="text" /></td>'."\n";
print "</tr>";
}
?>
<tr>
<td colspan="3">&nbsp;</td>
<td><input type="submit" name="submit" value="Přepočítat" title="Přepočítat" /></td>
</tr>
</table>
</form>
<div id="rekapitulace"></div>
</body>
</html>
[/pre]

[b]Kód prepočítanej objednávky s rekapitulaciu údajov o objednávatelovi:[/b]
[pre]
<?php

$obchod = simplexml_load_file('zbozi.xml');
$pocetpolozek = $obchod->count();

if ($_POST['akce'])
{
//ini_set('session.save_path','tmp');
//ini_set("session.cookie_domain",".domena.cz");
session_start();
if ($_POST['akce'] == 'prepocet')
{
for ($i = 1; $i < $pocetpolozek; $i++) {
if ($_POST['pocet_'.$i.'']){
$_SESSION['pocet_'.$i.''] = $_POST['pocet_'.$i.''];
}
else {
unset($_SESSION['pocet_'.$i.'']);
}
}
print '<h2>Rekapitulace objednávky</h2>';
print '<table>';
print '<tr><th>Zboží</th><th>Cena celkem</th></tr>';
$obchod = simplexml_load_file('zbozi.xml');
$castka = 0;
$hmotnost = 0;
$zprava = '';
foreach ($obchod->zbozi as $zbozi)
{
if (isset($_SESSION['pocet_'.strip_tags($zbozi->id->asXML()).'']))
{
$castka_ = 0;
$polozka = "";
$polozka .= "<tr>\n";
$polozka .= "<td>".$_SESSION['pocet_'.strip_tags($zbozi->id->asXML()).''].'x '. strip_tags($zbozi->nazev->asXML())."</td>\n";
$castka_ = $_SESSION['pocet_'.strip_tags($zbozi->id->asXML()).''] * strip_tags($zbozi->cena->asXML());
$polozka .= '<td>'. $castka_ ." Kč</td>\n";
$polozka .= "</tr>";
$zprava .= $_SESSION['pocet_'.strip_tags($zbozi->id->asXML()).''].'x '. strip_tags($zbozi->nazev->asXML()) . ', ' . $castka_." Kč\n";
$castka = $castka + $castka_;
print $polozka;
}
}
print '<tr><td>Celkem</td><td>'.$castka .' Kč</td></tr>';
print '</table>';
?>
<h3>Objednací údaje</h3>
<form method="post" action="javascript:objednat()">
<table style="width: 100%">
<tr>
<td>Jméno</td>
<td><input name="jmeno" id="jmeno" type="text" /></td>
</tr>
<tr>
<td>Ulice</td>
<td><input name="ulice" id="ulice" type="text" /></td>
</tr>
<tr>
<td>Město</td>
<td><input name="mesto" id="mesto" type="text" /></td>
</tr>
<tr>
<td>PSČ</td>
<td><input name="psc" id="psc" type="text" /></td>
</tr>
<tr>
<td>Stát</td>
<td><input name="stat" id="stat" type="text" /></td>
</tr>
<tr>
<td>Telefon</td>
<td><input name="telefon" id="telefon" type="text" /></td>
</tr>
<tr>
<td>E-mail</td>
<td><input name="e-mail" id="e-mail" type="text" /></td>
</tr>
<tr>
<td>Fakturační adresa</td>
<td><textarea name="fakturacni" id="fakturacni" type="text" cols="20" rows="5"></textarea></td>
</tr>
<tr>
<td>Dodací adresa</td>
<td><textarea name="dodaci" id="dodaci" type="text" cols="20" rows="5"></textarea></td>
</tr>
<tr>
<td>&nbsp;</td>
<td>
<input type="hidden" value="<?php print $castka; ?>" name="celkem" id="celkem"/>
<input type="hidden" value="<?php print $zprava; ?>" name="zprava" id="zprava"/>
</td>
</tr>
<tr>
<td>&nbsp;</td>
<td><input name="objednat" type="submit" value="Objednat" /></td>
</tr>
</table>
</form>

<?php
}
else if ($_POST['akce'] == 'objednavka')
{

$email = '';
$message = "Objednané položky\n".$_POST['zprava']."\n\n";
$email = $_POST['e-mail'];

$message .= 'Celkem: ' . $_POST['celkem'] . " Kč\n";

$message .= "\n\n";
$message .= "Kupující:\n";
$message .= 'Jméno: ' . $_POST['jmeno']."\n";
$message .= 'Ulice: ' . $_POST['ulice']."\n";
$message .= 'Město: ' . $_POST['mesto']."\n";
$message .= 'PSČ: ' . $_POST['psc']."\n";
$message .= 'Stát: ' . $_POST['stat']."\n";
$message .= 'Telefon: ' . $_POST['telefon']."\n";
$message .= 'E-mail: ' . $_POST['e-mail']."\n\n\n";
$message .= "Fakturační adresa:\n " . $_POST['fakturacni']."\n\n\n";
$message .= "Dodací adresa:\n " . $_POST['dodaci']."\n\n\n";

$message .= "Jakmile bude vaše objednávka připravena, budeme vás kontaktovat.\n";

$headers = "Content-type: text/plain; charset=utf-8\n";
$headers .= 'From:'.$email;

$komu = 'nekdo@nekde.cz';

mail( $komu, 'Objednavka z webu', $message, $headers );
mail( $email, 'Objednavka z webu', $message, $headers );

print $message;

print '<p>Potvrzení objednávky bylo odesláno na vaši e-mailovou adresu. Jakmile bude vaše objednávka připravena, budeme vás kontaktovat.</p>';

}
}
Joker
Profil
janka03:
Nojo, už dlouho tu zase nebyl kilometr kódu s popisem „Nefunguje“.
Viz také Jak napsat dotaz.

Jak se to nefungování projevuje? Co to má dělat a nedělá, nemá dělat a dělá? Vypíše to chybové hlášky?
janka03
Profil
sa ospravedlňujem. Nevypíše nič pri objednavke (http://www.pilates.cz/formular/objednavka.php), a pri prepocitani (http://www.pilates.cz/formular/prepocitej.php) takisto nevypise nic.
Este tam je subor zbozi.xml
Vytvorila som aj subor, ktorý vypíše info o verzii php - na serveri je "PHP Version 5.2.6-1+lenny9"
Tori
Profil
Mělo by to jít nahradit tímto: $pocet_polozek = count($obchod->children());, viz manuál

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: