2013-03-20 2 views
0

Ниже приведен файл php, используемый на моем веб-сайте (прототипе) электронной коммерции, чтобы написать элементы, выбранные клиентом, и сохранить их выбор в плоской файловой базе данных. Логика работает нормально, хотя echo "Order Submitted!; печатается для каждого выбранного элемента, например. если выбрано 4 элемента, эта строка печатается 4 раза, я требую, чтобы она печаталась один раз. Любая идея, как это можно сделать?Печать только один раз Оператор IF

<body> 

    <table> 

     <?php 
     if (!($data = file('items.txt'))) { 
      echo 'ERROR: Failed to open file! </body></html>'; 
      exit; 
     } else { 
      echo "<h1>Transaction Completed!</h1>"; 
     } 
     date_default_timezone_set('Europe/London'); 
     $now = date(' d/m/y H:i:s '); 
     $visitor = $_POST['visitor']; 

     foreach ($_POST as $varname => $varvalue) { 
      foreach ($data as $thedata) { 
       list($partno, $name, $description, $price, $image) = explode('|', $thedata); 
       if ($partno == $varname) { 
        $myFile = "purchases.txt"; 
        $fh = fopen($myFile, 'a') or die("ERROR: Failed to open purchases file!\n"); 
        $content = $now . "|" . $visitor . "|" . $partno . "|" . $name . "|" . $price . "\n"; 

        if (!(fwrite($fh, $content))) { 
         echo "<p>ERROR: Cannot write to file($myFile)\n</p>"; 
         exit; 
        } else { 
         echo "<p>Order Submitted!</p>"; 
         fclose($fh); 
        } 
       } 
      } 
     } 
     ?> 

    </table> 

    <input type="button" onClick="parent.location='home.php'" value="Return Home"> 
    <input type="button" onClick="parent.location='items.php'" value="New Purchase"> 

Если 2 элементы выбраны выход является:

Сделка Завершено поручение! Заказ отправлен!

+0

* «плоская база данных файлов» * ... есть сайты электронной коммерции, которые используют плоские файловые базы данных? – Kermit

+0

Это прототип – user2170008

+1

a pro type? .... – brbcoding

ответ

1

Следите за тем, есть ли ошибка и переместите другое вне цикла.

$error=false; 
    foreach ($_POST as $varname => $varvalue) { 
     foreach ($data as $thedata) { 
      list($partno, $name, $description, $price, $image) = explode('|', $thedata); 
      if ($partno == $varname) { 
       $myFile = "purchases.txt"; 
       $fh = fopen($myFile, 'a') or die("ERROR: Failed to open purchases file!\n"); 
       $content = $now . "|" . $visitor . "|" . $partno . "|" . $name . "|" . $price . "\n"; 

       if (!(fwrite($fh, $content))) { 
        echo "<p>ERROR: Cannot write to file($myFile)\n</p>"; 
        $error=true; 
        exit; 
       } 
      } 
     } 
    } 
if(!$error) { 
    echo "<p>Order Submitted!</p>"; 
    fclose($fh); 
} 

Хотя, как вы его написали, вам даже не нужно условное прилегающее «поручение», потому что он никогда не будет выполняться, если есть ошибка. (Из-за выхода.)

Также вы можете переместить $ myfile из цикла, если он не изменится.

Вторая версия:

$myFile = "purchases.txt"; 
    foreach ($_POST as $varname => $varvalue) { 
     foreach ($data as $thedata) { 
      list($partno, $name, $description, $price, $image) = explode('|', $thedata); 
      if ($partno == $varname) { 
       $fh = fopen($myFile, 'a') or die("ERROR: Failed to open purchases file!\n"); 
       $content = $now . "|" . $visitor . "|" . $partno . "|" . $name . "|" . $price . "\n"; 

       if (!(fwrite($fh, $content))) { 
        echo "<p>ERROR: Cannot write to file($myFile)\n</p>"; 
        exit; 
       } 
      } 
     } 
    } 
    echo "<p>Order Submitted!</p>"; 
    fclose($fh); 
0

до того цикла Еогеасп:

$printed=false; 

тогда вместо

else { 
    echo "<p>Order Submitted!</p>"; 
    fclose($fh); 
} 

использования

else { 
    if(!$printed) 
    { 
     echo "<p>Order Submitted!</p>"; 
     $printed=true; 
    } 
    fclose($fh); 
} 
0

Вы должны удалить echo из else ветви и поставить его сразу после первой foreach закрывающей скобки

0

Вы можете использовать счетчик и посмотреть, если еще один был представлен

как:

$count=0; 
foreach ($_POST as $varname => $varvalue) { 
      foreach ($data as $thedata) { 
       list($partno, $name, $description, $price, $image) = explode('|', $thedata); 
       if ($partno == $varname) { 
        $myFile = "purchases.txt"; 
        $fh = fopen($myFile, 'a') or die("ERROR: Failed to open purchases file!\n"); 
        $content = $now . "|" . $visitor . "|" . $partno . "|" . $name . "|" . $price . "\n"; 

        if (!(fwrite($fh, $content))) { 
         echo "<p>ERROR: Cannot write to file($myFile)\n</p>"; 
         exit; 
        } else { 
         $count++; 
         fclose($fh); 
        } 
       } 
      } 
     } 
    if ($count>0) 
     echo "<p>Order Submitted! $count Times</p>"; 
Смежные вопросы