Gå til innhold

Slette/endre funksjon i kundedatabase(PHP, MySQL)


Anbefalte innlegg

Videoannonse
Annonse

Det er egentlig ganske enkelt så fort du forstår hva du skal.

 

insert for eksempel:

 

du har en form som ser slik ut

 

$form = '

<form action=" . $_SERVER['PHP_SELF'] . " method="post">

<input type="text" name="username" /><br/>

<input type="password" name="password" /><br/>

<input type="submit" name="submit_adduser" />

<form/>

';

 

elns

 

her må du legge til en input for hver kolonne i tabellen bortsett fra id kolonnen dersom du har auto_increment på den. du kan ha type="text" på alle.

 

i insert querien legger du til

 

kolonne = $_POST['navn_på_form_felt']

 

skal du ha flere separerer du med "," (komma) som:

 

kolonne = $_POST['navn_på_form_felt'], kolonne2 = $_POST['navn_på_neste_form_felt']

 

INSERT INTO tabellenmin SET [her legges data til];

 

endre formen og update querien er omtrendt det samme.

 

bortsett fra at du må hente verdier og skrive de ut i formen.

 

så i select spørringen før endre formen må du legge til alle kolonnene du skal endre.

 

'SELECT [kolonne, kolonne2, osv] WHERE id = ' . (int)$_POST['id'] . ';'

 

legg så til alle input med ... value="' . $row[x] . ' .... hvor x er det relative nummeret på kolonnen (første kolonne er 0, andre er 1 osv.)

 

i update spørringen gjør du samme som beskrevet for insert. husk også å sikre mot SQL-injections. dvs. bruk (int) foran $_POST['ettellerannet'] når du forventer heltall.

 

forventer du tekst skriver du quote_smart( $_POST['ettellerannet'] )

 

validering gjøres ganske enkelt slik:

 

if ( !isset( $_POST['navn_fra_input_i_form'] ) die( 'Noe mangler' );

Lenke til kommentar

Okay.. :) Nå har jeg omskrevet en god del, og mangler kun å hente inn alle dataene i tabellen enkelte steder. Bruke variabler, slik at det er enkelt for meg å foreta endringer om jeg skal bruke en annen tabellstruktur og navn.

 

 

Men dessverre fungerer det jo ikke(noe som sikkert ikke er så rart, da dette er mitt første oppdrag med å leke og omskrive PHP)

 

Får feilmedlingen:

Column count doesn't match value count at row 1

 

 

Her er koden, og hadde vært herlig om du kunne ha sett litt på den og passe på at jeg ikke går helt feil vei! :)

 

