Нажмите на изображения и сделайте что-нибудь

Я работаю над этим заданием и застрял.
Итак, у меня есть форма с изображениями … Мне нужна программа, чтобы при нажатии на одно изображение … она записывала цену в текстовый файл …

Например,
Когда я нажимаю на изображение кокса … он пишет в текстовом файле как

2

затем, когда я нажимаю на изображение rootbeer … он должен добавить

2
2

Дело в том, что мой код работает, однако ввод удваивается, скажем, когда я просто нажимаю на изображение кокса … TXT-файл становится таким

2
2

Кроме того, когда я нажимаю кнопку отправки (Показать цены), она должна добавить цены и отобразить их … (ну, я могу работать над этим, ха-ха)

Спасибо!

Мой код такой:

<html><head><title>Online Vending Machine</title>
<body><div align="center">
<h2>Online Vending Machine<hr/></h2>
<?php
$fileName = "c:/wamp/www/Assignment 3/prices.txt";

if(isset($_POST['coke'])) //test for when coke image clicked
{
$coke = "2\r\n";
file_put_contents($fileName, $coke, FILE_APPEND | LOCK_EX);
}
else if(isset($_POST['rootbeer'])) //test for when rootbeer image clcked
{
$rbeer = "2\r\n";
file_put_contents($fileName, $rbeer, FILE_APPEND | LOCK_EX);
}

if(isset($_POST['submit']))
{
echo file_get_contents($fileName);
}

display_form();

function display_form()  //displays actual form
{
?>
<b>
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>"><table>
<tr><td><input type="image" src="images/cola.jpg" width="200" height="300" name="pop1" />
<input type="hidden" name="cola" /><br/><center>Cola ($2.00)</center></td>
<td><input type="image" src="images/rootbeer.jpg" width="200" height="200" name="pop2" />
<input type="hidden" name="rootbeer" /><br/><center>Rootbeer ($2.00)</center></td>
<td><input type="image" src="images/lemonlime.jpg" width="200" height="300" name="pop3" />
<input type="hidden" name="lemonlime" /><br/><center>LemonLime ($1.00)</center></td></tr>
<tr><td><input type="image" src="images/grape.jpg" width="200" height="200" name="pop4" />
<input type="hidden" name="grape" value="1.50" /><br/><center>Grape Soda ($1.50)</center></td>
<td><input type="image" src="images/cream.jpg" width="200" height="200" name="pop5" />
<input type="hidden" name="cream" value="1.50" /><br/><center>Cream Soda ($1.50)</center></td>
<td><center><input type="submit" name="submit" value="Show Prices" /></center></td></tr>
</table></form><br/></b>
<?php
}
?>
</div>
</body>
</html>

0

Решение

Короткий ответ — ваши пост-переменные ‘coke’ и ‘rootbeer’ всегда будут заданы так, как они закодированы. Это добавляет 2 для колы и 2 для rootbeer. Попробуйте нажать на любое из других изображений, и вы получите два 2. Вместо этого вы должны проверить, установлены ли переменные записи pop1_x или pop1_y, так как они устанавливаются только в зависимости от того, какое изображение щелкнуто.

Также рассмотрите возможность использования логики switch () вместо набора операторов if-then-elseif. РЕДАКТИРОВАТЬ — я имел в виду использовать switch () не для этого примера, а в будущем кодировании.

Попробуйте что-то вроде этого:

<html><head><title>Online Vending Machine</title>
<body><div align="center">
<h2>Online Vending Machine<hr/></h2>
<?php
$fileName = "c:/wamp/www/Assignment 3/prices.txt";
$beverage = '';

if(isset($_POST['pop1_x'])) //test for when coke image clicked pop1_x and pop1_y will be set
{
$beverage = "2\r\n";    //Change this so you can move the file write to one line.
}
else if(isset($_POST['pop2_x'])) //test for when rootbeer image clcked
{
$beverage = "1.50\r\n";
}
else if(isset($_POST['pop3_x'])) //test for when lemonlime image clcked
{
$beverage = "1.75\r\n";
}

if($beverage <> '')
file_put_contents($fileName, $beverage, FILE_APPEND | LOCK_EX); //Move this line down here to save lines of code

if(isset($_POST['submit']))
{
echo file_get_contents($fileName);
}

display_form();

function display_form()  //displays actual form
{
?>
<b>
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>"><table>
<tr><td><input type="image" src="images/cola.jpg" width="200" height="300" name="pop1" />
<input type="hidden" name="cola" /><br/><center>Cola ($2.00)</center></td>
<td><input type="image" src="images/rootbeer.jpg" width="200" height="200" name="pop2" />
<input type="hidden" name="rootbeer" /><br/><center>Rootbeer ($1.50)</center></td>
<td><input type="image" src="images/lemonlime.jpg" width="200" height="300" name="pop3" />
<input type="hidden" name="lemonlime" /><br/><center>LemonLime ($1.75)</center></td></tr>
<tr><td><input type="image" src="images/grape.jpg" width="200" height="200" name="pop4" />
<input type="hidden" name="grape" value="1.50" /><br/><center>Grape Soda ($1.50)</center></td>
<td><input type="image" src="images/cream.jpg" width="200" height="200" name="pop5" />
<input type="hidden" name="cream" value="1.50" /><br/><center>Cream Soda ($1.50)</center></td>
<td><center><input type="submit" name="submit" value="Show Prices" /></center></td></tr>
</table></form><br/></b>
<?php
}
?>
</div>
</body>
</html>

Комментарии показывают, что было изменено.

1

Другие решения

Других решений пока нет …