problema functia DELETE

Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
MarPlo
Administratorul site-ului
Mesaje: 4343

problema functia DELETE

Pai, trebuie pus id-ul in link, cel din tabel, la selectul care preia datele din mysql.
Adica, la ce ai acolo trebuie pus asa:
echo '... <a class="button" onclick="return confirm (' . $confirm_message . ');" href="stergere_gand.php?id='. $rand['id'] . '">Sterge</a> ...';

trif Mesaje: 500
salut, am facut cum ai zis u, dar nu imi sterge ci imi dispar de pe ecran daca le dau la oricare indiferent iar la o reinprospatare a paginii imi apar exact cum au fost. nu stiu ce sa ii fac. uite codul:

Cod: Selectaţi tot

 <?php
$host = "localhost";
$utilizator = "root"; 
$parola = "pass";
$numebd = "bd";	
$conn = mysql_connect($host, $utilizator, $parola);
if (!$conn) {
  echo 'Conectare nereusita la MySQL'; 
  exit;
}
if (!mysql_select_db($numebd, $conn)) {
  echo 'Baza de date nu a putut fi selectata deoarece : '. mysql_error();
  exit;
}
$sql = "SET NAMES 'utf8'";
mysql_query($sql, $conn);

// Afla cate linii sunt in tabel (MODIFICATI 'un_gand') din baza de date  
$sql="SELECT * FROM un_gand  ORDER BY id DESC";
$result = mysql_query($sql, $conn) or trigger_error(E_USER_ERROR); 
$r = mysql_fetch_row($result);  
$numrows = $r[0];  
// Stabileste numarul de linii din tabel afisate in pagina 
$rowsperpage = 10;  
// afla numarul total necesar de pagini 
$totalpages = ceil($numrows / $rowsperpage);		// ceil face rotunjire la int. maxim
// Obtine pagina curenta sau seteaza default 
if (isset($_GET['currentpage']) && is_numeric($_GET['currentpage'])) {  
  // seteaza variabila ca int 
  $currentpage = (int) $_GET['currentpage'];  
} else {  
  // pagina care este initial afisata (pagina default) 
  $currentpage = 1;  
}
// daca pagina curenta e mai mare decat total pagini...
if ($currentpage > $totalpages) {  
  // seteaza pagina curenta la ultima pagina  
  $currentpage = $totalpages;  
} 
// daca pagina curenta e mai mica decat prima pagina...  
if ($currentpage < 1) {  
  // seteaza pagina curenta la prima pagina   
  $currentpage = 1;  
} 
// lista cu pagini, in functie de pagina curenta   
$offset = ($currentpage - 1) * $rowsperpage;  
// obtine datele din tabel (MODIFICATI 'un_gand') din baza de date  
$confirm_message = "'Stergeti maxima din baza de date?'";
$litera = $_GET['id'];
$sql="SELECT * FROM `un_gand` WHERE `mesaj` LIKE '$litera%' ORDER BY id DESC LIMIT $offset, $rowsperpage";
$result = mysql_query($sql, $conn) or trigger_error(E_USER_ERROR);
echo '<center><table border="0" width="450" >';
// parcurgerea matricei cu datele obtinute
while ($rand=mysql_fetch_array($result)){
  echo '<tr>  <td><b><div align="left">&nbsp;&nbsp;'.$rand['mesaj'].' <font color="red"><div align="right"><br>'.$rand['autor'].'&nbsp;&nbsp;</div> </font></div></b></td> <td><a class="button" onclick="return confirm (' . $confirm_message . ');" href="stergere_gand.php?id='. $rand['id'] . '">Sterge</a></td></tr>';
if(isset($_GET['id'])) {
  $id = $_GET['id'];
   $query = "DELETE FROM `un_gand` WHERE `id`='". $id. "'";
  mysql_query($query, $conn);
}
    }
echo '</table></center>';   

/*** Construirea link-urilor pt. paginare ***/ 
// raza nr. link-uri din jurul celui curent 
$range = 3;
 
