[PHP, HTML] Odwołanie z poziomu PHP do radio w HTML

0

Witam.
Jako ze zawsze znajdę tu odpowiedź na moje pytanie, postanowiłem i tym razem zasięgnąć waszej pomocy.
Mam połączenie z baza danych w Mqsql. Utworzyłem tabelkę w HTML gdzie będą wyświetlane rekordy z bazy, dodatkowo zrobiłem sobie kolumnę gdzie przy każdym rekordzie jest "radio" i teraz nie wiem jak się odwołać do zaznaczonego "radio" z poziomu PHP? To jest moja pętla która wyświetla rekordy w bazie.

<?php
    
    for ($i=0; $i<$num_result; $i++){
      $row = mysql_fetch_array($zmienna);
      echo "<tr>";
      echo "<td>".($i+1)."</td> "; 
      echo "<td>".stripslashes($row["Imie"]."</td>");
      echo "<td>".stripslashes($row["Nazwisko"]."</td>");
      echo "<td>".stripslashes($row["Telefon"]."</td>");
      echo "<td>".stripslashes($row["E-mail"]."</td>");
      echo "<td>".stripslashes($row["Adres"]."</td>");
      echo "<td><input type='radio' id='nazwaid' name='radiobutton' value='wartość' /></td>";
      echo "</tr>";
      }
  ?>
0

Jak to odwołać? Jak chcesz zaznaczyć dodajesz atrybut checked, a jak po odebraniu formularza metodą POST/GET chcesz sprawdzić czy dany radio input jest zaznaczony to sprawdzasz:

isset($_POST['radiobutton'])

Chyba najbardziej uniwersalna metoda - zwróci TRUE jeśli pole name=radiobutton jest zaznaczone, FALSE jeśli nie jest. Nie wiadomo tylko jak zadziała w przypadku kiedy masz zdefiniowane kilka takich inputów, bo każdy obrót pętli definiuje input o tej samej nazwie. Ja bym to zrobił tak:

while($row = mysql_fetch_array($zmienna)) {
      echo('<tr>');
      echo('<td>'.$row['Id'].'</td>');
      echo('<td>'.stripslashes($row["Imie"]).'</td>');
      echo('<td>'.stripslashes($row["Nazwisko"]).'</td>');
      echo('<td>'.stripslashes($row["Telefon"])."</td>");
      echo('<td>'.stripslashes($row["E-mail"])."</td>");
      echo('<td>'.stripslashes($row["Adres"])."</td>");
      echo('<td><input type="radio" id="radio_'.$row['id'].'" name="radio_'.$row['id'].'" /></td>');
      echo('</tr>');
}
0

Hmmm.
Może przedstawię bardziej szczegółowo mój problem, to jest jeden plik:

//jakis kod
<?php
    
while($row = mysql_fetch_array($zmienna)) {
      echo('<tr>');
      echo('<td>'.$row['Id'].'</td>');
      echo('<td>'.stripslashes($row["Imie"]).'</td>');
      echo('<td>'.stripslashes($row["Nazwisko"]).'</td>');
      echo('<td>'.stripslashes($row["Telefon"])."</td>");
      echo('<td>'.stripslashes($row["E-mail"])."</td>");
      echo('<td>'.stripslashes($row["Adres"])."</td>");
      echo('<td><input type="radio" id="radio_'.$row['id'].'" name="radio_'.$row['id'].'" /></td>');
      echo('</tr>');
}
  ?>
<form method="post" action="del.php"> <input type="submit" name="button3" value="Usuń kontakt" /> </form> //jakis kod

zmieniony wg Twojej podpowiedzi.
i teraz drugi:

<?php

   if (isset($_POST['radio_'])) {
    echo "Nie została wybrana operacja";
    exit;
 }

$radio_ = addslashes($radio_);  


@$db = mysql_pconnect("localhost", "root", "");

if (!$db){  
    echo "Nie można nawiązać połączenia z bazą danych";
    exit;
}

