Gå til innhold

MySQL spørring: REPLACE


Anbefalte innlegg

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
Videoannonse
Annonse

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 av muffe
Lenke til kommentar

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 av ????????
Lenke til kommentar

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

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
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
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 av muffe
Lenke til kommentar

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

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 av muffe
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...