Autor Zpráva
bodan
Profil *
Zdravím, na webu mám novinky a chci abych je mohl mazat a upravovat (zatím řešim mazání, upravení potom dokážu udělat podle toho). Každá novinka ma přiřazeno nějaké ID (to funguje dobře), ale teď si nijak nevybavuju jak to id zjistit a pak ho použít v SQL příkazu. Kod:

$mysql=mysql_query("select datum,text,id from novinky order by id desc");
while ($vysledek=mysql_fetch_array($mysql)){
    echo('
          <tr>
              <td><b>'.$vysledek["datum"].' - </b></td> 
              <td>'.$vysledek["text"].'</td>
              <td>ID: '.$vysledek["id"].'</td>
              <td> <form name="upravy" method="POST"> <input type="submit" value="Smazat" name="snd"> </td>
          </tr> </br>');
          
}


if($_POST["snd"]){


mysql_query("DELETE * FROM novinky WHERE ???) or die(mysql_error()); 
 
 
}



?>
</form>


Díky za radu.
Pan X
Profil
tak v proměnné $vysledek["id"] máš to id ne? Tak si zavolej
DELETE * FROM "table_name"
WHERE id = $vysledek["id"]
bodan
Profil *
Díky, to jsem zkoušel:

mysql_query('DELETE * FROM novinky WHERE id = $vysledek["id"]') or die(mysql_error());

Ale píše error:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '* FROM novinky WHERE id = $vysledek["id"]' at line 1
abc
Profil
bodan:
Prohoď uvozovky na:
mysql_query("DELETE * FROM novinky WHERE id = $vysledek['id']") or die(mysql_error());
A přečti si: Uvozovky
NouF
Profil
Jestli mohu poradit. Novinky nemažte. Lepší volba bude taková vytvořit nový sloupec např "smazano"

A zapisovat 0 nebo 1.
Když uživatel vstoupí na novinku kterou jste smazal jen udělat podminku a vypsat test novinky byla smazána + např vyhledavač jak se dostat jinam.
Bertram
Profil
bodan:
Ahoj, v cyklu vypisuješ novinky a ke každé jednotlivé novince přidáváš formulářové tlačítko pro smazání, ale s formulářem již neodesíláš identifikátor záznamu, který vlastně chceš mazat. Doplnil bych hidden input, který by byl identifikátorem záznamu pro delete a také ti tam chybí atribut action a ukončení </form>
bodan
Profil *
abc:
Nejde ani to:
Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING

NouF:
Díky za tip, později vyzkouším.

Bertram:
Ahoj, aha, ale pořád mi to nějak nejde.
Bertram
Profil
bodan:
Ahoj, aha, ale pořád mi to nějak nejde.
Tak ukaž upravený kód.
bodan
Profil *
Bertram:
To právě nejde, protože je chyba někde v těch závorkách. Jinak, proč action, když se to vše nastaví hnen na té samé stránce? Hidden input jsem moc nepochopil.
Bertram
Profil
bodan:
"DELETE FROM novinky WHERE id = $vysledek['id']"
Ale nebude se ti mazat záznam který chceš, dokud s formulářem nebudeš odesílat aktuální id z řádku, který právě procházíš.
<input type="hidden" name="id" value="$vysledek['id']">
Pokud to tam dopíšeš mazal by jsi ho takto:
$delId = intval($_POST['id']);
"DELETE FROM novinky WHERE id = $delId"
bodan
Profil *
Bertram:
Díky moc :) Ještě je chyba v tom inputu

syntax error, unexpected T_STRING.
Someone
Profil
bodan:
Napiš prosím stávající kód.
bodan
Profil *
$mysql=mysql_query("select datum,text,id from novinky order by id desc");
while ($vysledek=mysql_fetch_array($mysql)){
    echo('
          <tr>
              <td><b>'.$vysledek["datum"].' - </b></td> 
              <td>'.$vysledek["text"].'</td>
              <td>ID: '.$vysledek["id"].'</td>
              <td> <form name="upravy" method="POST"> <input type="hidden" name="id" value="$vysledek['id']">  </form> </td>
          </tr> </br>');
 
          
if($_POST["snd"])
{
$delId = intval($_POST['id']);

mysql_query("DELETE FROM novinky WHERE id = $delId") or die(mysql_error());
}          
}



?>
David Klouček
Profil
bodan:
    echo('
          <tr>
              <td><b>'.$vysledek["datum"].' - </b></td> 
              <td>'.$vysledek["text"].'</td>
              <td>ID: '.$vysledek["id"].'</td>
              <td> <form name="upravy" method="POST"> <input type="hidden" name="id" value="'.$vysledek['id'].'">  </form> </td>
          </tr> </br>');
bodan
Profil *
David Klouček:
Nepomohlo, ale asi by tam mělo by tam být to co psal Bertram, ale i tak pořádný stejný error.


David Klouček:
David Klouček příspěvek editoval ... díky, teď už to funguje, ale ani u jednoho nemám button.


Jsem blbec, zapomněl jsem na input se sumbit. Už to funguje, díííky moc všem.
Someone
Profil
Nezkoumal jsem ty kódy podrobně, ale já to třeba řeším pomocí metody GET
if (isset($_GET['odstranit'])) {
  mysql_query("DELETE FROM novinky WHERE novinky.id=".intval($_GET['odstranit']));
  Header("Location: index.php");
}
$mysql=mysql_query("select datum,text,id from novinky order by id desc");
while ($vysledek=mysql_fetch_array($mysql)){
    echo('
          <tr>
              <td><b>'.$vysledek["datum"].' - </b></td> 
              <td>'.$vysledek["text"].'</td>
              <td>ID: '.$vysledek["id"].'</td>
              <td><a href="?odstranit='.$vysledek['id'].'">Odstranit</a></td>
          </tr>');        
}
?>
edit: Tak možná příště :/
Bertram
Profil
bodan:
Protože jsi ho smazal.
echo"<form name='upravy' method='POST'>
       <input type='hidden' name='id' value='{$vysledek["id"]}'>
       <input type='submit' value='Smazat' name='snd'>
     </form>";
bodan
Profil *
Ještě mám jeden problém ohledně upravování novinek. Udělal jsem to pro jednoduchost na jinou stránku. Vypadá to,že vše funguje, ID si to zjistí asi dobře, ale už to neupraví.

while ($vysledek=mysql_fetch_array($mysql))
{
    echo('
          <tr>
              <td><textarea name="text" cols="40" rows="3">'.$vysledek["text"].'</textarea> </td> 
              <td> <form name="upravy" method="POST"> <input type="hidden" name="id" value="'.$vysledek['id'].'">  <input type="submit" value="Potvrdit" name="snd"> </form> </td>
          </tr> </br>');
 
          
if($_POST["snd"])
{
$delId = intval($_POST['id']);

$text2 = $vysledek2["text"];

mysql_query("UPDATE novinky SET text = $text2 WHERE id = $delId") or die(mysql_error());

}

}

Chyba:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE id = 10' at line 1


Aha, nevšiml jsem si té dvojky u vysledku. Stejně ten UPDATE ale nějak nefunguje, ten text v textaree to bere asi jako řádek v mysql.
Casero
Profil
bodan:
Aha, nevšiml jsem si té dvojky u vysledku. Stejně ten UPDATE ale nějak nefunguje, ten text v textaree to bere asi jako řádek v mysql.
Po odeslaní formuláře máš ten text v proměnné $_POST["text"].
Bertram
Profil
Ahoj, a také dej $text2 do apostrofů a název proměnné $delId se tu už nehodí.
bodan
Profil *
Ahoj, ale vždyť to je správně ne? Ten mysql příkaz nastaví do databáze to co je v text area. Teď jsem se do toho docela zamotal.
Bertram
Profil
Tak se vymotej :) a uvědom si, že vše co odešleš formulářem najdeš v poli $_POST pod indexem, který je totožný s atributem name příslušného prvku formuláře.
bodan
Profil *
Jasně, musim použít proměnnou POST, akorát mám zas nějaký problém s uvozovkama.


Tak závorky už jsem vyřešil, ale pořád to nějak nejde, píše stejnou chybu.

mysql_query("UPDATE novinky SET text = ".$_POST['text']." WHERE id = $delId") or die(mysql_error());
Han
Profil
čo skúsiť
Ahoj, a také dej $text2 do apostrofů
a použiť to takto:
mysql_query("UPDATE novinky SET text = '".$_POST['text']."' WHERE id = $delId") or die(mysql_error());
David Klouček
Profil
Chybu ti to může házet taky v případě, že text bude obsahovat apostrof - viz SQL injekce.
mysql_query("UPDATE novinky SET text = '".mysql_real_escape_string($_POST['text'])."' WHERE id = $delId") or die(mysql_error());
bodan
Profil *
Tak už to chybu neháže.. díky. Bohužel je to, ale jiný problém. V podstatě se text do databáze vůbec nezapíše, ale error žádný.


Teda abych byl přesný.. vůbec se ten řádek se sloupcem text neupraví.
David Klouček
Profil
bodan:
Tak si vypiš, co obsahuje $delId. Případně po SQL dotazu zavolej funkci mysql_affected_rows(), která vrací počet ovlivněnejch řádků.

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: