Pobieranie danych z <select>

0

Cześć. Piszę skrypt, który ma za zadanie zaktualizować kolumnę 'odznaka', po wybraniu odpowiedniej liczby z pola SELECT.

Kod formularza:

mysql_connect("localhost", "root", "");
mysql_select_db("baza");
$result = mysql_query('SELECT odznaka, wlasciciel FROM odznaki');
echo '<center><br /><br /><br /><form action="odznaka.php">
	<select id="odznaki" name="odznaki" size="20">';
while ($row = mysql_fetch_array($result, MYSQL_BOTH)) {
	if($row['wlasciciel'] == NULL)
	{
		$row['wlasciciel'] = "WOLNE";
	}
    echo '<option value="'.$row[0].'">odznaka nr '.$row[0]. ' - '. $row['wlasciciel'].'</option>';
}
echo '</select><br /><br />
	<input style="margin-left:-75%" type="submit" id="submit" name="submit" value="Wybierz">
</form></center>';

echo '</div>';
}

Skrypt PHP:

<?php
ob_start();
session_start();
?>
<!DOCTYPE html>
<html lang="pl">
 <head>
  <meta charset="UTF-8">

  <link rel="stylesheet" href="style.css">
 </head>
<body>

 <section id="main">
    <?php
	if (empty($_COOKIE['islogged'])) {
        header('Refresh: 5; url=index.php');
        return '<script>alert("Czas sesji wygasł. Proszę zalogować się ponownie. Za chwilę nastąpi przekierowanie")</script>';
   }

   if (isset($_SESSION['nick'])) {
    if($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST)) {
	   	 
		 $login = $_SESSION['nick'];
		$odznaka = $_POST['odznaki'];
	    if(empty($odznaka)) {
		    return '<p>Wypełnij wszystkie dane.</p>';
		}
		else {
            if (file_exists('config.php')) {
                include_once('config.php');
            } else {
                return 'config.php file not found.';
            }

            $mysqli = new mysqli($config['db']['host'], $config['db']['user'], $config['db']['password'], $config['db']['database']);

            if($mysqli -> connect_error) {
                return '<p>Problem z połączeniem się z bazą danych:' . $mysqli->connect_error . '[' . $mysqli->connect_errno . ']</p>';
            } else {
                $login     = trim(strip_tags($mysqli -> real_escape_string($login)));
				$odznaka = $_POST['odznaki'];
				$stmt = $mysqli->prepare("UPDATE `user` SET `odznaka`='$odznaka' WHERE `login`='$login'");
				if (!$stmt) {
				echo "false";
				}
				else {
					$stmt->bind_param("ss", $login, $odznaka);

				$stmt->execute();
					}


}

                if($stmt->affected_rows == 1) {
         echo '<a style="
background:    #3d85c6;
background:    -webkit-linear-gradient(#3d85c6, #073763);
background:    linear-gradient(#3d85c6, #073763);
border-radius: 5px;
color:         #fff;
display:       inline-block;
padding:       8px 20px;
font:          normal 700 24px/1 "Calibri", sans-serif;
text-align:    center;
text-shadow:   1px 1px 0 #000;
		 " href="ucp.php" class="myButton">Powrót</a>';
         echo '       <a style="
background:    #3d85c6;
background:    -webkit-linear-gradient(#3d85c6, #073763);
background:    linear-gradient(#3d85c6, #073763);
border-radius: 5px;
color:         #fff;
display:       inline-block;
padding:       8px 20px;
font:          normal 700 24px/1 "Calibri", sans-serif;
text-align:    center;
text-shadow:   1px 1px 0 #000;
		 " href="logout.php" class="myButton">Wyloguj</a>';
					echo "<h1 style='color:white'>Udało Ci się ustawić odznakę " . " '$odznaka'";

                } else {
                header('Location: odznaki.php');

                }
            }
	}
   }
   else{
	   header('Location: index.php');
   }
	?>
 </section>
</body>
</html>
<?php
ob_end_flush();
?>

Nie wyskakuje żaden błąd, co najlepsze. Siedzę nad tym już godzinę, nie mam pojęcia, co jest źle.

0

W jakim celu Ty, niczym zwierzę, tyle stylów pakujesz w te a, zamiast je wrzucić, jak człowiek, do pliku CSS?

Plus: co mówi debugger?

0

Właśnie nic nie pokazuje, pusto.

0

Jak to debugger nic nie pokazuje? Co to w ogóle znaczy?

0

Mój błąd.
[PHP Warning: session_start(): Cannot send session cookie - headers already sent in C:\xampp\htdocs\odznaka.php on line 3]
[PHP Warning: session_start(): Cannot send session cache limiter - headers already sent in C:\xampp\htdocs\odznaka.php on line 3]
[PHP Warning: Cannot modify header information - headers already sent in C:\xampp\htdocs\odznaka.php on line 17]
[Parse Error: syntax error, unexpected identifier (command or function name), expecting # (pound sign) or digits (numbers)]

0

To również nie jest debugger - naprawdę nie ma nic złego w sprawdzaniu znaczenia słów, których nie znasz ;-)

Ale przynajmniej wiadomo już o co chodzi - która część cannot send session cookie - headers already send jest dla Ciebie niejasna?

0

Jakieś rozwiązanie proponujesz?
Nie pomaga zmiana kodowania. Usunięcie session_start() razem z ob_start i ob_end_flush() razem ze sprawdzaniem, czy użytkownik jest zalogowany też nie pomaga, po prostu nie pokazuje żadnych warningów / errorów ani skrypt nie chce działać.

0

Na sam początek radzę wyrzucić ten kod i napisać całkowicie od zera, uważając przy tym na SQL injection oraz zapominając o istnieniu wszystkich funkcji z rodziny mysql_*.

0

mysql_* Użyte było jedynie w formularzu, do wyświetlenia opcji w <select>. Nie zależy mi na zabezpieczeniu tego przed SQL Injection, a jedynie na tym, by to działało.

1

mysql_* Użyte było jedynie w formularzu, do wyświetlenia opcji

Nie rusza mnie wytłumaczenie ja tak tylko w tej jednej części napisałem. Rozszerzenie mysql zostało zdeprecjonowane, koniec, kropka.

Nie zależy mi na zabezpieczeniu tego przed SQL Injection

Warto nabyć dobre nawyki od samego początku.

Powtarzam: wyrzuć ten kod i napisz od nowa, ponieważ nie wiadomo w ogóle, co się tu dzieje - mieszasz logikę z widokiem, rozszerzenie mysql z mysqli, wplatasz ogromne cssy do atrybutu style i generalnie to, ehm, kamieni kupa.
Nie da się tego sensownie doprowadzić do działania, skoro ciężko w ogóle dojść, co ten kod robi.

No i na przyszłość - nie twórz kodu na zasadzie bezmyślnego przepisywania z poradnika. Po co Ci ta linijka na przykład: $stmt->bind_param("ss", $login, $odznaka);?

0

Dobra, napisałem kod od początku, od zera, jest o wiele lepiej, działa. Zmieniłem mysql_* w kodzie forularza na mysqli_*, wszystko działa perfekcyjnie i jest bardziej przejrzyście. Dzięki jeszcze raz za pomoc.

0

Wrzuć go, zobaczymy :P

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