Wątek przeniesiony 2015-08-14 22:53 z PHP przez dzek69.

POST nie wysyła danych

0

Witam, mój problem polega na tym że dane z tego formularza

$log3 = @$polaczenie2 -> query("SELECT * FROM wiadomosci WHERE odbiorca='$login' ORDER BY data_nadania DESC LIMIT $limit, $nastronie" );
 
while($r = $log3 ->fetch_assoc())
    {	
 
        $zmienna=$r['id'];   
	echo '<form action="panel2.php" method="post">';
        echo '<input type="checkbox" name="'.$zmienna.'" value='.$zmienna.' />';



 
 
if ($r['stan']=='przeczytana'){
 
echo ("<a href=\"wiadomosc.php?id=".$zmienna."\">".$r['temat']."</a><br />");
}
else
{
echo ("<a href=\"wiadomosc.php?id=".$zmienna."\">".$r['temat']."</a>aaaa<br />");    
 
}







$_SESSION['czasowe']=$zmienna;
}

Nie są przesyłane tutaj:

else

{

	   if(isset($_POST['zmienna']))
                {
			$zmienna2=$_POST['zmienna'];
                        $log4 = @$polaczenie2-> query("DELETE FROM wiadomosci WHERE id='18'");
                         header("Location:panel.php");
		}
		       else echo 'coś nie działa';
}
?>

Proszę o pomoc, bo już bardzo długo męczę się z tym problemem. Z góry dziękuje i pozdrawiam.

1

Twoje pole nie nazywa się 'zmienna' tylko jakakolwiek-jest-w-danym-momencie-wartość-zmiennej-$zmienna, vide:

$zmienna=$r['id'];   
...
echo '<input type="checkbox" name="'.$zmienna.'" value='.$zmienna.' />';

Literówka? Może chciałeś tam:

name="zmienna"
0

Nazwa chekboxa jest na pewno dobra, poniewaz przy sprawdzaniu w przegladarce faktycznie odwołuje się do $zmiennej czyli w tym przypadku do id jaką dana wiadomość ma w wartośći, natomiast problem stanowi przekazanie danej. Ponadto przy zmianie danych na takie jak Twoje formularz dalej nie przesyła danych, tak jakby wszystko było zamknięte w tym jednym whilu i nie chciało z niego wyjść... pozdrawiam.

0

Po kolei:

  1. Nazwa zmiennej nie jest dobra, ponieważ w swoim kodzie który wkleiłeś niżej oczekujesz checkboxa, którego nazwa będzie brzmieć "zmienna":
  if(isset($_POST['zmienna']))
                {
            $zmienna2=$_POST['zmienna'];
  1. Jeśli checkbox wyświetla Ci się na stronie i przeglądarka nie pokazuje animacji ładowania strony, to znaczy, że while został opuszczony (w końcu to jest kod server-side, i on sam z siebie nic nie wysyła). Zresztą, ten while wygląda dobrze.

I teraz mi do głowy przyszły jeszcze dwie rzeczy:

  1. Nie widzę tam nigdzie
<input type="submit"></form>

W związku z tym, jak uruchamiasz wysyłanie z przeglądarki? Kliknięcie w link < a > nie spowoduje domyślnie wysłania formularza (ale da się to prosto zrobić javascriptem jeśli jest taka potrzeba).

  1. Nie za bardzo rozumiem również czemu tam akurat checkbox chcesz użyć. Tzn. jeśli chcesz jakiś id przekazać, to raczej normalny (tekstowy) typ inboxa brzmi rozsądniej.
    Ew. możesz zrobić dwa inputy - jeden ukryty z ID, a drugi będący checkboxem.
0

submit znajduje się poza whilem :) wklejam poniżej cały kod strony:

<?php
$polaczenie2 = @new mysqli('192.168.101.139', 'matis254_44', 'matis11@', 'matis254_portal');
$polaczenie3 = @new mysqli('192.168.101.139', 'matis254_44', 'matis11@', 'matis254_portal');

if (mysqli_connect_errno() != 0){
	echo '<p>Wystąpił błąd połączenia: ' . mysqli_connect_error() . '</p>';
}

else

{

$login=$_SESSION['login'];
$id_wiadomosci=$_GET['id'];
$wiadomoscs= @$polaczenie2 ->query("SELECT COUNT(*) AS ile FROM wiadomosci WHERE odbiorca='$login' ORDER BY data_nadania DESC"); 
$ile_nowych = $polaczenie2 ->query("SELECT COUNT(*) AS qnt FROM wiadomosci WHERE  odbiorca='$login' and stan='odebrana'");
$nowe= $ile_nowych->fetch_array();


echo '[<a href="logout.php">Wyloguj się!</a>]';
echo " ".'[<a href="nowa.php">Nowa wiadomość</a>]';
echo " ".'<a href="panel.php">Skrzynka odbiorcza</a>('.$nowe[qnt].')';
echo " ".'[<a href="wyslane.php">Skrzynka nadawcza</a>]';



echo "<p><b>Twoje wiadomości:<p><p>";




$row = $wiadomoscs ->fetch_array();
        $row -> extract;
		
		 $nastronie = 3; 
         $wyswietlane = 7; 
		 $allpages = ceil($row[ile]/$nastronie);($_GET['page']) or $_GET['page'] > $allpages or !is_numeric($_GET['page']) or $_GET['page'] <= 0){
                $page = 1;
        }else{
                $page = $_GET['page'];
        }
        $limit = ($page - 1) * $nastronie;



