Fatal error: Cannot redeclare odbierz() (previously declared in /koszyk.php:21) in /koszyk.php on line 127, jak to zlikwidować ?

0

Dlaczego wybija mi ten błąd.

Fatal error: Cannot redeclare odbierz() (previously declared in /koszyk.php:21) in /koszyk.php on line 127

Jak to zlikwodować.

Zadeklarowałem funkcję:

function odbierz($txt) {
 if (get_magic_quotes_gpc()) $txt = stripslashes($txt);
 return str_replace(array('\\',"'"), array('\\\\',"\'"), trim($txt));
}

Odwołanie to:

$id = odbierz($_REQUEST["id"]);

Jak to powino zostać poprawione ?

3

No akurat w przypadku tego błędu wszystko masz napisane:

Cannot redeclare odbierz() (previously declared in /koszyk.php:21) in /koszyk.php on line 127

"Nie można ponownie zadeklarować odbierz() (wcześniej zadeklarowanej w /koszyk.php:21) w /koszyk.php w wierszu 127"

1

@adamon: Pewnie importujesz ten sam plik w dwóch miejscach, w którym jest zadeklarowana funkcja, przez co deklarujesz ją dwa razy.:

0

Nie importuję, nie ma nigdzie słowa import..... Jak to można zaimportować ?

1
adamon napisał(a):

Nie importuję, nie ma nigdzie słowa import..... Jak to można zaimportować ?

include(), include_once(), require, require_once()? Używasz może biblioteki która deklaruje taką funkcje?

Najlepiej będzie jak pokażesz cały kod.