Klikk for å se/fjerne innholdet nedenfor
<html><body>
<style type="text/javascript">tr:hover,td:hover {background:#FF00FF} </style>
<?php


// quote_smart()
// en variant av en escape funksjon funnet her på forumet
// hindrer sql injection

function quote_smart($msg) {
 if ( !is_numeric($msg) ) {
// hvis $msg ikke er et nummer:

if ( get_magic_quotes_gpc() ) {
  // hvis magic quotes er aktivert (gjør så php legger til slashes automatisk på input)

  $msg = stripslashes( $msg ); // fjern slashes (ellers vil mysql_real_escape_string() dobbelslashe)
}

// legg til quote tegn og escape med mysql_real_escape_string()	
$msg = "'" . mysql_real_escape_string( $msg ) . "'";

 }

 // returner $msg uansett om det er nummer eller escapa tekst
 return $msg;

}

// databasetilkobling

mysql_connect( 'localhost', 'bruker', 'passord' ) or die( mysql_error() );
mysql_select_db( 'database' ) or die( mysql_error() );

// Setter variabler

$table = "kunder";

$kundenr = "kundenr";
$fornavn = "fornavn";
$etternavn = "etternavn";
$postnr = "postnr";
$tlf = "tlf";
$mail = "mail";
$signatur = "signatur";
$betalt = "betalt";

// dersom post[submit_user] er satt (noen har lagt til en bruker), valider og skriv til database
// (settes av form submit):

if ( isset( $_POST['submit_user'] ) && !empty( $_POST['submit_user'] ) ) {

 // isset hindrer at du får en notice error dersom indexen ikke er satt
 // også sjekker jeg at den ikke er tom (vane, viktigere å gjøre med get variabler)

 // nå forventer vi brukernavn og passord

 if ( !isset( $_POST[$fornavn] ) || empty( $_POST[$fornavn] ) ) die( 'Fornavn ikke skrevet inn!' );
 if ( !isset( $_POST[$etternavn] ) || empty( $_POST[$etternavn] ) ) die( 'Etternavn ikke skrevet inn!' );
 if ( !isset( $_POST[$postnr] ) || empty( $_POST[$postnr] ) ) die( 'Postnr ikke skrevet inn!' );
 if ( !isset( $_POST[$tlf] ) || empty( $_POST[$tlf] ) ) die( 'Tlf ikke skrevet inn!' );


 // både passord og brukernavn er skrevet inn. nå kan vi legge inn i databasen
 mysql_query( 'INSERT INTO ' . $table . ' VALUES(null, ' . quote_smart( $_POST[$fornavn] ) . ', ' . quote_smart( $_POST[$etternavn] ) . ');' ) or die( mysql_error() );
 echo 'Bruker '.$_POST[$etternavn].' er lagt inn!';
}

// dersom post[submit_change_user] er satt (noen har lagret en endring)

if ( isset( $_POST['submit_change_user'] ) && !empty( $_POST['submit_change_user'] ) ) {


 // nå forventer vi id, brukernavn og passord.

 if ( !isset( $_POST[$kundenr] ) || empty( $_POST[$kundenr] ) ) die( 'Kundenr er ikke satt!' );
 if ( !isset( $_POST[$fornavn] ) || empty( $_POST[$fornavn] ) ) die( 'Fornavn ikke skrevet inn!' );
 if ( !isset( $_POST[$etternavn] ) || empty( $_POST[$etternavn] ) ) die( 'Etternavn ikke skrevet inn!' );
 if ( !isset( $_POST[$postnr] ) || empty( $_POST[$postnr] ) ) die( 'Postnr ikke skrevet inn!' );
 if ( !isset( $_POST[$tlf] ) || empty( $_POST[$tlf] ) ) die( 'Tlf ikke skrevet inn!' );


 // all forventet data er skrevet inn. utføre endringer i tabell

 mysql_query( 'UPDATE ' . $table . ' SET ' . $fornavn . ' = ' . quote_smart( $_POST[$fornavn] ) . ', ' . $etternavn . ' = ' . quote_smart( $_POST[$etternavn] ) . ' WHERE ' . $kundenr . ' = ' . (int)$_POST[$kundenr] . ';' ) or die( mysql_error() );

}


// dersom post[submit_delete_user] er satt (noen sletter en bruker)

if ( isset( $_POST['submit_delete_user'] ) && !empty( $_POST['submit_delete_user'] ) ) {

 // forventer id
 if ( !isset( $_POST[$kundenr] ) || empty( $_POST[$kundenr] ) ) die( 'Kundenr er ikke satt!' );

 // slett bruker
 mysql_query( 'DELETE FROM ' . $table . ' WHERE ' . $kundenr . ' = ' . (int)$_POST[$kundenr] . ';' ) or die( mysql_error() );

}


// dersom noen ønsker å legge til data.
// strcmp() returnere 0 dersom strengene er like. derfor bruker jeg !strcmp() som betyr (not)strcmp(). altså true dersom strengene er like.

if ( isset( $_GET['action'] ) && !strcmp( $_GET['action'], 'adduser' ) ) {

 // syntaksen "echo <<< STRING" eller "$var = <<< STRING" betyr at alt som står mellom dette og STRING; blir sendt som output via echo eller lagt til variabelen $var. inkluderer linjeskift.

 echo '
<form action="' . $_SERVER['PHP_SELF'] . '" method="post">
 Fornavn: <input type="text" name=' . $fornavn . ' /><br />
 Etternavn: <input type="text" name=' . $etternavn . ' /><br />
 Postnr: <input type="text" name=' . $postnr . ' /><br />
 Tlf: <input type="text" name=' . $tlf . ' /><br />
 <input type="submit" name="submit_user" value="Legg til bruker" />
</form>
';

}


// dersom noen vil endre data

if ( isset( $_GET['action'] ) && !strcmp( $_GET['action'], 'changeuser' ) ) {

 // sjekk om id er satt

 if ( !isset( $_GET[$kundenr] ) || empty( $_GET[$kundenr] ) ) die( 'Kundenr er ikke satt!' );

 // hent data fra tabell
 // (int)$var vil "kaste" $var til en integer. selv om var er en string blir det en integer. hindrer sql injection. kan kun brukes om du forventer heltall.

 $res = mysql_query( 'SELECT ' . $fornavn . ', ' . $fornavn . ' FROM ' . $table . ' WHERE ' . $kundenr . ' = ' . (int)$_GET[$kundenr] . ';' ) or die( mysql_error() );
 $row = mysql_fetch_row( $res );

 // $row er nå en array med dataene fra querien ($row[0] = brukernavn, $row[1] = passord)

 echo '
<form action="' . $_SERVER['PHP_SELF'] . '" method="post">
 <input type="hidden" name=' . $kundenr . ' value="' . (int)$_GET[$kundenr] . '" />
 Fornavn: <input type="text" name=' . $fornavn . ' value="' . $row[0] . '" /><br />
 Etternavn: <input type="text" name=' . $etternavn . ' value="' . $row[1] . '" /><br />
 Postnr: <input type="text" name=' . $postnr . ' value="' . $row[3] . '" /><br />
 Tlf: <input type="text" name=' . $tlf . ' value="' . $row[4] . '" /><br />
 <input type="submit" name="submit_change_user" value="Lagre endring" />
 <input type="submit" name="submit_delete_user" value="Slett bruker" />
</form>
';

}


// skriv ut data og linker
// hent beskrivelse av tabell

$res = mysql_query( 'DESCRIBE ' . $table . ';' ) or die( mysql_error() );
while ( $row = mysql_fetch_assoc( $res ) ) {
 $desc[] = $row['Field']; // Field er feltnavn i beskrivelsen av tabell
}

// nå er $desc et array med alle felt navnene i tabellen


// hent data fra tabell

$res = mysql_query( 'SELECT * FROM ' . $table . ';' ) or die( mysql_error() );
while ( $row = mysql_fetch_row( $res ) ) {
 $data[] = $row;
}

// nå er $data et array med alle radene og alle feltene i tabellen


// presentere data

if ( isset( $data ) && isset( $desc ) ) {

echo '<table><tr>';
foreach ( $desc as $field ) {
  echo '<th>' . $field . '</th>';
}
echo '</tr>';

foreach ( $data as $row ) {
  echo '<tr onclick="location.href = \'' . $_SERVER['PHP_SELF'] . '?action=changeuser&id=' . $row[0] . '\';">';
  foreach ( $row as $field ) {
	echo '<td>' . $field . '</td>';
  }
  echo '</tr>';
}

echo '</table>';

}

echo '<a href="' . $_SERVER['PHP_SELF'] . '?action=adduser">Legg til kunde</a>';

?>
</body></html>

 

Uansett, takk for all hjelpen! Herlig å se at det går riktig vei! :)

Endret av AnaXyd
Lenke til kommentar

la til noen kommentarer. har ikke fikset feilen. du får gjøre et forsøk selv. (tips: når det ikke kommer noen linjenummer/php-error er det feil i en mysql spørring)

 

 

