14. november 2010 - 18:43Der er
24 kommentarer og 1 løsning
Problem med while og update i IF-statement
Kære brugere af Eksperten
Nu har jeg nørklet med neddennævnte kode i de sidste 4 timer og kan bare ikke få det til at fungere korrekt.
Jeg har en tabel med Email, Navn, tid og afhængig af variablen $status skal der i de tilfælde, hvor denne er forskellig fra "noget bestemt tekst" foretage en update af tabellen, i form af feltet "tid".
Dér hvor jeg ikke kan få koden til at fungere korrekt, er selve opdateringen idet mit IF-statement ikke udfører en update af samtlige de data, hvor det ellers skulle ske.
Kan nogle give mig en idé om hvad jeg skal ændre?
<? $Db = mysql_connect("xxxx.net", "YYYY", "PASS"); mysql_select_db("BBBB", $Db); $result = mysql_query("SELECT * FROM mintabel)",$Db); while ($myrow = mysql_fetch_array($result)) {
echo "<b>".$myrow["Navn"]."</b><br>"; $Navn = $myrow["Navn"]; $status = "noget bestemt tekst"; if ($status != "noget bestemt tekst") { mysql_query("UPDATE mintabel SET tid=now() WHERE Navn='$Navn'"); mysql_close($Db); echo 'DB er opdateret '; } mysql_close($Db); } ?>
Saadan som du har skrevet koden vil der aldrig vaere noget at update. I din while loekke siger du for hver raekke at $status = 'noget bestemt tekst' og at der skal updates hvis $status er forskellig fra 'noget bestemt tekst'.
Er status en kolonne i tabellen saaledes at du for eksempel har foelgende raekker:
Email Navn tid status 'a@bc.de' 'navn1' 2010-12-02 'status1' 'f@gh.ij' 'navn2' '2010-12-03 'noget bestemt tekst'
og det er i den sidste linie du skal have tiden updated?
I saafald vil jeg foreslaa at du erklaerer $status udenfor loekken og saa i loekken sammenligne med $myrow['status']. For eksempel saaledes:
$status = 'noget bestemt tekst'; while ($myrow = mysql_fetch_array($result)) { $Navn = $myrow['Navn']; echo "$Navn <br/>"; if($myrow['status'] != $status) { $updated = mysql_query("UPDATE mintabel SET tid=now() WHERE Navn = '$Navn'); echo "DB er opdateret <br/>"; } mysql_close($Db);
I min kode gaar jeg ud fra at der bestaar adskillige raekker i tabellen hvor du skal have udskrift for hver raekke paa en ny linie, derfor <br/>.
erikjacobsen, det var det jeg spurgte SPOERGSMAALSSTILLEREN om. Som vi er enige om, koden som den nu er skrevet giver ingen mening, men jeg er temmelig sikker paa at der er en mening bagved, og for at hjaelpe proever jeg at finde ud af hvad den mening er.
Du skal så notere dig om det du får tilbage med file_get_contents er eksakt det du sammenligner på, eller om der er linieskift, eller andre sager, der gør, at de to tekster ikke er ens.
Ellers kan du sammenligne med en delstreng af det du får tilbage.
r4wh1d3, det er maaske mig der er tungnem. Forklar lidt mere.
(1) Tabellen 'mintabel' har mange raekker. I nogle af raekkerne skal tiden opdateres, i andre raekker ikke. Korrekt?
(2) I din loekke skal det for hver raekke besluttes om raekken skal opdateres eller ej. Det goer du ved at du har en 'ekstern' vaerdi af $status der kommer 'andetsteds fra' og denne vaerdi sammenligner du med en status vaerdi der paa en eller anden maade hoerer til raekken. Er det ogsaa korrekt?
Det jeg ikke forstaar er hvor denne anden statusvaerdi kommer fra? Hvad er det du sammenligner med hvad for at beslutte om raekken skal opdateres eller ej?
Som sådan er det i denne sammenhæng underordnet, hvorfra jeg henter onlinestatus,- det kunne for den sags skyld være fra et alternativ til et messenger-system eller diskussionsforum etc.
Mit problem er isoleret betragtet, at den løkke jeg har ikke fungerer, da den ikke fanger de elementer, der er genstand for opdatering af 'tid'.
P.S. Det skal i øvrigt bemærkes, at jeg lige nu har konstateret, at den første række i tabellen rent faktisk bliver opdateret, når betingelsen er opfyldt, men resterende rækker forbliver uændrede, selvom nogle af disse også skulle have været opdateret.
Hmm. Troede måske at Erik gerne ville have point, men kan selvfølgelig godt se ud af 'signaturen', at der ikke 'samles' på disse.
Jeg lukker tråden i morgen, hvis jeg ikke hører andet.
P.S. Mit script spiller som en drøm i den sammenhæng det skulle anvendes, så endnu engang tak og jeg kan fortsat ikke komme mig over min mysql_close($Db). Skoven og træerne, tror jeg ;)
r4wh1d3, nu soerger du vel for at faa lukket spoergsmaalet? Ellers bliver det siddende som et grimt evigheds-aabent spoergsmaal paa min (og andres) lister af indlaeg. Det medlem du gerne ville have gievet points oensker dem ikke. Saa maa du selv oprette et svar og acceptere det.
Næ, Erik samler forståeligt nok ikke på dem, så hermed lukkes spørgsmålet.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.