Autor Zpráva
Truuhlik
Profil
Takže při tvorbě jednoduchého rozhraní, jsem tak trochu narazil na problém:

Mám vytvořený formulář, ve kterém mám možnosti Upravit nebo Smazat označené, při volbě smazat označené se vymažou označené řádky a bez problémů vše funguje.

Bohužel mě trápí ten fakt, že když označím více řádků a kliknu na jakékoli upravit, tak se mi samozřejmě naženou všechny označené řádky (jejich id) do array a tím pádem je problém editovat jenom ten jeden řádek. (bude to používat více lidí, proto to řeším)

Pro ukázku kód (na 100% je to jenom zkušební kód, jde mi jenom na to jak chytře vykoumat tu editaci:

TABULKA:
CREATE TABLE data (
id int NOT NULL AUTO_INCREMENT,
nazev TEXT NOT NULL,
PRIMARY KEY (id)
) COLLATE utf8_unicode_ci



config.php
<?php
$server = "localhost";
$user = "uzivatel";
$heslo = "heslo";
$db = "databaze";

mysql_connect($server, $user, $heslo);
mysql_select_db($db);
mysql_query("SET CHARACTER SET utf8");

header("Content-Type: text/html; charset=utf-8");
?>



index.php
<?php
include 'config.php';
header("Content-Type: text/html; charset=utf-8");

echo '
<form action="edit.php" method="post">
<table style="width: 400px">
	<tr>
		<td colspan="3"><a href="pridat.php">Přidat novinku</a></td>
	</tr>
	<tr style="height: 30px;">
		<td colspan="3">&nbsp;</td>
	</tr>
	<tr style="background-color: #0b0b0b; color: #ffffff;">
		<td>Vybrat</td>
		<td><strong>Název</strong></td>
		<td><strong>Upravit</strong></td>
	</tr>';

if(empty($_GET['page'])){$page = "";}
else{$page = $_GET['page'];}

$celkem = mysql_num_rows(mysql_query("SELECT id FROM data"));
$pocet = 10;
$max_stranek = ceil($celkem/$pocet);
$url_stranka = ($page/$pocet)+1;

$dotaz = mysql_query("SELECT * FROM data ORDER BY nazev ASC LIMIT ".intval($page).",$pocet");
while($data = mysql_fetch_assoc($dotaz)){

$d_id = $data['id'];
$d_nazev = $data['nazev'];

echo '<tr>
		<td><input type="checkbox" name="id[]" value="'.$d_id.'"></td>
		<td>'.$d_nazev.'</td>
		<td><input type="submit" name="akce" value="Upravit"></td>
	</tr>';
}	
	
	
echo '
  <tr style="height: 20px;">
		<td colspan="3">&nbsp;</td>
	</tr>	
	<tr>
		<td colspan="3"><input type="submit" name="akce" value="Smazat označené"></td>
		</tr>
	<tr>
		<td>&nbsp;</td>
	</tr>
	<tr>
		<td colspan="3">
		<p style="text-align: center;"><strong>1</strong> 2 3 4 5 6</p>
		</td>
	</tr>
</table>
</form>
';

?>



edit.php
<?php
include 'config.php';
header("Content-Type: text/html; charset=utf-8");

$cislo = $_POST['id'];
$akce = $_POST['akce'];

$celkem = count($cislo);

if($cislo!=""){


if($akce==""){
header("location: index.php");
}

elseif($akce=="Upravit"){
$x = mysql_query("SELECT * FROM data WHERE id=' /*a tady je to teda hodně prekérní, při jednom
 checkboxu vím jak na to, ale při více už je problém*/  ' LIMIT 1");
while($y = mysql_fetch_array($x){
$d_id = $y['id'];
$d_nazev = $y['nazev'];
}

echo '<h1>Editace:</h1>
<form action="ulozit.php" method="post">
<table">
	<tr>
		<td>Název:<input type="hidden" name="id" value="'.$d_id.'"></td>
		<td><input type="text" name="nazev" value="'.$d_nazev.'"></td>
	</tr>
	<tr>
		<td>&nbsp;</td>
		<td><input type="submit" value="Uložit změny"></td>
	</tr>
</table>
</form>
';
}


elseif($akce=="Smazat označené"){

for($i=0; $i<$celkem; $i++){
mysql_query("DELETE FROM data WHERE id='".$cislo[$i]."'");
}

echo '<h1>Vybrané novinky byly úspěšně smazány !</h1>';
echo '<p><a href="index.php">pokračovat &gt;&gt;</a></p>';
}

else{
echo '<h1>Požadovaná stránka neexistuje !</h1>
<p><a href="index.php">pokračovat &gt;&gt;</a></p>';
}

}
else{
echo '<h1>Nebyla vybrána žádná novinka !</h1>
<p><a href="index.php">pokračovat &gt;&gt;</a></p>';
}


?>
panther
Profil
Truuhlik:
asi nejjednodušší by bylo místo submit na úpravu použít odkaz, kde by bylo jednoznačně určené ID. Zaškrtnu tedy 10 checkboxů, kliknu na odkaz Upravit u jednoho z nich (nebo u neoznačeného), tak budu editovat ten který prvek a checkboxy zůstanou zapomenuty.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0