// Link-uri inapoi, daca pagina curenta nu e prima
if ($currentpage > 1) {  
  // arata << pt. link la prima pagina  
  echo " <a href='{$_SERVER['PHP_SELF']}?currentpage=1'>prima </a> &nbsp; ";  
  // obtine nr. pagina din urma 
  $prevpage = $currentpage - 1;  
  // arata < pt. link la o pagina in urma 
  echo " <a href='{$_SERVER['PHP_SELF']}?currentpage=$prevpage'>inapoi</a> &nbsp;";  
} 
// definirea link-urilor din raza paginii curente
for ($x = ($currentpage - $range); $x < (($currentpage + $range) + 1); $x++) {  
  // daca e un nr. de pagina valid ... 
  if (($x > 0) && ($x <= $totalpages)) {  
	 // daca nr. e pagina curenta ...  
	 if ($x == $currentpage) {  
		// afiseaza nr. pagina fara a fi link  
		echo " [<b>$x</b>] ";  
	 // daca nr. nu e pagina curenta ...  
	 } else {  
		// il face link  
	echo " <a href='{$_SERVER['PHP_SELF']}?currentpage=$x'>$x</a> ";  
	 }  
  }
}	  
// Daca pagina curenta nu e ultima, afiseaza link inainte si spre ultima pagina
if ($currentpage != $totalpages) {  
  // obtine pagina urmatoare 
  $nextpage = $currentpage + 1;  
   // arata > pt. urmatoarea pagina   
  echo "&nbsp; <a href='{$_SERVER['PHP_SELF']}?currentpage=$nextpage'>inainte</a> ";  
  //  arata >> pt. ultima pagina
  echo " &nbsp; <a href='{$_SERVER['PHP_SELF']}?currentpage=$totalpages'>ultima</a> ";  
}
?>
si aici am modificat:

Cod: Selectaţi tot

$confirm_message = "'Stergeti maxima din baza de date?'";
$litera = $_GET['id'];
$sql="SELECT * FROM `un_gand` WHERE `mesaj` LIKE '$litera%' ORDER BY id DESC LIMIT $offset, $rowsperpage";
$result = mysql_query($sql, $conn) or trigger_error(E_USER_ERROR);
echo '<center><table border="0" width="450" >';
// parcurgerea matricei cu datele obtinute
while ($rand=mysql_fetch_array($result)){
  echo '<tr>  <td><b><div align="left">&nbsp;&nbsp;'.$rand['mesaj'].' <font color="red"><div align="right"><br>'.$rand['autor'].'&nbsp;&nbsp;</div> </font></div></b></td> <td><a class="button" onclick="return confirm (' . $confirm_message . ');" href="stergere_gand.php?id='. $rand['id'] . '">Sterge</a></td></tr>';
if(isset($_GET['id'])) {
  $id = $_GET['id'];
   $query = "DELETE FROM `un_gand` WHERE `id`='". $id. "'";
  mysql_query($query, $conn);
}
cred ca aici face stergerea si cred ca aici este hiba sau problema, dar nu stiu care este. multumesc mult, cu stima trif
M-am hotarat!
De ce sa fiu trist?
Oricum nu intereseaza pe nimeni...!
Mai bine sunt fericit si ii enervez pe toti cu fericirea mea!
http://www.cantaricrestine.ro
---> cu stima Trif

MarPlo Mesaje: 4343
Codul de stergere trebuie sa fie in pagina care e adaugata la link (stergere_gand.php).
Daca e aceeasi, incearca sa scoti if(isset($_GET['id'])) { ... cod pt. DELETE } din WHILE fiindca la incarcarea paginii cu linkul de stergere acel while nu mai executa ce e in el.

trif Mesaje: 500
salut, multumesc pentru ajutor, merge functia de delete, dar a aparut o mica prob, atunci cand vreau sa sterg ceva am in fatza acest link stergere_gand.php iar dupa ce aleg sa sterg gandul respectiv mi-l sterge dar sterge totul din cauza ca se pune link-ul pe stergere_gand.php?id=6 si nu este bine pt ca pagina este goala iar mie imi trebuie sa fie asa cum era inainte cand le vedem pe toate iar daca am sters un gand sa le vad pe toate in afara de acel gand, intelegeti? multumesc cu stima trif
M-am hotarat!
De ce sa fiu trist?
Oricum nu intereseaza pe nimeni...!
Mai bine sunt fericit si ii enervez pe toti cu fericirea mea!
http://www.cantaricrestine.ro
---> cu stima Trif

MarPlo Mesaje: 4343
Nu prea inteleg despre ce e vorba.
In link fiind "id=6", iar DELETE unde "... id=6" sterge doar acel rand din tabel.
Iar daca stegerea se face prin deschiderea altei pagini (stergere_gand.php), in acel fisier, dupa stergere puteti adauga un redirect php, cu header('Location: adresa_pagina'); pentru a redeschide acea pagina in loc de "stergere_gand.php".

trif Mesaje: 500
salut,
sa mai expic o data,
cand intru pe pagina, link-ul este stergere_gand.php si dupa ce aleg sa sterg un "gand" apare la link stergere_gand.php?id=4 dar cum s-a sters nu mai este info si atunci pagina este goala, si eu as vrea ca atunci cand sterg sa imi stearga dar sa nu mai imi apara pagina goala. de exemplu:
am pagina asta:

Cod: Selectaţi tot

1 info1
2 info2
3 info3
si sterg info2
viitoarea pagina sa imi apara:

Cod: Selectaţi tot

1 info1
3 info3
nu pagian goala. sper ca am explicat mai bine acum. cu stima trif
M-am hotarat!
De ce sa fiu trist?
Oricum nu intereseaza pe nimeni...!
Mai bine sunt fericit si ii enervez pe toti cu fericirea mea!
http://www.cantaricrestine.ro
---> cu stima Trif

MarPlo Mesaje: 4343
Pai, ori faci redirect cu functia header() la pagina care face afisarile, unde se actioneaza delete (vezi exemple pe net, cautand "redirect php").
Sau, in stergere_gand.php, dupa DELETE, care sa fie mai la inceput, faci iar SELECT si afisare ce a ramas.

trif Mesaje: 500
salut, am facut cum ai zis si la header imi da eroarea asta:

Cod: Selectaţi tot

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\sitefinal\stergere_gand.php:287) in C:\xampp\htdocs\sitefinal\stergere_gand.php on line 424
. iar cu punerea inca o data a SELECT-ului nu merge ca imi ramane in link stergere_gand.php?id=x si nu mai imi selecteaza ci imi lasa pag goala. nu stiu ce sa ii fac :-?? cu stima trif
M-am hotarat!
De ce sa fiu trist?
Oricum nu intereseaza pe nimeni...!
Mai bine sunt fericit si ii enervez pe toti cu fericirea mea!
http://www.cantaricrestine.ro
---> cu stima Trif

