22. september 2006 - 23:29Der er
41 kommentarer og 1 løsning
UPDATE flere rækker i mysql
Så er jeg sgu på den igen. Jeg vil gerne opdatere flere rækker til mysql på éen gang, men kan ikke få det til at fungere. Har prøvet at bruge forskellige eksempler, men det fungerer ikke. Ved submit tømmer den istedet felterne i de respektive rækker.
Hvad gør jeg forkert i dette script?
<?php if(!isset($_POST['edituger'])) { $query = $db->query("SELECT * FROM nikksite_billedeuger WHERE bsted='".rawurldecode($ugested)."'"); while ($uge = mysql_fetch_array($query)){ extract($uge); // Val d'Isere 06/07 ugeliste if($uge['bsted'] == "valdisere0607") { eval("\$ugerne .= \"".template("nikk_admin_galleri_edituger_ugerne")."\";"); // Alpe d'Huez 04/05 ugeliste }elseif($uge['bsted'] == "alpedhuez0405") { eval("\$ugerne .= \"".template("nikk_admin_galleri_edituger_ugerne")."\";"); } eval("\$site_body = \"".template("nikk_admin_galleri_edituger")."\";"); } }else{ $query = $db->query("SELECT * FROM nikksite_billedeuger WHERE bsted='$ugested'"); while ($uge = mysql_fetch_array($query)){
Mød TrackMan og Veo på Computerworld Cloud & AI Festival og hør, hvordan tech ændrer måden, vi træner og udvikler talent – fra skolebold til The Masters.
nej har ikke prøvet at debugge - det aner jeg ikke hvordan man gør. har ikke før haft problemer med feltnavnene, men det kan da godt være at jeg skulle begynde på og indkapsle dem. :)
prøv at skrive denne linie: $db->query("UPDATE nikksite_billedeuger SET buge='$buge', bsorter='$bsorter', bsted='$bsted' WHERE bsted='$ugested'");
om til: $query = "UPDATE nikksite_billedeuger SET buge='$buge', bsorter='$bsorter', bsted='$bsted' WHERE bsted='$ugested'"; echo $query; $db->query($query);
virkede ikke ellebaek... mit script er ikke helt væk eller hvad? jeg er meget usikker på om det er den rigtige metode jeg i det hele taget bruger for at opdatere flere rækker på éen gang.
jeg har ikke defineret $id til at indeholde noget, men jeg har forstået det sådan at det er en files betegnelse for de felter/rækker der skal opdateres. min form skulle gerne sende dataene korrekt..
Hvis $id ikke indeholder noget, så er det jo klart der ingen data er, da du så bare har $_POST['buge'][]. $id skal indeholde et tal, afhængig af hvilken række i arrayet du vil have. Prøv at fjerne [$id] på de 3 linier.
ja... det er det der er problemet... du bliver nødt til at have en reference til $id med... eller kører du udelukkende på de 3 felter, for så kan du bare sige at formen med de første felter hedder 1 og så 2 og så 3...
og derefter så skal du ændre lidt i den anden kode...
skal du bruge SAMME tal, da oplysningerne hører sammen (og du dermed skal bruge samme indeks når du hiver dem ud af arrayet igen). Det er selvfølgelig lidt træls hvis man selv skal skrive tallene i hvert eneste input-element, så man bruger normalt [] (dvs. UDEN noget inde i de firkantede paranteser), fordi PHP selv sørger for at tildele det rigtige indeks.
Hvis du ikke har andre form-elementer med samme navn er det i øvrigt komplet overflødigt at bruge et array. I så fald udelader du [] i input/select-felternes names og henviser til dem uden [$id] i din kode.
ok.. jeg har flere form-elementer, ellers havde jeg bare brugt alm. update af felterne. men hvordan skal jeg sætte $id inden jeg tilgår dem? hvad skal jeg sætte $id som og på hvilken måde?
I din form skal du bruge []. Ikke [$id] eller noget andet, det bliver nemlig noget rod.
Når du så skal til at BRUGE de data der er sendt med formen, sætter du $id-variablen til værdien på det indeks du nu engang skal bruge. Hvad det så er den skal sættes til, afhænger af om du kun skal bruge en bestemt af dem, eller om du skal bruge dem alle - hvis det er det sidste, skal du lave et for-loop:
for($i=0;$i<3;$i++) { }
eller en foreach, hvis du ikke kan vide hvor mange elementer der er:
foreach (array_keys($newbuge) as $id) { //her skal du så bruge $newbsorter[$id], $newbuge[$id], etc. }
Ok, så har jeg arbejdet lidt med mit script. Det ser sådan her ud, men nu sker der ingenting. Er jeg på rette vej og i så fald, hvad gør jeg nu galt?
if(!isset($_POST['edituger'])) { $query = $db->query("SELECT * FROM nikksite_billedeuger WHERE bsted='".rawurldecode($ugested)."'"); while ($uge = mysql_fetch_array($query)){
// Indsættes i database til retning af indlæg $db->query("UPDATE nikksite_billedeuger SET buge='$xbuge', bsorter='$xbsorter', bsted='$xbsted' WHERE bsted='$ugested'");
$site_body = "<font class=txt><p align=center>Ugerne er opdateret!</p></font>"; }
efter pidgeots kommentar og lidt mere granskning af diverse tråde her på eksperten er jeg ret sikker på at det er 'foreach' jeg skal bruge, men jeg er ikke helt tip top på hvordan jeg skal bruge den.. er der evt. nogen, der ud fra ovenstående script, kan ændre det til foreach?
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.