grimjoey Skrevet 13. januar 2008 Skrevet 13. januar 2008 du må endre insert og update queriene til å passe tabelle din ja. i tillegg til forms og validering
AnaXyd Skrevet 13. januar 2008 Forfatter Skrevet 13. januar 2008 Okay.. Det blir litt av en jobb tror jeg..
grimjoey Skrevet 13. januar 2008 Skrevet 13. januar 2008 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' );
AnaXyd Skrevet 14. januar 2008 Forfatter Skrevet 14. januar 2008 (endret) 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 14. januar 2008 av AnaXyd
grimjoey Skrevet 14. januar 2008 Skrevet 14. januar 2008 (endret) først og fremst. fjern mysql passordet når du poster kode her . Endret 14. januar 2008 av grimjoey
AnaXyd Skrevet 14. januar 2008 Forfatter Skrevet 14. januar 2008 (endret) Bare et dummy passord.. Heldigvis! EDIT: Fjernet alt nå, og byttet det ut! Endret 14. januar 2008 av AnaXyd
grimjoey Skrevet 14. januar 2008 Skrevet 14. januar 2008 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>
AnaXyd Skrevet 14. januar 2008 Forfatter Skrevet 14. januar 2008 (endret) 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 14. januar 2008 av AnaXyd
grimjoey Skrevet 15. januar 2008 Skrevet 15. januar 2008 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
AnaXyd Skrevet 15. januar 2008 Forfatter Skrevet 15. januar 2008 Det var da merkelig, for den er satt som førstemann. Her har du ett bilde som beskriver litt bedre: Det skal da være riktig?
grimjoey Skrevet 15. januar 2008 Skrevet 15. januar 2008 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)
AnaXyd Skrevet 15. januar 2008 Forfatter Skrevet 15. januar 2008 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!
grimjoey Skrevet 15. januar 2008 Skrevet 15. januar 2008 lag en funksjon: function my_query( $sql ) { print $sql; return mysql_query( $qsl ); } så bytter du ut alle mysql_query(...) i koden med my_query(...) da vil du se querien, så kan du se at den stemmer, eller om du må gjøre om noe.
AnaXyd Skrevet 16. januar 2008 Forfatter Skrevet 16. januar 2008 (endret) 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 16. januar 2008 av AnaXyd
grimjoey Skrevet 16. januar 2008 Skrevet 16. januar 2008 (endret) prøv å manuelt skriv inn: http://server/navnpåside.php?action=changeuser&kundenr=[kunde_nr_som_eksisterer] i adresselinjen. Endret 16. januar 2008 av grimjoey
AnaXyd Skrevet 16. januar 2008 Forfatter Skrevet 16. januar 2008 Det har jeg prøvd, og det kommer samme error da også. "Kundenrr ikke satt!". Så jeg skjønner ikke helt hva som kan være feil.
BigJackW Skrevet 16. januar 2008 Skrevet 16. januar 2008 (endret) $_GET[$kundenr] Ser du feilen selv ? Når det er slik kan du ikke bruke &kundenr=1245321 Endret 16. januar 2008 av BigJackW
AnaXyd Skrevet 16. januar 2008 Forfatter Skrevet 16. januar 2008 Er det kun snakk om å legge til (int) foran nå? Da prøver jeg det med en gang..
BigJackW Skrevet 16. januar 2008 Skrevet 16. januar 2008 (endret) Er det kun snakk om å legge til (int) foran nå? Da prøver jeg det med en gang.. Nope, du må endre til $_GET['kundenr'] om du vil ha http://dinside.no/?kundenr=1234. Om du har $kundenr inni i stede, blir det http://dinside.no?1234 Da blir 1234 kundenr. is_numeric() er også en fin funksjon i dette tilfellet. Endret 16. januar 2008 av BigJackW
grimjoey Skrevet 16. januar 2008 Skrevet 16. januar 2008 (endret) skrive dette i aktuelle die: die( '"' . $kundenr . '" - "' . $_GET[$kundenr] . '"' ); bigJW: $kundenr = 'kundenr'; øverst i koden Endret 16. januar 2008 av grimjoey
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å