Jump to content
php.lv forumi

Nesanāk izdzēst rindu no datubāzes


kkkaaa

Recommended Posts

Ir DB (my_db) un viena tabula (gramata) ar vairakiem kolonu nosaukumiem - IDnumurs, Autors Nosaukums...

Izdevās uztaisīt ierakstu pievienosanu un visu ievadīto datu parādīšanu tabulā, kā arī katras rindas galā 'Dzēst' pogu, bet dzēšana kaut kā negrib darboties.

Varbūt kāds var pateik kas šajā kodā ir nepareizs:

 

while($row = mysql_fetch_array($result)) {

echo "<tr><td>" . $row['IDnumurs'] . "</td>";

echo "<td>" . $row['Autors'] . "</td>";

echo "<td>" . $row['Nosaukums'] . "</td>";

echo "<td><input name='delete' type='submit' value='Dzest' />

</td>";

}

echo "</tr></table>";

 

if (isset($_POST['delete'])){

$delsql = "DELETE FROM gramata WHERE IDnumurs='"$row['IDnumurs']'";

mysql_query($delsql);

}

Link to comment
Share on other sites

$delsql = "DELETE FROM gramata WHERE IDnumurs='".$row['IDnumurs'].'";

 

Vajag kļūdas paziņojumus ieslēgt uz dev servera.

 

Upd. A Tev tak tur galīgi līki... Doma apmēram tāda:

 

while($row = mysql_fetch_array($result)) {

echo "<tr><td>" . $row['IDnumurs'] . "</td>";

echo "<td>" . $row['Autors'] . "</td>";

echo "<td>" . $row['Nosaukums'] . "</td>";

echo '<input type="hidden" name="delID" value="'.$row['IDnumurs'].'" />';

echo "<td><input name='delete' type='submit' value='Dzest' />

</td>";

}

echo "</tr></table>";

 

if (isset($_POST['delete'])){

$delsql = "DELETE FROM gramata WHERE IDnumurs='"$_POST['delID']'";

mysql_query($delsql);

}

 

P.S. Tas protams darbojas tikai gadījumā, ja izvadi vienu ierakstu tajā formā. Ja vairākus, tad jādarbojas ar masīvu, tam delID jānomaina name uz delID[] + jāpārveido par checkboxi.

Edited by Kristabs
Link to comment
Share on other sites

Mēģināju tā izdarīt vismaz ar to vienu rindu, bet atkal nekā. Vienu (pirmo) rindu izvadīju tā - pieliku beigās break; - šādi (mēģināju n-tos variantus arī ar while, bet savādāk nevarēju izdomāt):

 