<html><body>
<style type="text/javascript">tr:hover,td:hover {background:#FF00FF} </style>
<?php


// quote_smart()
// en variant av en escape funksjon funnet her på forumet
// hindrer sql injection

function quote_smart($msg) {
 if ( !is_numeric($msg) ) {
// hvis $msg ikke er et nummer:
if ( get_magic_quotes_gpc() ) {
  // hvis magic quotes er aktivert (gjør så php legger til slashes automatisk på input)

  $msg = stripslashes( $msg ); // fjern slashes (ellers vil mysql_real_escape_string() dobbelslashe)
}

// legg til quote tegn og escape med mysql_real_escape_string()	
$msg = "'" . mysql_real_escape_string( $msg ) . "'";

 }

 // returner $msg uansett om det er nummer eller escapa tekst
 return $msg;

}

// databasetilkobling

mysql_connect( 'localhost', 'root', '*******' ) or die( mysql_error() );
mysql_select_db( 'test' ) or die( mysql_error() );

// Setter variabler

$table = "kunder";

$kundenr = "kundenr";
$fornavn = "fornavn";
$etternavn = "etternavn";
$postnr = "postnr";
$tlf = "tlf";
$mail = "mail";
$signatur = "signatur";
$betalt = "betalt";

// dersom post[submit_user] er satt (noen har lagt til en bruker), valider og skriv til database
// (settes av form submit):

if ( isset( $_POST['submit_user'] ) && !empty( $_POST['submit_user'] ) ) {

 // isset hindrer at du får en notice error dersom indexen ikke er satt
 // også sjekker jeg at den ikke er tom (vane, viktigere å gjøre med get variabler)

 // nå forventer vi brukernavn og passord

 if ( !isset( $_POST[$fornavn] ) || empty( $_POST[$fornavn] ) ) die( 'Fornavn ikke skrevet inn!' );
 if ( !isset( $_POST[$etternavn] ) || empty( $_POST[$etternavn] ) ) die( 'Etternavn ikke skrevet inn!' );
 if ( !isset( $_POST[$postnr] ) || empty( $_POST[$postnr] ) ) die( 'Postnr ikke skrevet inn!' );
 if ( !isset( $_POST[$tlf] ) || empty( $_POST[$tlf] ) ) die( 'Tlf ikke skrevet inn!' );


 // både passord og brukernavn er skrevet inn. nå kan vi legge inn i databasen

 //-------------------- her må du endre insert querien så den dekker alle radene du har i tabellen. denne genererer feil --------------------------

 mysql_query( 'INSERT INTO ' . $table . ' VALUES(null, ' . quote_smart( $_POST[$fornavn] ) . ', ' . quote_smart( $_POST[$etternavn] ) . ');' ) or die( mysql_error() );
 echo 'Bruker '.$_POST[$etternavn].' er lagt inn!';
}

// dersom post[submit_change_user] er satt (noen har lagret en endring)

if ( isset( $_POST['submit_change_user'] ) && !empty( $_POST['submit_change_user'] ) ) {


 // nå forventer vi id, brukernavn og passord.

 if ( !isset( $_POST[$kundenr] ) || empty( $_POST[$kundenr] ) ) die( 'Kundenr er ikke satt!' );
 if ( !isset( $_POST[$fornavn] ) || empty( $_POST[$fornavn] ) ) die( 'Fornavn ikke skrevet inn!' );
 if ( !isset( $_POST[$etternavn] ) || empty( $_POST[$etternavn] ) ) die( 'Etternavn ikke skrevet inn!' );
 if ( !isset( $_POST[$postnr] ) || empty( $_POST[$postnr] ) ) die( 'Postnr ikke skrevet inn!' );
 if ( !isset( $_POST[$tlf] ) || empty( $_POST[$tlf] ) ) die( 'Tlf ikke skrevet inn!' );


 // all forventet data er skrevet inn. utføre endringer i tabell

 //---------------------- her må du også endre update querien til å ta med alle feltene, men dette vil ikke generere feil.------------------------

 mysql_query( 'UPDATE ' . $table . ' SET ' . $fornavn . ' = ' . quote_smart( $_POST[$fornavn] ) . ', ' . $etternavn . ' = ' . quote_smart( $_POST[$etternavn] ) . ' WHERE ' . $kundenr . ' = ' . (int)$_POST[$kundenr] . ';' ) or die( mysql_error() );

}


// dersom post[submit_delete_user] er satt (noen sletter en bruker)

if ( isset( $_POST['submit_delete_user'] ) && !empty( $_POST['submit_delete_user'] ) ) {

 // forventer id
 if ( !isset( $_POST[$kundenr] ) || empty( $_POST[$kundenr] ) ) die( 'Kundenr er ikke satt!' );

 // slett bruker
 mysql_query( 'DELETE FROM ' . $table . ' WHERE ' . $kundenr . ' = ' . (int)$_POST[$kundenr] . ';' ) or die( mysql_error() );

}


// dersom noen ønsker å legge til data.
// strcmp() returnere 0 dersom strengene er like. derfor bruker jeg !strcmp() som betyr (not)strcmp(). altså true dersom strengene er like.

if ( isset( $_GET['action'] ) && !strcmp( $_GET['action'], 'adduser' ) ) {

 // syntaksen "echo <<< STRING" eller "$var = <<< STRING" betyr at alt som står mellom dette og STRING; blir sendt som output via echo eller lagt til variabelen $var. inkluderer linjeskift.

 echo '
<form action="' . $_SERVER['PHP_SELF'] . '" method="post">
 Fornavn: <input type="text" name=' . $fornavn . ' /><br />
 Etternavn: <input type="text" name=' . $etternavn . ' /><br />
 Postnr: <input type="text" name=' . $postnr . ' /><br />
 Tlf: <input type="text" name=' . $tlf . ' /><br />
 <input type="submit" name="submit_user" value="Legg til bruker" />
</form>
';

}


// dersom noen vil endre data

if ( isset( $_GET['action'] ) && !strcmp( $_GET['action'], 'changeuser' ) ) {

 // sjekk om id er satt

 if ( !isset( $_GET[$kundenr] ) || empty( $_GET[$kundenr] ) ) die( 'Kundenr er ikke satt!' );

 // hent data fra tabell
 // (int)$var vil "kaste" $var til en integer. selv om var er en string blir det en integer. hindrer sql injection. kan kun brukes om du forventer heltall.

 //-------------------------- følgende query vil returnere to kolonner, begge med fornavn fra tabellen. denne genererer feil når du printer formen under. -------------

 $res = mysql_query( 'SELECT ' . $fornavn . ', ' . $fornavn . ' FROM ' . $table . ' WHERE ' . $kundenr . ' = ' . (int)$_GET[$kundenr] . ';' ) or die( mysql_error() );
 $row = mysql_fetch_row( $res );

 // $row er nå en array med dataene fra querien ($row[0] = brukernavn, $row[1] = passord)

 echo '
<form action="' . $_SERVER['PHP_SELF'] . '" method="post">
 <input type="hidden" name=' . $kundenr . ' value="' . (int)$_GET[$kundenr] . '" />
 Fornavn: <input type="text" name=' . $fornavn . ' value="' . $row[0] . '" /><br />
 Etternavn: <input type="text" name=' . $etternavn . ' value="' . $row[1] . '" /><br />
 Postnr: <input type="text" name=' . $postnr . ' value="' . $row[3] . '" /><br />
 Tlf: <input type="text" name=' . $tlf . ' value="' . $row[4] . '" /><br />
 <input type="submit" name="submit_change_user" value="Lagre endring" />
 <input type="submit" name="submit_delete_user" value="Slett bruker" />
</form>
';

}


// skriv ut data og linker
// hent beskrivelse av tabell

$res = mysql_query( 'DESCRIBE ' . $table . ';' ) or die( mysql_error() );
while ( $row = mysql_fetch_assoc( $res ) ) {
 $desc[] = $row['Field']; // Field er feltnavn i beskrivelsen av tabell
}

// nå er $desc et array med alle felt navnene i tabellen


// hent data fra tabell

$res = mysql_query( 'SELECT * FROM ' . $table . ';' ) or die( mysql_error() );
while ( $row = mysql_fetch_row( $res ) ) {
 $data[] = $row;
}

// nå er $data et array med alle radene og alle feltene i tabellen


// presentere data

if ( isset( $data ) && isset( $desc ) ) {

echo '<table><tr>';
foreach ( $desc as $field ) {
  echo '<th>' . $field . '</th>';
}
echo '</tr>';

foreach ( $data as $row ) {
  echo '<tr onclick="location.href = \'' . $_SERVER['PHP_SELF'] . '?action=changeuser&id=' . $row[0] . '\';">';
  foreach ( $row as $field ) {
	echo '<td>' . $field . '</td>';
  }
  echo '</tr>';
}

echo '</table>';

}

echo '<a href="' . $_SERVER['PHP_SELF'] . '?action=adduser">Legg til kunde</a>';

?>
</body></html>

 

Lenke til kommentar

Aha! Nå funker det å legge til kunder til og med.. :) Syntes jeg begynner å komme lang jeg!

 

 

