muffe Skrevet 13. desember 2003 Del Skrevet 13. desember 2003 Holder på med et php script for å oppdatere medlemsinformasjon. JEg har allerede en stor database med masse gammel medlemsinfo, og denne skal oppdateres. Til dette bruker jeg spørringen "REPLACE", og den fungerer forsåvidt greit, medn med ett unntak: HEle databasen er 24 kolonner. Det er kun 9 av disse som skal oppdateres. De andre er irrelevant informasjon eller informasjon som ikke trenger oppdatering. Problemet er at når jeg oppdaterer de 9 kolonnene, slettes det som er i de andre. Hvordan forhindre dette? <html> <head> <title>Medlemsregistrering</title> </head> <body> <H1>Medlemsregistrering</H1> <p> Vennligst kontroller at all informasjon er korrekt. Hvis ikke, gjenta oppdateringen av informasjonen. </p> <?php $id = $_POST['ID']; $etternavn = $_POST['Etternavn']; $fornavn = $_POST['Fornavn']; $adresse = $_POST['Adresse']; $postnr = $_POST['Postnr']; $poststed = $_POST['Poststed']; $fodt = $_POST['Fodt']; $telefon = $_POST['Telefon']; $kjonn = $_POST['Kjonn']; /* Kopler til og velger database */ $link = mysql_connect("localhost", "root", "") or die("Kan ikke kople til : " . mysql_error()); print "Tilkopling vellykket"; mysql_select_db("gsfmedlemmer") or die("Finner ikke database"); /* Sender SQL spørring son oppdaterer informasjon */ $query_update = "REPLACE INTO medlemmer (id, Etternavn, Fornavn, Adresse, Postnr, Poststed, Født, Telefon, Kjønn) VALUES ('$id','$etternavn','$fornavn','$adresse','$postnr','$poststed','$fodt','$telefon','$kjonn')"; $result_update = mysql_query($query_update) or die("Spørring feilet : " . mysql_error()); /* Sender SQL spørring om oppdatert informasjon*/ $query_new = "SELECT Etternavn, Fornavn, Adresse, Postnr, Poststed, Født, Telefon, Kjønn, Kategori, Gruppe, Seilnr, Båttype, Båtnavn FROM medlemmer WHERE id = $id"; $result_new = mysql_query($query_new) or die("Spørring feilet : " . mysql_error()); /* Skriver resultat til HTML */ print "<table border>\n"; while ($line = mysql_fetch_array($result_new, MYSQL_ASSOC)) { print "\t<tr>\n"; foreach ($line as $col_value) { print "\t\t<td>$col_value</td>\n"; } print "\t</tr>\n"; } print "</table>\n"; /* Free resultset */ mysql_free_result($result_new); /* Lukker forbindelse */ mysql_close($link); ?> </body> </html> Lenke til kommentar
???????? Skrevet 13. desember 2003 Del Skrevet 13. desember 2003 Er det update funksjonen du er på jakt etter? UPDATE tabell SET felt = 'verdi', felt2 = 'verdi2' WHERE id = 'id' Lenke til kommentar
muffe Skrevet 13. desember 2003 Forfatter Del Skrevet 13. desember 2003 (endret) Noen spørsmål til: - Hvis ja, hvordan forhindre at innholdet i et felt blir slettet som følge av at et felt ikke er fylt ut? - Når jeg skriver den oppdaterte informasjonen ut til HTML, hvordan får jeg da overskrift på kolonnene i tabellen? Nå kommer det kun en tabell ut, uten overskrift. Tusen takk for hjelpen så langt. Endret 13. desember 2003 av muffe Lenke til kommentar
Ueland Skrevet 13. desember 2003 Del Skrevet 13. desember 2003 Replace kan jo gjøres enklere med å først hente ut dem du skal oppdatere og sette dette inn i en do while løkke.. Lenke til kommentar
muffe Skrevet 13. desember 2003 Forfatter Del Skrevet 13. desember 2003 Replace kan jo gjøres enklere med å først hente ut dem du skal oppdatere og sette dette inn i en do while løkke.. Er rimelig nybegynner innenfor php, kan du utdype deg litt? Lenke til kommentar
???????? Skrevet 13. desember 2003 Del Skrevet 13. desember 2003 (endret) Det enkleste du gjør for å passe på at felter som ikke skal oppdateres blir oppdatert er å skippe spesifisering av felter. Dette gjør dui ved å bruke UPDATE og SET. Du bruker altså ikke SET ved mindre det er en verdi som skal oppdateres. f.eks. $query = "UPDATE tabell SET " if(isset($id)){ $query .= "id = ''$id" '; } if(isset($etternavn)){ $query .= " etternavn = ''$etternavn" '; } gjør dette for alle feltene nedover. Det som er viktig er at du ikke glemmer , f.eks. på denne måten: $i = 0; $query = "UPDATE tabell SET " if(isset($id)){ if($i == 1){ $query .= ", "; } $query .= "id = ''$id" '; $i = 1; //settes inn alle steder som queryen utvides - derfor settes det inn et komme //før neste uppdateringsfelt settes } if(isset($etternavn)){ if($i == 1){ $query .= ", "; } $query .= " etternavn = ''$etternavn" '; $i = 1; } Glem ikke where! De feltene som ikke skal oppdateres blir derfor heller ikke endret siden det er ikke gitt noen verdi - og query'en får da beskjed om å gi disse feltene noen verdi! Hva mener du med overskrif (er det et felt fra databasen som skal utheves)? kan du gi et eksempel? Endret 13. desember 2003 av ???????? Lenke til kommentar
muffe Skrevet 14. desember 2003 Forfatter Del Skrevet 14. desember 2003 Overskrift: Når jeg kjører denne spørringen: * Sender SQL spørring om oppdatert informasjon*/ $query_new = "SELECT Etternavn, Fornavn, Adresse, Postnr, Poststed, Født, Telefon, Kjønn, Kategori, Gruppe, Seilnr, Båttype, Båtnavn FROM medlemmer WHERE id = $id"; $result_new = mysql_query($query_new) or die("Spørring feilet : " . mysql_error()); /* Skriver resultat til HTML */ print "<table border>\n"; while ($line = mysql_fetch_array($result_new, MYSQL_ASSOC)) { print "\t<tr>\n"; foreach ($line as $col_value) { print "\t\t<td>$col_value</td>\n"; } print "\t</tr>\n"; } print "</table>\n"; /* Free resultset */ mysql_free_result($result_new); for å vise gjeldene medlemsinfo på skjermen, så blir dataene som kommer ut vist i en tabell med kolonner bortover på skjermen. Hvordan lager jeg overskrift på de kolonnene som kommer ut? Lenke til kommentar
???????? Skrevet 14. desember 2003 Del Skrevet 14. desember 2003 Hva skal overskriften være? Lenke til kommentar
muffe Skrevet 14. desember 2003 Forfatter Del Skrevet 14. desember 2003 OVerskriftene skal være det samme som i tabellen. Vvs. at overskriften for den kolonnen som inneholder etternavn skal være "Etternavn" (det er den også i tabellen). Og hvis den aktuelle cellen er tom så skal det allike vel komme opp en overskrift, (Hvis fødselsdato mangler, så kommer overskriften "Født" opp, med en tom celle under). Håper du skjønner... Lenke til kommentar
Torbjørn Skrevet 14. desember 2003 Del Skrevet 14. desember 2003 prøv dette: echo "<table>\n<tr>"; $fields = mysql_list_fields($database, $table); $columns = mysql_num_fields($fields); for ($i = 0; $i < $columns; $i++) { echo "<th>" . mysql_field_name($fields, $i) . "</th>"; } echo "</tr>"; Lenke til kommentar
muffe Skrevet 15. desember 2003 Forfatter Del Skrevet 15. desember 2003 prøv dette: echo "<table>\n<tr>"; $fields = mysql_list_fields($database, $table); $columns = mysql_num_fields($fields); for ($i = 0; $i < $columns; $i++) { echo "<th>" . mysql_field_name($fields, $i) . "</th>"; } echo "</tr>"; Takk, det funker fint nå. Men er det mulig å luke ut enkelte overskrifter som jeg ikke ahr behov for? Har nemlig 24 kolonner med hver sin overskrift, men har kun bruk for 18 av de? De andre er betalingsopplysninger osv. som ikke skal vises. Lenke til kommentar
muffe Skrevet 15. desember 2003 Forfatter Del Skrevet 15. desember 2003 (endret) Det enkleste du gjør for å passe på at felter som ikke skal oppdateres blir oppdatert er å skippe spesifisering av felter. Dette gjør dui ved å bruke UPDATE og SET. Du bruker altså ikke SET ved mindre det er en verdi som skal oppdateres. f.eks. ................................... ................................... Har nå nesten fått det til,men det bare fungerer ikke. Jeg får heller ingen feilmelding. Noen som har noen ideer? Koden ser slik ut: $i = 0; $query = "UPDATE medlemmer SET " if(isset($etternavn)){ if($i == 1){ $query .= ", "; } $query .= " Etternavn = ''$etternavn" '; $i = 1; } if(isset($fornavn)){ if($i == 1){ $query .= ", "; } $query .= " Fornavn = ''$Fornavn" '; $i = 1; } if(isset($adresse)){ if($i == 1){ $query .= ", "; } $query .= " Adresse = ''$adresse" '; $i = 1; } if(isset($postnr)){ if($i == 1){ $query .= ", "; } $query .= " Postnr = ''$postnr" '; $i = 1; } if(isset($poststed)){ if($i == 1){ $query .= ", "; } $query .= " Poststed = ''$poststed" '; $i = 1; } if(isset($fodt)){ if($i == 1){ $query .= ", "; } $query .= " Født = ''$fodt" '; $i = 1; } if(isset($telefon)){ if($i == 1){ $query .= ", "; } $query .= " Telefon = ''$telefon" '; $i = 1; } if(isset($kjonn)){ if($i == 1){ $query .= ", "; } $query .= " Kjønn = ''$kjonn" '; $i = 1; } $query .= " WHERE id = '$id' AND Etternavn = '$etternavn' "; $result_update = mysql_query($query) or die("Spørring feilet : " . mysql_error()); Endret 15. desember 2003 av muffe Lenke til kommentar
???????? Skrevet 15. desember 2003 Del Skrevet 15. desember 2003 Hvis mysql avviser spørringen burde du få opp en feilmelding. Sett inn echo $query før du kjører spørringen. På den måten får du se spørringen og kan sjekke etter feil. Du kan poste spørringen her hvis du ikke finner feilen, så kanskje vi kan hjelpe deg! Hvis du kjører windows og kan bruke bin\mysql.exe filen kan du forsøke å kjøre spørringen der også (kopiere og lime inn) så får du garantert opp feilmeldingen! Lenke til kommentar
muffe Skrevet 20. desember 2003 Forfatter Del Skrevet 20. desember 2003 (endret) Har nå fixet koden litt: $query_update = "UPDATE medlemmer SET "; if ($etternavn!="") { $query_update .= "Etternavn='$etternavn', "; } if ($fornavn!="") { $query_update .= "Fornavn='$fornavn', "; } if ($adresse!="") { $query_update .= "Adresse='$adresse', "; } if ($postnr!="") { $query_update .= "Postnr='$postnr', "; } if ($poststed!="") { $query_update .= "Poststed='$poststed', "; } if ($fodt!="") { $query_update .= "Født='$fodt', "; } if ($telefon1="") { $query_update .= "Telefon='$telefon', "; } $query_update .= "WHERE id='$id'"; echo("$query_update <br>"); $result_update = mysql_query($query_update) or die("Spørring feilet : " . mysql_error()); Og nå gåt det greit å lage queryen. Men får et MySQL syntax problem: Spørring feilet : 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='1'' at line 1 Her er queryen: UPDATE medlemmer SET Adresse='Støle', Postnr='4885', WHERE id='1' NOen idé? Endret 20. desember 2003 av muffe Lenke til kommentar
???????? Skrevet 20. desember 2003 Del Skrevet 20. desember 2003 Her er queryen: UPDATE medlemmer SET Adresse='Støle', Postnr='4885', WHERE id='1' NOen idé? Du kan ikke avslutte med komma , Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå