kkkaaa Posted December 25, 2007 Report Share Posted December 25, 2007 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 More sharing options...
Kristabs Posted December 25, 2007 Report Share Posted December 25, 2007 (edited) $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 December 25, 2007 by Kristabs Link to comment Share on other sites More sharing options...
kkkaaa Posted December 26, 2007 Author Report Share Posted December 26, 2007 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 More sharing options...
marcis Posted December 26, 2007 Report Share Posted December 26, 2007 ... 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 More sharing options...
ray Posted December 27, 2007 Report Share Posted December 27, 2007 (edited) >> 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 December 27, 2007 by ray Link to comment Share on other sites More sharing options...
andrisp Posted December 27, 2007 Report Share Posted December 27, 2007 ray, man liekas, ka vienīgā atšķirība ir tikai tāda kā tev pašam patīk labāg strādāt. Ar masīvu vai ar objekta propertijiem. Link to comment Share on other sites More sharing options...
xPtv45z Posted December 27, 2007 Report Share Posted December 27, 2007 (edited) http://lv.php.net/manual/en/function.mysql-fetch-object.php vēl saka, ka: Note: Performance Speed-wise, the function is identical to mysql_fetch_array(), and almost as quick as mysql_fetch_row() (the difference is insignificant). Edited December 27, 2007 by xPtv45z Link to comment Share on other sites More sharing options...
kkkaaa Posted December 27, 2007 Author Report Share Posted December 27, 2007 (edited) >>>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 December 27, 2007 by kkkaaa Link to comment Share on other sites More sharing options...
marcis Posted December 27, 2007 Report Share Posted December 27, 2007 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 More sharing options...
kkkaaa Posted December 27, 2007 Author Report Share Posted December 27, 2007 (edited) 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 December 27, 2007 by kkkaaa Link to comment Share on other sites More sharing options...
kkkaaa Posted December 27, 2007 Author Report Share Posted December 27, 2007 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 More sharing options...
mounkuls Posted December 27, 2007 Report Share Posted December 27, 2007 (edited) 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 December 27, 2007 by mounkuls Link to comment Share on other sites More sharing options...
marcis Posted December 28, 2007 Report Share Posted December 28, 2007 $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 More sharing options...
kkkaaa Posted December 28, 2007 Author Report Share Posted December 28, 2007 >>marcis Taks, nu un es visu laiku nevarēju saprast kāpēc nedzēš vairākas rindiņas... Paldies, ka devi apgaismību un sapratni!:) tagad zināšu ar ko atšķiras IN ( ) no vienkāršas piešķiršanas. Link to comment Share on other sites More sharing options...
Gints Plivna Posted December 30, 2007 Report Share Posted December 30, 2007 >>marcisTaks, nu un es visu laiku nevarēju saprast kāpēc nedzēš vairākas rindiņas... Paldies, ka devi apgaismību un sapratni!:) tagad zināšu ar ko atšķiras IN ( ) no vienkāršas piešķiršanas. Nu vispār jau tā ir salīdzināšana nevis piešķiršana ;) Link to comment Share on other sites More sharing options...
Recommended Posts