Bo tak, jeśli masz dwie takie same funkcje, to musisz jedną z nich usunąć. Jeśli masz dwie różne funkcje, to jednej musisz zmienić nazwę i poprawić wywołania (albo użyć bardziej zaawansowanego scope'owania, tak żeby się nie widziały).

0

Nic takiego w kodzie nie ma. To jest ten kod:

<?
session_start();
?>
<?='<?xml version="1.0" encoding="utf-8"?>';?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
 "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl"><head>
<meta http-equiv="Content-type" content="text/html; charset=iso-8859-2" />
<title>tytuł strony</title></head><body>

<p><b>Koszyk</b> / <a href="index.php">wróć do towarów</a>/ <a href="dane.php">dane</a></p>

<?

$sql_serwer = "";
$sql_login  = "";
$sql_haslo  = "";
$sql_baza   = "";
$sql_tabela = "produkty";

function odbierz($txt) {
 if (get_magic_quotes_gpc()) $txt = stripslashes($txt);
 return str_replace(array('\\',"'"), array('\\\\',"\'"), trim($txt));
}


$id = odbierz($_REQUEST["id"]);
$sz = isset($_REQUEST["sz"])?number_format($_REQUEST["sz"],0,".",""):"";

if ($id<>"") {
 if (mysql_connect($sql_serwer, $sql_login, $sql_haslo)
   and mysql_select_db($sql_baza)) {
   $wynik = mysql_query("SELECT * FROM $sql_tabela WHERE id='$id'");
   mysql_close();
 }
 if ($wynik and mysql_num_rows($wynik)==1) {
   $dane = mysql_fetch_array($wynik);
   $_SESSION["koszyk"]["$id"]["towar"]=$dane["towar"];
   $_SESSION["koszyk"]["$id"]["cena"]=$dane["cena"];
 $_SESSION["koszyk"]["$id"]["rozmiar"]=$_GET["rozmiar"];

   if ($sz=="") $_SESSION["koszyk"]["$id"]["ile"]++;
   else if ($sz>=1) $_SESSION["koszyk"]["$id"]["ile"]=$sz;
   else if ($sz<=0) unset($_SESSION["koszyk"]["$id"]);
 }
}


if (count($_SESSION["koszyk"])>0) {
 echo "<table border=\"1\">
 <colgroup>
   <col />
   <col align=\"right\" />
   <col align=\"center\" />
   <col align=\"right\" />
 </colgroup>
 <tr><th>towar</th><th>cena</th><th>sztuk</th><th>łącznie</th></tr>";

 foreach($_SESSION["koszyk"] as $indeks=>$kosz) {
  $laczniesztuk +=$kosz["ile"];
 	$cena = $kosz["cena"];


$towar .= $kosz["towar"];
$towar .= "<br />Rozmiar: ";
  $towar .= $kosz["rozmiar"];
   echo "<tr>";
   echo "<td>$towar</td>";

   echo "<td>$cena zł</td>";

   echo "<td>
   <form action=\"koszyk.php\" method=\"get\" style=\"display:inline;\">
     <div style=\"display:inline;\">
     <input type=\"hidden\" name=\"id\" value=\"$indeks\" />
     <input type=\"text\" name=\"sz\" value=\"{$kosz["ile"]}\"
       style=\"width:25px;\" />
     <input type=\"submit\" value=\"zmień\" style=\"width:45px;\" />
   </div></form>
   <form action=\"koszyk.php\" method=\"get\" style=\"display:inline;\">
     <div style=\"display:inline;\">
     <input type=\"hidden\" name=\"id\" value=\"$indeks\" />
     <input type=\"hidden\" name=\"sz\" value=\"0\"
       style=\"width:25px;\" />
     <input type=\"submit\" value=\"usuń\" style=\"width:45px;\" />
   </div></form>
   </td>";
   echo "<td>".number_format($cena*$kosz["ile"],2,".","");
   echo " zł</td>";

   echo "</tr>";
   $lacznie +=$cena*$kosz["ile"];
 $laczniesztuk +=$kosz["ile"];
 }
 echo "<tr><td colspan=\"3\" align=\"right\">
 w sumie: </td><td>";
 echo number_format($lacznie,2,".","")." zł</td></tr>";
 echo "</table>";
} else echo "<p>Koszyk jest pusty...</p>";
?>

</body>
</html>
0

No to najprawdopodobniejszą opcją jest to że ten plik, który wkleiłeś jest include'owany wiele razy przez coś.

Czy to jest Twój cały projekt, czy masz też inne pliki tutaj? I w jaki sposób uruchamiasz program? Masz jakiś apache/nginx, czy coś podobnego? Daj nam więcej szczegółów.

0

Ten uruchamia się jako pierwszy. Ten wywołuje drugi powyżej tzw. koszyk:

<?
session_start();
?>

<?='<?xml version="1.0" encoding="utf-8"?>';?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
 "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl"><head>
<meta http-equiv="Content-type" content="text/html; charset=iso-8859-2" />
<title>tytuł strony</title></head><body>

<p><b>Wybierz towar ze sklepu</b> / <a href="koszyk.php">koszyk</a></p>
<?
//rozbijanie po przecinkach
$rozmiary = "XS,S,M,L,XL,XXL,XXXL";
$ilosci = "100 szt,200 szt,500 szt";

$tablicarozmiarow = explode(",", $rozmiary);
$tablicailosci = explode(",", $ilosci);

$ilerozmiarow=count($tablicarozmiarow);
$ileilosci = count($tablicailosci);


$sql_serwer = "";
$sql_login  = "";
$sql_haslo  = "";
$sql_baza   = "";
$sql_tabela = "produkty";

if (mysql_connect($sql_serwer, $sql_login, $sql_haslo)
 and mysql_select_db($sql_baza)) {
 $wynik = mysql_query("SELECT * FROM $sql_tabela");
 mysql_close();
}

if ($wynik) {

 echo "<table>";
 echo "<tr><th>produkt</th><th>rozmiar</th><th>cena</th><th> </th></tr>";
 while($dane = mysql_fetch_array($wynik)) {
   $id = $dane["id"];
   $towar = $dane["towar"];
   $cena = $dane["cena"];
 echo "<form action=\"koszyk.php?id=$id\" method=\"GET\">";
 echo '<input type="hidden" name="id" value="'.$id.'" />';
   echo "<tr><td>$towar</td>";

 echo "<td><select name='rozmiar'>";
	for ($i=0; $i <$ilerozmiarow; $i++)
	   {
	    echo "<option value=\"$tablicarozmiarow[$i]\">$tablicarozmiarow[$i]</option>";
	   }
	echo "</select></td>";

 echo "<td>$cena zł</td>";
   echo "<td><input type=\"submit\" value=\"dodaj do koszyka\" /></td>";


 echo "</tr>";
 echo "</form>";
}
 echo "</table>";
}
?>

</body>
</html>
0

@adamon: To wygląda jakbyś miał serwer który współdzieli procesy php, jak np docker. Wtedy wielokrotne otworzenie tej samej strony powoduje redeklarację scope'u.

Pytanie jest takie: Czy jesli wyłączysz całkiem aplikacje/server, co tam masz. Włączysz ją od nowa, otworzysz stronę pierwszy raz: widzisz błąd? Czy dopiero jak spróujesz otworzyć ją drugi raz?

PS: Noi powiedz jak uruchamiasz serwer najlepiej.

0

Tam jeszcze pojawia się błąd:

Warning: count(): Parameter must be an array or an object that implements Countable in /koszyk.php on line 51

Nie rozumiem co mam poprawić ?

Serwer mam w home.pl

1
adamon napisał(a):

**Tam jeszcze pojawia się błąd:

Warning: count(): Parameter must be an array or an object that implements Countable in /koszyk.php on line 51**
Nie rozumiem co mam poprawić ?

Te dwa które wkleiłeś to są wszystkie pliki? Czy masz jeszcze jakieś?

0

nie mam już żadnych plików, to jest wszystko. index.php uruchamia koszyk.php który się wysypuje

1

A ten zaś o koszykach...

Może jakbyś napisał ten kod porządnie, normalnie sformatował, nie mieszał php z htmlem, itp., to by łatwiej się to sprawdzało...

0

@adamon:

adamon napisał(a):

nie mam już żadnych plików, to jest wszystko. index.php uruchamia koszyk.php który się wysypuje

Co masz na myśli dokładnie mówiąc

. index.php uruchamia koszyk.php który się wysypuje

?

Możesz pokazać kawałek kodu o którym mówisz?

0
adamon napisał(a):

**Tam jeszcze pojawia się błąd:

Warning: count(): Parameter must be an array or an object that implements Countable in /koszyk.php on line 51**
Nie rozumiem co mam poprawić ?

A tu chodzi o to że próbujesz zrobić count() na czymś co nie jest arrayem, pewnie na null.

Mój strzał to tutaj:

count($_SESSION["koszyk"])>

Pewnie w $_SESSION nie ma klucza "koszyk".

1 użytkowników online, w tym zalogowanych: 0, gości: 1