$log3 = @$polaczenie2 -> query("SELECT * FROM wiadomosci WHERE odbiorca='$login' ORDER BY data_nadania DESC LIMIT $limit, $nastronie" );
 
while($r = $log3 ->fetch_assoc())
    {	
 
        $zmienna=$r['id'];   
		echo '<form action="panel2.php" method="post">';
        echo '<input type="checkbox" name="'.$zmienna.'" value="'.$zmienna.'" />';



 
 
if ($r['stan']=='przeczytana'){
 
echo ("<a href=\"wiadomosc.php?id=".$zmienna."\">".$r['temat']."</a><br />");
}
else
{
echo ("<a href=\"wiadomosc.php?id=".$zmienna."\">".$r['temat']."</a>aaaa<br />");    
 
}







$_SESSION['czasowe']=$zmienna;

	}
 if($wyswietlane > $allpages){
                $wyswietlane = $allpages;
        }
        
        $forstart = $page - floor($wyswietlane/2);
        $forend = $forstart + $wyswietlane;
        
        if($forstart <= 0){ $forstart = 1; }
        
        $overend = $allpages - $forend;
        
        if($overend < 0){ $forstart = $forstart + $overend + 1; }
        

        $forend = $forstart + $wyswietlane;
        $prev = $page - 1;
        $next = $page + 1;
        $script_name = $_SERVER['SCRIPT_NAME'];
        

        if($page > 1) echo "<a href=\"".$script_name."?page=".$prev."\">Poprzednia</a>";
        if ($forstart > 1) echo "<a href=\"".$script_name."?page=1\">[1]</a>";
		if ($forstart > 2) echo "...";
        for($forstart; $forstart < $forend; $forstart++){
                if($forstart == $page){
                }else{
                        echo "";
                }
                echo "<a href=\"".$script_name."?page=".$forstart."\"> [".$forstart."] </a>";

        }
        if($forstart < $allpages) echo "...";
        if($forstart - 1 < $allpages) echo "<a href=\"".$script_name."?page=".$allpages."\">[".$allpages."]</a>";

        if($page < $allpages) echo "<a href=\"".$script_name."?page=".$next."\">Następna</a>";

        echo "</ul></div><div class=\"clear\">";




$_SESSION['lolo']=$nowe[qnt];
	echo '<input type="submit" value="Usuń wybrane wiadomości"/>';
}
$log3->free();

?>
0
$polaczenie2 = @new mysqli('192.168.101.139', 'matis254_44', 'matis11@', 'matis254_portal');
$polaczenie3 = @new mysqli('192.168.101.139', 'matis254_44', 'matis11@', 'matis254_portal');

Wystarczy jedno i na końcu:
http://php.net/manual/en/mysqli.close.php

Następnym razem postaraj się o lepsze formatowanie, bo ciężko to się przegląda.
Gdzieś na początku tego skryptu, gdzie dane mają być odbierane wrzuć:

var_dump($_POST);

i zobacz czy coś wypluwa.

0

Tumeg, wrzuciłem to o czym mówiłeś na sam początek pliku portal2.php i faktycznie wyrzuca rekordy, które były zaznaczone przez chekbox. Jednakże nie moge odebrać danej przez zmienna :/

1

Sprecyzujmy problem.

Masz N checkboxów o nazwach: ala, ma, kota
I chcesz odebrać ich wartość używając $_POST['traktor']
Zgadza się?

Cóż, to niestety nie zadziała. Jeśli chcesz odebrać wartość checkboxu o nazwie ala, musisz napisać $POST['ala'], a nie $['traktor']. Co de facto sprowadza nas do mojej pierwszej odpowiedzi ;)

Najłatwiej będzie to rozwiązać nazywając wszystkie checkboxy zmienna[], tj.
echo '<input type="checkbox" name="zmienna[]" value="'.$zmienna.'" />';

Wtedy w $_POST['zmienna'] dostajesz array z wszystkimi zaznaczonymi wartościami, np.:

costam.html

<form action="frr.php" method="POST">
  <input type="checkbox" name="frr[]" value="xyz" />
  <input type="checkbox" name="frr[]" value="123" />  
  <input type="checkbox" name="frr[]" value="<h1>" />  
  <input type="submit" />
</form>

frr.php

<pre>
<?php
echo htmlentities(var_export($_POST, true));

echo "\n\nZaznaczone pola:\n";
if (isset($_POST['frr']) && is_array($_POST['frr'])) {
  foreach ($_POST['frr'] as $v) {
    $v = htmlentities($v);
    echo "  $v\n";
  }
}

Test, dla zaznaczonych dwóch ostatnich pól:

array (
  'frr' => 
  array (
    0 => '123',
    1 => '<h1>',
  ),
)

Zaznaczone pola:
  123
  <h1>

P.S. <form> nie powinno być u Ciebie w while, tylko raz przed while.

0

Kurcze, jeżeli mogę się jakość zrewanżować, to napisz tylko jak :) wszystko śmiga aż miło. JESTEŚ WIELKI!!! Dziękuje :)

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