mysql_select_db("kontakty");

   $query = "delete from kontakty where Nr='radio_'";
   $result = @mysql_query($query);
   echo "kontakt został skasowany"; 
?>

chodzi o to aby po zaznaczeniu w tabeli jakiegos "radio" i naciśnięciu na przycisk (ten w "form") kontakt się usuwał z bazy - jednak nie działa i nie wiem co jest nie tak, proszę o pomoc.

0

W sumie to ja bym zrobił z tego tablicę.

while($row = mysql_fetch_array($zmienna)) {
      echo('<tr>');
      echo('<td>'.$row['Nr'].'</td>');
      echo('<td>'.stripslashes($row["Imie"]).'</td>');
      echo('<td>'.stripslashes($row["Nazwisko"]).'</td>');
      echo('<td>'.stripslashes($row["Telefon"])."</td>");
      echo('<td>'.stripslashes($row["E-mail"])."</td>");
      echo('<td>'.stripslashes($row["Adres"])."</td>");
      echo('<td><input type="radio" id="radio['.$row['Nr'].']" name="radio_['.$row['Nr'].']" /></td>');
      echo('</tr>');
}

I później w skrypcie robisz:

foreach($_POST['radio'] as $pozycja) {
   if ($pozycja != '' && is_numeric($pozycja)) {
      // jakiś kod usuwający rekord $pozycja
      mysql_query('DELETE FROM kontakty WHERE Nr = ' . $pozycja);
   }
}
0

Pokazuje następujacy błąd:
Invalid argument supplied for foreach()
do tego niestety mogę zaznaczyć kilka "radio"naraz

0

Zmień "radio" na "checkbox". I jeszcze jedna poprawka:

while($row = mysql_fetch_array($zmienna)) {
      echo('<tr>');
      echo('<td>'.$row['Nr'].'</td>');
      echo('<td>'.stripslashes($row["Imie"]).'</td>');
      echo('<td>'.stripslashes($row["Nazwisko"]).'</td>');
      echo('<td>'.stripslashes($row["Telefon"])."</td>");
      echo('<td>'.stripslashes($row["E-mail"])."</td>");
      echo('<td>'.stripslashes($row["Adres"])."</td>");
      echo('<td><input type="checkbox" id="radio'.$row['Nr'].'" name="radio['.$row['Nr'].']" /></td>');
      echo('</tr>');
}
0

Hmm.
Nadal ten sam blad: Invalid argument supplied for foreach()

0

Formularz wysyłasz POSTem? Wrzuć:

var_dump($_POST);
var_dump($_GET);

Przed tym foreachem i wyślij formularz.

0

Nie. Jeszcze raz mam w pierwszym pliku ten kod:

  <?php
    
while($row = mysql_fetch_array($zmienna)) {
      echo('<tr>');
      echo('<td>'.$row['Nr'].'</td>');
      echo('<td>'.stripslashes($row["Imie"]).'</td>');
      echo('<td>'.stripslashes($row["Nazwisko"]).'</td>');
      echo('<td>'.stripslashes($row["Telefon"])."</td>");
      echo('<td>'.stripslashes($row["E-mail"])."</td>");
      echo('<td>'.stripslashes($row["Adres"])."</td>");
      echo('<td><input type="checkbox" id="radio'.$row['Nr'].'" name="radio['.$row['Nr'].']" /></td>');
      echo('</tr>');
}
  ?>
  <form  method="post" action = "del.php">
 <input  type="submit" name="button3" value="Usuń kontakt" />
</form>

w drugim natomiast:

<?php
var_dump($_POST);
var_dump($_GET);
foreach($_POST['radio'] as $pozycja) {
   if ($pozycja != '' && is_numeric($pozycja)) {


		$radio = addslashes($radio);  


		@$db = mysql_pconnect("localhost", "root", "");

		if (!$db){  
			echo "Nie można nawiązać połączenia z bazą danych";
			exit;
		}

		mysql_select_db("kontakty");

   		$query = "delete from kontakty where Nr = ".$pozycja;
	   $result = @mysql_query($query);
	   echo "kontakt został skasowany"; 
	 }
  }