Nå ser det ut som alt fungerer, bortsett fra at når jeg skal endre på en rad, kommer det opp "Kundenr ikke satt"

 

 

 

Her er koden igjen:

 

Klikk for å se/fjerne innholdet nedenfor
<html><body>
<style type="text/javascript">tr:hover,td:hover {background:#FF00FF} </style>
<?php


// quote_smart()
// en variant av en escape funksjon funnet her på forumet
// hindrer sql injection

function quote_smart($msg) {
 if ( !is_numeric($msg) ) {
// hvis $msg ikke er et nummer:
if ( get_magic_quotes_gpc() ) {
  // hvis magic quotes er aktivert (gjør så php legger til slashes automatisk på input)

  $msg = stripslashes( $msg ); // fjern slashes (ellers vil mysql_real_escape_string() dobbelslashe)
}

// legg til quote tegn og escape med mysql_real_escape_string()	
$msg = "'" . mysql_real_escape_string( $msg ) . "'";

 }

 // returner $msg uansett om det er nummer eller escapa tekst
 return $msg;

}

// databasetilkobling

mysql_connect( 'localhost', 'bruker, '******' ) or die( mysql_error() );
mysql_select_db( 'database' ) or die( mysql_error() );

// Setter variabler

$table = "kunder";

$kundenr = "kundenr";
$fornavn = "fornavn";
$etternavn = "etternavn";
$postnr = "postnr";
$tlf = "tlf";
$mail = "mail";
$signatur = "signatur";
$betalt = "betalt";

// dersom post[submit_user] er satt (noen har lagt til en bruker), valider og skriv til database
// (settes av form submit):

if ( isset( $_POST['submit_user'] ) && !empty( $_POST['submit_user'] ) ) {

 // isset hindrer at du får en notice error dersom indexen ikke er satt
 // også sjekker jeg at den ikke er tom (vane, viktigere å gjøre med get variabler)

 // nå forventer vi brukernavn og passord

 if ( !isset( $_POST[$fornavn] ) || empty( $_POST[$fornavn] ) ) die( 'Fornavn ikke skrevet inn!' );
 if ( !isset( $_POST[$etternavn] ) || empty( $_POST[$etternavn] ) ) die( 'Etternavn ikke skrevet inn!' );
 if ( !isset( $_POST[$postnr] ) || empty( $_POST[$postnr] ) ) die( 'Postnr ikke skrevet inn!' );
 if ( !isset( $_POST[$tlf] ) || empty( $_POST[$tlf] ) ) die( 'Tlf ikke skrevet inn!' );


 // både passord og brukernavn er skrevet inn. nå kan vi legge inn i databasen

 //-------------------- her må du endre insert querien så den dekker alle radene du har i tabellen. denne genererer feil --------------------------

 mysql_query( 'INSERT INTO ' . $table . ' VALUES(null, ' . quote_smart( $_POST[$fornavn] ) . ', ' . quote_smart( $_POST[$etternavn] ) . ', ' . quote_smart( $_POST[$postnr] ) . ', ' . quote_smart( $_POST[$tlf] ) . ', ' . quote_smart( $_POST[$mail] ) . ', ' . quote_smart( $_POST[$signatur] ) . ', ' . quote_smart( $_POST[$betalt] ) . ');' ) or die( mysql_error() );
 echo 'Bruker '.$_POST[$etternavn].' er lagt inn!';
}

// dersom post[submit_change_user] er satt (noen har lagret en endring)

if ( isset( $_POST['submit_change_user'] ) && !empty( $_POST['submit_change_user'] ) ) {


 // nå forventer vi id, brukernavn og passord.

 if ( !isset( $_POST[$kundenr] ) || empty( $_POST[$kundenr] ) ) die( 'Kundenr er ikke satt!' );
 if ( !isset( $_POST[$fornavn] ) || empty( $_POST[$fornavn] ) ) die( 'Fornavn ikke skrevet inn!' );
 if ( !isset( $_POST[$etternavn] ) || empty( $_POST[$etternavn] ) ) die( 'Etternavn ikke skrevet inn!' );
 if ( !isset( $_POST[$postnr] ) || empty( $_POST[$postnr] ) ) die( 'Postnr ikke skrevet inn!' );
 if ( !isset( $_POST[$tlf] ) || empty( $_POST[$tlf] ) ) die( 'Tlf ikke skrevet inn!' );


 // all forventet data er skrevet inn. utføre endringer i tabell

 //---------------------- her må du også endre update querien til å ta med alle feltene, men dette vil ikke generere feil.------------------------

 mysql_query( 'UPDATE ' . $table . ' SET ' . $fornavn . ' = ' . quote_smart( $_POST[$fornavn] ) . ', ' . $etternavn . ' = ' . quote_smart( $_POST[$etternavn] ) . ', ' . $postnr . ' = ' . quote_smart( (int)$_POST[$postnr] ) . ', ' . $tlf . ' = ' . quote_smart( (int)$_POST[$tlf] ) . ', ' . $betalt . ' = ' . quote_smart( $_POST[$betalt] ) . ' WHERE ' . $kundenr . ' = ' . (int)$_POST[$kundenr] . ';' ) or die( mysql_error() );

}


// dersom post[submit_delete_user] er satt (noen sletter en bruker)

if ( isset( $_POST['submit_delete_user'] ) && !empty( $_POST['submit_delete_user'] ) ) {

 // forventer id
 if ( !isset( $_POST[$kundenr] ) || empty( $_POST[$kundenr] ) ) die( 'Kundensr er ikke satt!' );

 // slett bruker
 mysql_query( 'DELETE FROM ' . $table . ' WHERE ' . $kundenr . ' = ' . (int)$_POST[$kundenr] . ';' ) or die( mysql_error() );

}


// dersom noen ønsker å legge til data.
// strcmp() returnere 0 dersom strengene er like. derfor bruker jeg !strcmp() som betyr (not)strcmp(). altså true dersom strengene er like.

if ( isset( $_GET['action'] ) && !strcmp( $_GET['action'], 'adduser' ) ) {

 // syntaksen "echo <<< STRING" eller "$var = <<< STRING" betyr at alt som står mellom dette og STRING; blir sendt som output via echo eller lagt til variabelen $var. inkluderer linjeskift.

 echo '
<form action="' . $_SERVER['PHP_SELF'] . '" method="post">
 Fornavn: <input type="text" name=' . $fornavn . ' /><br />
 Etternavn: <input type="text" name=' . $etternavn . ' /><br />
 Postnr: <input type="text" name=' . $postnr . ' /><br />
 Tlf: <input type="text" name=' . $tlf . ' /><br />
 <input type="submit" name="submit_user" value="Legg til bruker" />
</form>
';

}


// dersom noen vil endre data

if ( isset( $_GET['action'] ) && !strcmp( $_GET['action'], 'changeuser' ) ) {

 // sjekk om id er satt

 if ( !isset( $_GET[$kundenr] ) || empty( $_GET[$kundenr] ) ) die( 'Kundenr er ikke satt!' );

 // hent data fra tabell
 // (int)$var vil "kaste" $var til en integer. selv om var er en string blir det en integer. hindrer sql injection. kan kun brukes om du forventer heltall.

 //-------------------------- følgende query vil returnere to kolonner, begge med fornavn fra tabellen. denne genererer feil når du printer formen under. -------------

 $res = mysql_query( 'SELECT ' . $fornavn . ', ' . $etternavn . ' FROM ' . $table . ' WHERE ' . $kundenr . ' = ' . (int)$_GET[$kundenr] . ';' ) or die( mysql_error() );
 $row = mysql_fetch_row( $res );

 // $row er nå en array med dataene fra querien ($row[0] = brukernavn, $row[1] = passord)

 echo '
<form action="' . $_SERVER['PHP_SELF'] . '" method="post">
 <input type="hidden" name=' . $kundenr . ' value="' . (int)$_GET[$kundenr] . '" />
 Fornavn: <input type="text" name=' . $fornavn . ' value="' . $row[0] . '" /><br />
 Etternavn: <input type="text" name=' . $etternavn . ' value="' . $row[1] . '" /><br />
 Postnr: <input type="text" name=' . $postnr . ' value="' . $row[3] . '" /><br />
 Tlf: <input type="text" name=' . $tlf . ' value="' . $row[4] . '" /><br />
 <input type="submit" name="submit_change_user" value="Lagre endring" />
 <input type="submit" name="submit_delete_user" value="Slett bruker" />
</form>
';

}


// skriv ut data og linker
// hent beskrivelse av tabell

$res = mysql_query( 'DESCRIBE ' . $table . ';' ) or die( mysql_error() );
while ( $row = mysql_fetch_assoc( $res ) ) {
 $desc[] = $row['Field']; // Field er feltnavn i beskrivelsen av tabell
}

// nå er $desc et array med alle felt navnene i tabellen


// hent data fra tabell

$res = mysql_query( 'SELECT * FROM ' . $table . ';' ) or die( mysql_error() );
while ( $row = mysql_fetch_row( $res ) ) {
 $data[] = $row;
}

// nå er $data et array med alle radene og alle feltene i tabellen


// presentere data

if ( isset( $data ) && isset( $desc ) ) {

echo '<table><tr>';
foreach ( $desc as $field ) {
  echo '<th>' . $field . '</th>';
}
echo '</tr>';

foreach ( $data as $row ) {
  echo '<tr onclick="location.href = \'' . $_SERVER['PHP_SELF'] . '?action=changeuser&id=' . $row[0] . '\';">';
  foreach ( $row as $field ) {
	echo '<td>' . $field . '</td>';
  }
  echo '</tr>';
}

echo '</table>';

}

echo '<a href="' . $_SERVER['PHP_SELF'] . '?action=adduser">Legg til kunde</a>';

?>
</body></html>

 

 

Jeg mistenker at det har noe med denne å gjøre:

 

// dersom noen vil endre data

if ( isset( $_GET['action'] ) && !strcmp( $_GET['action'], 'changeuser' ) ) {

 // sjekk om id er satt

 if ( !isset( $_GET[$kundenr] ) || empty( $_GET[$kundenr] ) ) die( 'Kundenr er ikke satt!' );

 // hent data fra tabell
 // (int)$var vil "kaste" $var til en integer. selv om var er en string blir det en integer. hindrer sql injection. kan kun brukes om du forventer heltall.

 //-------------------------- følgende query vil returnere to kolonner, begge med fornavn fra tabellen. denne genererer feil når du printer formen under. -------------

 $res = mysql_query( 'SELECT ' . $fornavn . ', ' . $etternavn . ' FROM ' . $table . ' WHERE ' . $kundenr . ' = ' . (int)$_GET[$kundenr] . ';' ) or die( mysql_error() );
 $row = mysql_fetch_row( $res );

 // $row er nå en array med dataene fra querien ($row[0] = brukernavn, $row[1] = passord)

 

Er jeg på sporet av noe? Trodde jeg fikk satt det riktig nå jeg men..

Endret av AnaXyd
Lenke til kommentar

når du klikker endre bruker endres location.href til $_SERVER['PHP_SELF'] . '?do=adduser&id=' . $row[0];

 

$row[0] kommer fra en mysql spørring. pass på at denne får kundenr. $row[0] refererer til det første feltet i databasen, som jeg alltid bruker til id. dersom du har kundenr som felt to må du endre denne til $row[1]; for eksempel

Lenke til kommentar

legg til en funksjon:

 

function validatePost( $var ) {

if ( isset( $_POST[$var] ) && !empty( $_POST[$var] ) ) return TRUE;

else return FALSE;

}

 

så endrer du alle de validerings linjene til:

 

validatePost('feltNavn') or die('feltNavn er ikke skrevet inn');

 

litt enklere å lese.

 

 

 

UPDATE spørringen må inneholde alle feltene du skal endre på

 

UPDATE [table] SET [field] = [value], [field2] = [value2], [fieldN] = [valueN], ... WHERE kundenr = ' . (int)$_GET['kundenr'];

 

hvis du skjønner

samme syntaks er det på INSERT spørringen i scriptet. (det samme må gjøres der)

Lenke til kommentar

Nå har jeg prøvd å rette på alt, men fremdeles skjer den samme feilen... Det skyldes jo en spørring, siden det ikke inneholder PHP errors?

 

 

Koden: (dog litt rotete med "//" foran de gamle spørringene)

 

Klikk for å se/fjerne innholdet nedenfor
<html><body>
<style type="text/javascript">tr:hover,td:hover {background:#FF00FF} </style>
<?php


// quote_smart()
// en variant av en escape funksjon funnet her på forumet
// hindrer sql injection

function quote_smart($msg) {
 if ( !is_numeric($msg) ) {
// hvis $msg ikke er et nummer:
if ( get_magic_quotes_gpc() ) {
  // hvis magic quotes er aktivert (gjør så php legger til slashes automatisk på input)

  $msg = stripslashes( $msg ); // fjern slashes (ellers vil mysql_real_escape_string() dobbelslashe)
}

// legg til quote tegn og escape med mysql_real_escape_string()	
$msg = "'" . mysql_real_escape_string( $msg ) . "'";

 }

 // returner $msg uansett om det er nummer eller escapa tekst
 return $msg;

}


// databasetilkobling

mysql_connect( 'localhost', 'bruker', '*****' ) or die( mysql_error() );
mysql_select_db( 'db' ) or die( mysql_error() );

// Setter variabler

$table = "kunder";

$kundenr = "kundenr";
$fornavn = "fornavn";
$etternavn = "etternavn";
$postnr = "postnr";
$tlf = "tlf";
$mail = "mail";
$signatur = "signatur";
$betalt = "betalt";

// dersom post[submit_user] er satt (noen har lagt til en bruker), valider og skriv til database
// (settes av form submit):

if ( isset( $_POST['submit_user'] ) && !empty( $_POST['submit_user'] ) ) {

 // isset hindrer at du får en notice error dersom indexen ikke er satt
 // også sjekker jeg at den ikke er tom (vane, viktigere å gjøre med get variabler)

 // nå forventer vi brukernavn og passord

function validatePost( $var ) {
if ( isset( $_POST[$var] ) && !empty( $_POST[$var] ) ) return TRUE;
else return FALSE;
}

 validatePost('fornavn') or die('feltNavn1 er ikke skrevet inn');
 validatePost('etternavn') or die('feltNavn2 er ikke skrevet inn');
 validatePost('postnr') or die('feltNavn3 er ikke skrevet inn');
 validatePost('tlf') or die('feltNavn4 er ikke skrevet inn');
 validatePost('mail') or die('feltNavn5 er ikke skrevet inn');
 validatePost('signatur') or die('feltNavn6 er ikke skrevet inn');
 validatePost('betalt') or die('feltNavn7 er ikke skrevet inn');



 // både passord og brukernavn er skrevet inn. nå kan vi legge inn i databasen

 //-------------------- her må du endre insert querien så den dekker alle radene du har i tabellen. denne genererer feil --------------------------

 //mysql_query( 'INSERT INTO ' . $table . ' VALUES(null, ' . quote_smart( $_POST[$fornavn] ) . ', ' . quote_smart( $_POST[$etternavn] ) . ', ' . (int)$_POST[$postnr] . ', ' . (int)$_POST[$tlf] . ', ' . quote_smart( $_POST[$mail] ) . ', ' . quote_smart( $_POST[$signatur] ) . ', ' . quote_smart( $_POST[$betalt] ) . ');' ) or die( mysql_error() );

 mysql_query( 'INSERT INTO kunder VALUES(null, 
 ' . quote_smart( $_POST['fornavn'] ) . ', 
 ' . quote_smart( $_POST['etternavn'] ) . ',
 ' . quote_smart( $_POST['postnr'] ) . ',
 ' . quote_smart( $_POST['tlf'] ) . ',
 ' . quote_smart( $_POST['mail'] ) . ',
 ' . quote_smart( $_POST['signatur'] ) . ',
 ' . quote_smart( $_POST['betalt'] ) . '
 );' ) or die( mysql_error() ); 
 echo 'Bruker '.$_POST[$etternavn].' er lagt inn!';
}

// dersom post[submit_change_user] er satt (noen har lagret en endring)

if ( isset( $_POST['submit_change_user'] ) && !empty( $_POST['submit_change_user'] ) ) {


 // nå forventer vi id, brukernavn og passord.

 validatePost('kundenr') or die('feltNavn0 er ikke skrevet inn');
 validatePost('fornavn') or die('feltNavn1 er ikke skrevet inn');
 validatePost('etternavn') or die('feltNavn2 er ikke skrevet inn');
 validatePost('postnr') or die('feltNavn3 er ikke skrevet inn');
 validatePost('tlf') or die('feltNavn4 er ikke skrevet inn');
 validatePost('mail') or die('feltNavn5 er ikke skrevet inn');
 validatePost('signatur') or die('feltNavn6 er ikke skrevet inn');
 validatePost('betalt') or die('feltNavn7 er ikke skrevet inn');


 // all forventet data er skrevet inn. utføre endringer i tabell

 //---------------------- her må du også endre update querien til å ta med alle feltene, men dette vil ikke generere feil.------------------------

 //mysql_query( 'UPDATE ' . $table . ' SET ' . $fornavn . ' = ' . quote_smart( $_POST[$fornavn] ) . ', ' . $etternavn . ' = ' . quote_smart( $_POST[$etternavn] ) . ', ' . $postnr . ' = ' . quote_smart( (int)$_POST[$postnr] ) . ', ' . $tlf . ' = ' . quote_smart( (int)$_POST[$tlf] ) . ', ' . $betalt . ' = ' . quote_smart( $_POST[$betalt] ) . ' WHERE ' . $kundenr . ' = ' . (int)$_GET[$kundenr] . ';' ) or die( mysql_error() );

 mysql_query( 'UPDATE kunder SET 
 fornavn = ' . quote_smart( $_POST['fornavn'] ) . ', 
 etternavn = ' . quote_smart( $_POST['etternavn'] ) . ',
 postnr = ' . quote_smart( $_POST['postnr'] ) . ',
 tlf = ' . quote_smart( $_POST['tlf'] ) . ',
 mail = ' . quote_smart( $_POST['mail'] ) . ',
 signatur = ' . quote_smart( $_POST['signatur'] ) . ',
 betalt = ' . quote_smart( $_POST['tlf'] ) . '
 WHERE kundenr = ' . (int)$_POST['kundenr'] . ';' ) or die( mysql_error() );


}


// dersom post[submit_delete_user] er satt (noen sletter en bruker)

if ( isset( $_POST['submit_delete_user'] ) && !empty( $_POST['submit_delete_user'] ) ) {

 // forventer id
 if ( !isset( $_POST[$kundenr] ) || empty( $_POST[$kundenr] ) ) die( 'Kundenr er ikke satt!' );

 // slett bruker
 mysql_query( 'DELETE FROM ' . $table . ' WHERE ' . $kundenr . ' = ' . (int)$_POST[$kundenr] . ';' ) or die( mysql_error() );

}


// dersom noen ønsker å legge til data.
// strcmp() returnere 0 dersom strengene er like. derfor bruker jeg !strcmp() som betyr (not)strcmp(). altså true dersom strengene er like.

if ( isset( $_GET['action'] ) && !strcmp( $_GET['action'], 'adduser' ) ) {

 // syntaksen "echo <<< STRING" eller "$var = <<< STRING" betyr at alt som står mellom dette og STRING; blir sendt som output via echo eller lagt til variabelen $var. inkluderer linjeskift.

 echo '
<form action="' . $_SERVER['PHP_SELF'] . '" method="post">
 Fornavn: <input type="text" name=' . $fornavn . ' /><br />
 Etternavn: <input type="text" name=' . $etternavn . ' /><br />
 Postnr: <input type="text" name=' . $postnr . ' /><br />
 Tlf: <input type="text" name=' . $tlf . ' /><br />
 Mail: <input type="text" name=' . $mail . ' /><br />
 Signatur: <input type="text" name=' . $signatur . ' /><br />
 Betalt?: <input type="text" name=' . $betalt . ' /><br />
 <input type="submit" name="submit_user" value="Legg til bruker" />
</form>
';

}


// dersom noen vil endre data

if ( isset( $_GET['action'] ) && !strcmp( $_GET['action'], 'changeuser' ) ) {

 // sjekk om id er satt

 if ( !isset( $_GET[$kundenr] ) || empty( $_GET[$kundenr] ) ) die( 'Kundenrr er ikke satt!' );

 // hent data fra tabell
 // (int)$var vil "kaste" $var til en integer. selv om var er en string blir det en integer. hindrer sql injection. kan kun brukes om du forventer heltall.

 //-------------------------- følgende query vil returnere to kolonner, begge med fornavn fra tabellen. denne genererer feil når du printer formen under. -------------

 //$res = mysql_query( 'SELECT ' . $fornavn . ', ' . $etternavn . ' ' . $postnr . ', ' . $tlf . ', ' . $mail . ', ' . $signatur . ', ' . $betalt . ' FROM ' . $table . ' WHERE ' . $kundenr . ' = ' . (int)$_GET[$kundenr] . ';' ) or die( mysql_error() );
 //$row = mysql_fetch_row( $res );


 //$res = mysql_query( 'SELECT fornavn, etternavn, postnr, tlf, mail, signatur, betalt FROM kunder WHERE kundenr = ' . (int)$_GET['kundenr'] . ';' ) or die( mysql_error() );
 //$row = mysql_fetch_row( $res );

 $res = mysql_query( 'SELECT fornavn, etternavn, postnr, tlf, mail, signatur, betalt FROM kunder WHERE id = ' . (int)$_GET['kundenr'] . ';' ) or die( mysql_error() );
 $row = mysql_fetch_row( $res );

 // $row er nå en array med dataene fra querien ($row[0] = brukernavn, $row[1] = passord)

 echo '
<form action="' . $_SERVER['PHP_SELF'] . '" method="post">
 <input type="hidden" name=' . $kundenr . ' value="' . (int)$_GET[$kundenr] . '" />
 Fornavn: <input type="text" name=' . $fornavn . ' value="' . $row[0] . '" /><br />
 Etternavn: <input type="text" name=' . $etternavn . ' value="' . $row[1] . '" /><br />
 Postnr: <input type="text" name=' . $postnr . ' value="' . $row[3] . '" /><br />
 Tlf: <input type="text" name=' . $tlf . ' value="' . $row[4] . '" /><br />
 Mail: <input type="text" name=' . $mail . ' value="' . $row[5] . '" /><br />
 Signatur: <input type="text" name=' . $signatur . ' value="' . $row[6] . '" /><br />
 Betalt?: <input type="text" name=' . $betalt . ' value="' . $row[7] . '" /><br />
 <input type="submit" name="submit_change_user" value="Lagre endring" />
 <input type="submit" name="submit_delete_user" value="Slett bruker" />
</form>
';

}


// skriv ut data og linker
// hent beskrivelse av tabell

$res = mysql_query( 'DESCRIBE ' . $table . ';' ) or die( mysql_error() );
while ( $row = mysql_fetch_assoc( $res ) ) {
 $desc[] = $row['Field']; // Field er feltnavn i beskrivelsen av tabell
}

// nå er $desc et array med alle felt navnene i tabellen


// hent data fra tabell

$res = mysql_query( 'SELECT * FROM ' . $table . ';' ) or die( mysql_error() );
while ( $row = mysql_fetch_row( $res ) ) {
 $data[] = $row;
}

// nå er $data et array med alle radene og alle feltene i tabellen


// presentere data

if ( isset( $data ) && isset( $desc ) ) {

echo '<table><tr>';
foreach ( $desc as $field ) {
  echo '<th>' . $field . '</th>';
}
echo '</tr>';

foreach ( $data as $row ) {
  echo '<tr onclick="location.href = \'' . $_SERVER['PHP_SELF'] . '?action=changeuser&id=' . $row[0] . '\';">';
  foreach ( $row as $field ) {
	echo '<td>' . $field . '</td>';
  }
  echo '</tr>';
}

echo '</table>';

}

echo '<a href="' . $_SERVER['PHP_SELF'] . '?action=adduser">Legg til kunde</a>';

?>
</body></html>

 

 

Er sikkert dønn kjedelig for deg å sjekke, men hadde vært knallbra om du bare tok en titt! :) Takk for hjelpen så langt!

Lenke til kommentar

Okay, her har vi SELECT queryen:

 

SELECT fornavn, etternavn, postnr, tlf, mail, signatur, betalt FROM kunder WHERE id = 0;Query was empty

 

 

Og her har vi samme query fra den originale koden:

 

SELECT brukernavn, passord FROM tabellenmin WHERE id = 5;Query was empty

 

 

Er ikke denne riktig da? Skjønner ikke hvorfor jeg får feilmelding på denne jeg.. Har undersøkt og rettet i flere dager, men nå ser det faktisk ut som alt er riktig..

 

// dersom noen vil endre data

if ( isset( $_GET['action'] ) && !strcmp( $_GET['action'], 'changeuser' ) ) {

 // sjekk om id er satt

 if ( !isset( $_GET[$kundenr] ) || empty( $_GET[$kundenr] ) ) die( 'Kundenrr er ikke satt!' );

 

 

EDIT: Ser at originalkoden returnerer 5, mens min returnerer 0. Og dette er med begge med "?action=changeuser&id=5". Hvordan kan jeg fikse dette?

Endret av AnaXyd
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...