MarPlo Mesaje: 4343
functia header() e ca si session, adica nu functioneaza daca inainte se face vreun "echo" sau alta data de afisare in browser.
Dar in loc de aceasta functie, tot pt. redirect se poate crea cu echo meta-tag HTML Refresh.
echo '<meta HTTP-EQUIV="REFRESH" content="0; url=adresa_pagina">';

trif Mesaje: 500
salut, mie imi trebuie o varianta ca dupa ce sa sterg un gand sa nu imi mai fie pagina goala si sa nu mai fie in link-ul de sus stergere_gand.php?id=x ci sa fie stergere_gand.php. pt ca daca este stergere_gand.php imi arata ceea ce a mai ramas. cu stima trif
M-am hotarat!
De ce sa fiu trist?
Oricum nu intereseaza pe nimeni...!
Mai bine sunt fericit si ii enervez pe toti cu fericirea mea!
http://www.cantaricrestine.ro
---> cu stima Trif

MarPlo Mesaje: 4343
Incearca la instructiunea de delete, adica doar atunci cand o executa, urmatoarea comanda:

Cod: Selectaţi tot

// cod sql delete
if(mysql_query($query, $conn)) echo '<meta HTTP-EQUIV="REFRESH" content="0; url=stergere_gand.php">';
- Normal ar trebui sa functioneze, altfel nu mai stiu.

trif Mesaje: 500
salut, merge cum ai zis tu, dar mai este o problema, si aceasta este, dupa ce sterg ma trimite in stergere_gand.php DAR aici vad o modificare numai daca reinprospatez pagina, cum fac sa nu trebuiasca asta? am mutat si SELECT-ul in fata DELETE-lui si imi face selectia dar cea veche si dupa ce ii dau eu refresh atunci merge! cum sa fac?
si mai este o problema, am pus ca sa imi arate pe pagina 3 info, iar daca am 3 info in total imi face si pagina 2 dar goala, iar daca am 4 info imi pune si pe a doua dar imi face pe a treia si a patra goala nu stiu care este baiul.
uite codul

Cod: Selectaţi tot

$host = "localhost";
$utilizator = "root"; 
$parola = "pass";
$numebd = "bd";	
$conn = mysql_connect($host, $utilizator, $parola);
if (!$conn) {
  echo 'Conectare nereusita la MySQL'; 
  exit;
}
if (!mysql_select_db($numebd, $conn)) {
  echo 'Baza de date nu a putut fi selectata deoarece : '. mysql_error();
  exit;
}
$sql = "SET NAMES 'utf8'";
mysql_query($sql, $conn);