?>

no i pojawia sie ten blad:

array(0) { } array(1) { ["button3"]=> string(13) "Usu� kontakt" }
Invalid argument supplied for foreach()

0

Zaznaczyłeś jakieś pola i wysłałeś ten formularz?

0

he, no pewnie.

0

A fakt, najpierw wyrzucasz pola, a potem dopiero otwierasz formularz...
Trochę obserwuj swój kod, pytaniem innych o drobnostki nic nie zdziałasz sam.

0

czyli jak dobrze zrozumiałem mam to

<form method="post" action="del.php"> <input type="submit" name="button3" value="Usuń kontakt" /> </form>
wkleic przed to?:
  <quote><?php
    
while($row = mysql_fetch_array($zmienna)) {
      echo('<tr>');
      echo('<td>'.$row['Nr'].'</td>');
      echo('<td>'.stripslashes($row["Imie"]).'</td>');
      echo('<td>'.stripslashes($row["Nazwisko"]).'</td>');
      echo('<td>'.stripslashes($row["Telefon"])."</td>");
      echo('<td>'.stripslashes($row["E-mail"])."</td>");
      echo('<td>'.stripslashes($row["Adres"])."</td>");
      echo('<td><input type="checkbox" id="radio'.$row['Nr'].'" name="radio['.$row['Nr'].']" /></td>');
      echo('</tr>');
}
  ?></quote>

jesli o to chodziło to nadal mi nie działa, albo czegos nie moge zrozumiec, nie wiem;(

0

Przecież wszystko co jest poza znakami <form> nie jest dołączane do formularza.
Przed pętlą ma być <form>, a za pętlą </form>...

0

No kombinuje na wszystkie strony i jakos nie chce ruszyc, tak wyglada pierwszy plik php:

  <?php
  	echo ("<form   method='post' action = 'del.php'>
   		   <input  type='submit' name='button' value='Usuń kontakt' />");
	while($row = mysql_fetch_array($result)) {
      echo('<tr>');
      echo('<td>'.$row['Nr'].'</td>');
      echo('<td>'.stripslashes($row["Imie"]).'</td>');
      echo('<td>'.stripslashes($row["Nazwisko"]).'</td>');
      echo('<td>'.stripslashes($row["Telefon"])."</td>");
      echo('<td>'.stripslashes($row["Email"])."</td>");
      echo('<td>'.stripslashes($row["Adres"])."</td>");
      echo('<td><input type="checkbox" id="radio'.$row['Nr'].'" name="radio['.$row['Nr'].']" /></td>');
      echo('</tr>');
	}
	echo ("</form>");
  ?>

a tak wyglada drugi plik php:

<?php
var_dump($_POST);
var_dump($_GET);
foreach($_POST['radio'] as $pozycja) {
   if ($pozycja != '' && is_numeric($pozycja)) {


        $radio = addslashes($radio);  


        @$db = mysql_pconnect("localhost", "root", "");
//dalszy kod ....
?>

a to moj blad:
array(2) { ["button"]=> string(13) "Usuń kontakt" ["radio"]=> array(1) { [778]=> string(2) "on" } } array(0) { }

0

To nie błąd, tylko informacje z debuga. Możesz już wywalić te dwa var_dumpy na górze, wszystko powinno działać. Tylko łączenie się z bazą w każdym okrążeniu foreacha to dość głupi pomysł, walnij to na górę...

0

Tylko, ze to:

if ($pozycja != '' && is_numeric($pozycja))

a dokładniej $pozycja

 zwraca "on" a nie ciag numeryczny i warunek nie przejdzie. Jezeli usunę <code class="php">&&is_numeric($pozycja)

to pokazuje sie pusta strona a kontakt nie zostanie usuniety.

0

To pogłówkuj trochę...

foreach($_POST['radio'] as $index => $pozycja) {
   if ($pozycja != '' && is_numeric($index)) {

I usuwasz rekord o numerze takim co w zmiennej $index.

0

No super, działa ;) Wieeeelkie dzięki za fachowa pomoc.

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