while($row = mysql_fetch_array($result)) {

echo "<tr><td>" . $row['IDnumurs'] . "</td>";

echo "<td>" . $row['Autors'] . "</td>";

echo "<td>" . $row['Nosaukums'] . "</td>";

echo '<input type="hidden" name="delID" value="'.$row['IDnumurs'].'" />';

echo "<td><input name='delete' type='submit' value='Dzest' /></td>";

break;

 

 

Kā ar to masīvu? kaut kā šādi?:

 

echo '<input type="hidden" name="delID[]" value="'.$row['IDnumurs'].'" />';

echo "<td><input name='delete' type='checkbox' value='Dzest' /></td>";

 

Piedodiet par, varbūt, muļķīgajiem jautājumiem, bet php un mysql jomā esmu galīgais iesācējs - mēģinu kaut ko izprast. Lūdzu palīdziet, ja varat!

Link to comment
Share on other sites

...
echo "<form action=\"\" method=\"post\">";
echo "<input type=\"hidden\" name=\"action\" value=\"delete\" />";
while($row=mysql_fetch_object($res))
{
 echo ...
 echo "<input type=\"checkbox\" name=\"del[]\" value=\"".$row->IDnumurs."\" />";
}
echo "<input type=\"submit\" value=\"Dzēst\" />";
echo "</form>";

if(isset($_POST['action']) && $_POST['action']=="delete")
{
 $id=implode(",",$_POST['del']);
 if($id){
$delsql="DELETE FROM `gramatas` WHERE id IN (".$id.")";
mysql_query($delsql);
}
}

Link to comment
Share on other sites

>> marcis

es skatos, ka tu izmanto mysql_fetch_object, ar ko tas atšķiras no mysql_fetch_array? saprotu to, ka viens objekts un otrs masīvs, bet kādos gadījumos vajadzētu lietot vienu un kādos otru?

Edited by ray
Link to comment
Share on other sites

>>>marcis

 

Paldies, par kodu - sāku apjēgt kaut ko vairāk, bet viss īsti tāpat vēl nesanāk.

Kad rakstu šādi:

while($row=mysql_fetch_object($res))

 

tad izmet kļūdas paziņojumu:

Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /opt/lampp/htdocs/...

 

Un kā ir ar to mainīgo $res vai tas ir tas pats kas $result?

$result = mysql_query("SELECT * FROM gramatas");

 

Ja raksta:

while($row=mysql_fetch_object($result))

tad izmet šādu paziņojumu: Cannot use object of type stdClass as array in /opt/lampp/htdocs/...

Edited by kkkaaa
Link to comment
Share on other sites

Ja, $res tavā gadījumā ir $result

 

Šķiet, ka tu no objekta esi centies izvilkt masīvu?

Tu gadījumā nemēģināji darīt šādi: $row['kolona']? Objekta gadijumā tas jādara šādi: $row->kolona. Bet ja tu izmanto manu kodu tad visam vajadzētu būt kārtībā

 

OFF: objektu izmantoju tikai savas patikas dēļ, nepatīk rakstīt tos [] '', man šķiet vienkāršāk ->

Link to comment
Share on other sites

Jā, darīju laikam nepareizi.. tagad pārrakstīju visas kolonnas uz objektiem ar "->" šādi:

 

echo "<form action=\"\" method=\"post\">";
echo "<input type=\"hidden\" name=\"action\" value=\"delete\" />";

while($row=mysql_fetch_object($result))
 {
echo "<tr>";
echo "<td>" . $row->IDnumurs. "</td>";
echo "<td>" . $row->Nosaukums . "</td>";
echo "<td>" . $row->Autors . "</td>";
...
echo "<td><input type=\"checkbox\" name=\"del[]\" value=\"".$row->IDnumurs."\" /></td>";
}
echo "<td><input type=\"submit\" value=\"Dzest\" /></td>";
echo "</tr></table></form>";

if(isset($_POST['action']) && $_POST['action']=="delete")
{
 $id=implode(",",$_POST['del']);
 if($id){
   $delsql="DELETE FROM `gramatas` WHERE id IN (".$id.")";
   mysql_query($delsql);
  echo "aaa";                                //teksts aaa parādās, tātad ši daļa izpildās
}
}

 

tagad kļūdas paziņojumus neizmet, bet tāpat nedzēš... ko vēl varētu darīt?

Esmu izmēģinājis ļoti daudz dažādu variantu un mainīju dažas nianses kodā, bet nekas man nesanāk!

 

Vai nevarētu būt kāda vaina ar šo rindu: $delsql="DELETE FROM `gramatas` WHERE id IN (".$id.")";

Jo, kad neatķeksē un nospiež tikai 'Dzest', tad izmet paziņojumu par implode() [function.implode]: Bad arguments. Tātad nolasās līdz $id=implode(",",$_POST['del']); un izpildās arī "if($id)" daļa.

Edited by kkkaaa
Link to comment
Share on other sites

Beidzot izdevās!:)

 

Paldies!!!

 

Viss kods bija ļoti labs, tikai pamainīju to vienu rindiņu. uzrakstīju tā:

 

$delsql="DELETE FROM gramatas WHERE IDnumurs=".$id."";

 

Dzēš visas rindas, kas ir ar cipariem; nedzēš tās, kurās IDnumura laukā ir ievadīti burti. Kāpēc tā?

Link to comment
Share on other sites

Dzēš visas rindas, kas ir ar cipariem; nedzēš tās, kurās IDnumura laukā ir ievadīti burti. Kāpēc tā?

Hmm, jociigi liekas tas ka ID ir ne tikai skaitlis.

Parasti jau taa netaisa pasha eertiibai. Ieraksta id jau ir unikaals numurs katram ierakstam, ar to arii straadaa.

Ja lauku ID ierakstam nosaka ka auto increment, tas ir ieraksta identifikators (kuru gan nedriikst mainiit veelaak, pat ja dzeesh kaadus ierakstus un veidojas starpas). Tad formaa padod to ID kas ir ierakstam konkreetajam un peec taa lai arii dzeesh.

DELETE FROM `gramatas` WHERE id='$delid' LIMIT 1;

Es gan pats ar MySQL tikai nesen esmu saacis straadaat, varbuut ir kas nedaudz greizi man arii:)

Edited by mounkuls
Link to comment
Share on other sites

$delsql="DELETE FROM gramatas WHERE IDnumurs=".$id."";

Ne, vecit, šis variants neder, līdz ko tu atķeksesi vairakus tev uz datubazi tiks nosutits šāds kverijs:

DELETE FROM gramatas WHERE IDnumurs=1,2,3,..

un diezvai tev datubāzē būs tāds id (1,2,3,...)

 

Mana variants kļūda bija tā, ka uzrakstiju id nevis IDnumurs, pareizi būtu šādi

$delsql="DELETE FROM gramatas WHERE IDnumurs IN (".$id.")";

Link to comment
Share on other sites

×
×
  • Create New...