// Afla cate linii sunt in tabel (MODIFICATI 'un_gand') din baza de date  
$sql="SELECT * FROM un_gand  ORDER BY id DESC";
$result = mysql_query($sql, $conn) or trigger_error(E_USER_ERROR); 
$r = mysql_fetch_row($result);  
$numrows = $r[0];  
// Stabileste numarul de linii din tabel afisate in pagina 
$rowsperpage = 4;  
// afla numarul total necesar de pagini 
$totalpages = ceil($numrows / $rowsperpage);		// ceil face rotunjire la int. maxim
// Obtine pagina curenta sau seteaza default 
if (isset($_GET['currentpage']) && is_numeric($_GET['currentpage'])) {  
  // seteaza variabila ca int 
  $currentpage = (int) $_GET['currentpage'];  
} else {  
  // pagina care este initial afisata (pagina default) 
  $currentpage = 1;  
}
// daca pagina curenta e mai mare decat total pagini...
if ($currentpage > $totalpages) {  
  // seteaza pagina curenta la ultima pagina  
  $currentpage = $totalpages;  
} 
// daca pagina curenta e mai mica decat prima pagina...  
if ($currentpage < 1) {  
  // seteaza pagina curenta la prima pagina   
  $currentpage = 1;  
} 
// lista cu pagini, in functie de pagina curenta   
$offset = ($currentpage - 1) * $rowsperpage;  
// obtine datele din tabel (MODIFICATI 'un_gand') din baza de date  
$confirm_message = "'Stergeti maxima din baza de date?'";
$litera = $_GET['id'];
  if(isset($_GET['id'])) {
  $id = $_GET['id'];
   $query = "DELETE FROM `un_gand` WHERE `id`='". $id. "'";
 if(mysql_query($query, $conn)) echo '<meta HTTP-EQUIV="REFRESH" content="0; url=stergere_gand.php">';
    }
$sql="SELECT * FROM `un_gand` WHERE `mesaj` LIKE '$litera%' ORDER BY id DESC LIMIT $offset, $rowsperpage";
$result = mysql_query($sql, $conn) or trigger_error(E_USER_ERROR);
echo '<center><table border="0" width="450" >';
// parcurgerea matricei cu datele obtinute
while ($rand=mysql_fetch_array($result)){
  echo '<tr>  <td><b><div align="left">&nbsp;&nbsp;'.$rand['mesaj'].' <font color="red"><div align="right"><br>'.$rand['autor'].'&nbsp;&nbsp;</div> </font></div></b></td> <td><a class="button" onclick="return confirm (' . $confirm_message . ');" href="stergere_gand.php?id='. $rand['id'] . '">Sterge</a></td></tr>';
 //echo '<meta HTTP-EQUIV="REFRESH" content="0; url=stergere_gand.php">';
  }
echo '</table></center>';   

/*** Construirea link-urilor pt. paginare ***/ 
// raza nr. link-uri din jurul celui curent 
$range = 3;
 
// Link-uri inapoi, daca pagina curenta nu e prima
if ($currentpage > 1) {  
  // arata << pt. link la prima pagina  
  echo " <a href='{$_SERVER['PHP_SELF']}?currentpage=1'>prima </a> &nbsp; ";  
  // obtine nr. pagina din urma 
  $prevpage = $currentpage - 1;  
  // arata < pt. link la o pagina in urma 
  echo " <a href='{$_SERVER['PHP_SELF']}?currentpage=$prevpage'>inapoi</a> &nbsp;";  
} 
 
// definirea link-urilor din raza paginii curente
for ($x = ($currentpage - $range); $x < (($currentpage + $range) + 1); $x++) {  
  // daca e un nr. de pagina valid ... 
  if (($x > 0) && ($x <= $totalpages)) {  
	 // daca nr. e pagina curenta ...  
	 if ($x == $currentpage) {  
		// afiseaza nr. pagina fara a fi link  
		echo " [<b>$x</b>] ";  
	 // daca nr. nu e pagina curenta ...  
	 } else {  
		// il face link  
	echo " <a href='{$_SERVER['PHP_SELF']}?currentpage=$x'>$x</a> ";  
	 }  
  }
}		  
// Daca pagina curenta nu e ultima, afiseaza link inainte si spre ultima pagina
if ($currentpage != $totalpages) {  
  // obtine pagina urmatoare 
  $nextpage = $currentpage + 1;  
   // arata > pt. urmatoarea pagina   
  echo "&nbsp; <a href='{$_SERVER['PHP_SELF']}?currentpage=$nextpage'>inainte</a> ";  
  //  arata >> pt. ultima pagina
  echo " &nbsp; <a href='{$_SERVER['PHP_SELF']}?currentpage=$totalpages'>ultima</a> ";  
}
cu stima trif
M-am hotarat!
De ce sa fiu trist?
Oricum nu intereseaza pe nimeni...!
Mai bine sunt fericit si ii enervez pe toti cu fericirea mea!
http://www.cantaricrestine.ro
---> cu stima Trif

Subiecte similare