jeIIy Skrevet 5. september 2014 Del Skrevet 5. september 2014 (endret) Hei, har startet litt med php og spørringer. Prøver å oppdatere fornavn ved at man skriver inn ID og fornavn, men den vil ikke endre seg <form action="index.php" method="POST"> <input type="text" value="ID" name="id"> <input type="text" value="Nytt navn" name="firstname"> <input type="submit" value="Lagre"> </form> <?php if(!empty($_POST['id']) && !empty($_POST['firstname'])) { $id = $_POST['id']; $firstname = $_POST['firstname']; $query="UPDATE `users´ SET ´firstname´='$firstname' WHERE ´id´='$id'"; mysql_query($query); echo $firstname. ' '; } ?> Database tabellen ser sånn ut. id - username - password - firstname - surname - gender har prøvd echo $firstname, og det fungerer fint, så det må være noe med spørringen`? prøvde også insert into, for å sette inn nye verdier i tabellen. <form action="index.php" method="POST"> <input type="text" value="brukernavn" name="username"> <input type="password" value="passord" name="password"> <input type="text" value="firstname" name="firstname"> <input type="text" value="firstname" name="surname"> <select name="gender"> <option value="male">Male</option> <option value="female">Female</option> </select> <input type="submit" value="registrer"> </form> <?php if(!empty($_POST['username']) && !empty($_POST['password']) && !empty($_POST['firstname']) && !empty($_POST['surname'])&& !empty($_POST['gender'])) { $gender = $_POST['gender']; $username = $_POST['username']; $password = $_POST['password']; $firstname = $_POST['firstname']; $surname = $_POST['surname']; if($gender == "male" || $gender == "female") { $query = "INSERT INTO ´users´ VALUES('$username','$password','$firstname','$surname','$gender')"; mysql_query($query); } } ?> Det fungerer fortsatt ikke Endret 5. september 2014 av jeIIy Lenke til kommentar
Dan-Levi Skrevet 5. september 2014 Del Skrevet 5. september 2014 (endret) Heisann! Hvor kobler du til selve databasen? er error_reporting skrudd på? Du må bruke prepared statements med MySQLI eller PDO i stede for gamle og utdaterte mysql_* funksjoner. Her er et eksempel jeg skrev kjapt som viser prepared statements. <!DOCTYPE html> <html> <head> <title>Endre bruker</title> </head> <body> <?php $dbhost = "localhost"; $dbname = "test"; $dbuser = "root"; $dbpass = "******"; // database tilkobling med PDO $conn = new PDO("mysql:host=$dbhost;dbname=$dbname",$dbuser,$dbpass); // Hent liste over alle brukere $sql = "SELECT id,firstname FROM users"; $q = $conn->prepare($sql); $q->execute(); // Hvis det er noe registrerte brukere if($q->rowCount() >= 1) { echo " <h3>Registrerte brukere:</h3>"; $r = $q->fetchAll(5); // Generer tabell med liste over alle brukere echo " <table> <tbody> <tr> <td>ID</td> <td>Fornavn</td> </tr>"; foreach ($r as $user) { echo "\n <tr> <td>$user->id</td> <td>$user->firstname</td> </tr>\n"; } echo " </tbody> </table>\n"; } ?> <form action="index.php" method="POST"> <input type="text" value="ID" name="id"> <input type="text" value="Nytt navn" name="firstname"> <input type="submit" value="Lagre"> </form> <?php //Sjekk om det finnes input if(!empty($_POST['id']) && !empty($_POST['firstname'])) { // ny brukerdata fra skjema $firstname = $_POST['firstname']; $id = (int)$_POST['id']; // prepared statements for sikkerhet // Sjekk om bruker id eksisterer $sql = "SELECT * FROM users where id = ?"; $q = $conn->prepare($sql); $q->execute(array($id)); //Hvis det finnes èn bruker med denne ID if($q->rowCount() === 1) { // query $sql = "UPDATE users SET firstname = ? WHERE id = ?"; $q = $conn->prepare($sql); if($q->execute(array($firstname,$id))) { echo "ID:$id<br>Brukernavn:$firstname<h3>Brukeren er oppdatert.</h3>"; } } else { //Brukerid eksisterer ikke die("Ingen bruker med den ID"); } } ?> </body> </html> Endret 5. september 2014 av JanTerjeRiisOttoJohansen Lenke til kommentar
jeIIy Skrevet 5. september 2014 Forfatter Del Skrevet 5. september 2014 Jeg setter pris på at du har tatt deg tid til å lage en egen kode, men jeg er veldig tidlig i php fasen, så det er ikke mye jeg får med meg. tenkte å hoppe over til mysqli eller pdo etter jeg er ferdig med litt mysql. har koblet til databasen slik: <?php $conn_error = 'could not connect'; $mysql_host = ''; $mysql_user = '; $mysql_password = ''; $mysql_database = ''; if(!mysql_connect($mysql_host, $mysql_user, $mysql_password)||!mysql_select_db($mysql_database)) { die($conn_error); } ?> Det eneste jeg får gjort er å hente verdier fra databasen. Denne fungerer helt fint <form action="index.php" method="GET"> <select name="gender"> <option value="male">Male</option> <option value="female">Female</option> <input type="submit" value="send"> </select> </form> <?php if(isset($_GET['gender']) &&!empty($_GET['gender'])) { $gender = $_GET['gender']; if($gender == 'male' || $gender == 'female') { $query = "SELECT `id`, `firstname`, `surname` FROM `users` WHERE `gender`='$gender' ORDER by `id`"; if($query_run = mysql_query($query)) { while($row = mysql_fetch_assoc($query_run)) { echo 'ID: <b> '.$row[id] .' </b>'. $row[firstname] .' ' . $row[surname] .'<br>'; } } } } ?> Lenke til kommentar
Dan-Levi Skrevet 5. september 2014 Del Skrevet 5. september 2014 Ikke begynn på mysql_* og hopp over etterhvert. Begynn rett på mysqli eller pdo så det sitter i fingrene. Slik setter du opp en tilkobling med PDO: $dbhost = "localhost"; $dbname = "test"; $dbuser = "root"; $dbpass = "******"; // database tilkobling med PDO $conn = new PDO("mysql:host=$dbhost;dbname=$dbname",$dbuser,$dbpass); Du henter ut fra databasen ved å bruke preparerte spørringer, lag en variabel med SQL du skal bruke slik: $sql = "SELECT * FROM users where id = ?"; Spørsmåltegnet er der når du skal bruke preparerte spørringer slik: $id = (int)$_POST['id']; $q = $conn->prepare($sql); $q->execute(array($id)); Her bruker vi et array i execute() funksjonen med variabelen $id i seg. Jeg anbefaler deg å sjekke ut phpacademy sin spilleliste på youtube. Lenke til kommentar
Feh Skrevet 5. september 2014 Del Skrevet 5. september 2014 Testet og virker. Aner ikke hva som egentlig var feil i eskempelet ditt Jelly, men her skal du hvertfall få skrevet ut en error hvis databasetilkoblingen eller spørringen feiler: $link = mysqli_connect("localhost", "user", "pw", "db"); if (mysqli_connect_errno()) { printf("Connect failed: %s\n", mysqli_connect_error()); exit(); } if(!empty($_POST['username']) && !empty($_POST['password']) && !empty($_POST['firstname']) && !empty($_POST['surname'])&& !empty($_POST['gender'])) { $gender = $_POST['gender']; $username = $_POST['username']; $password = $_POST['password']; $firstname = $_POST['firstname']; $surname = $_POST['surname']; if($gender == "male" || $gender == "female") { $insert_row = mysqli_query($link, "INSERT INTO users VALUES('$username','$password','$firstname','$surname','$gender')") or die (mysqli_error($insert_row)); } } Lenke til kommentar
Crowly Skrevet 6. september 2014 Del Skrevet 6. september 2014 Ser en feil her $query="UPDATE `users´ SET ´firstname´='$firstname' WHERE ´id´='$id'"; Regner med at id er ett numerisk felt, men du oppgir $id som en tekst verdi. Ikke har ' rundt verdier som ikke er tekst. Mulig databasen skjønner det allikavel, men greit å gjøre ting 100% korrekt. $query="UPDATE `users´ SET ´firstname´='$firstname' WHERE ´id´=$id"; For å pirke litt, skal du inkludere variabler i en tekst streng, så putt {} rundt dem slik at php vet nøyaktig hvor variablen begynner og slutter $query="UPDATE `users´ SET ´firstname´='{$firstname}' WHERE ´id´={$id}"; // alternativt $query="UPDATE `users´ SET ´firstname´='" . $firstname . "' WHERE ´id´=" . $id; Er det også greit å teste at sql'en din fungerer ved å kjøre den direkte mot databasen i ett verktøy som phpmyadmin, mysql workbench, heidisql e.l. Det ser du raskt om det er en feil med sql'en eller om feilen er ett sted i php. En annen ting som er viktig, og er greit å få inn i fingerspissene så tidlig som mulig. Aldri stol på bruker input, alltid valider og vask bruker input. Ta en titt på filter_input(), filter_var() og de andre filter_* funksjonene. Type casting er også greit å lese seg opp på. 1 Lenke til kommentar
jeIIy Skrevet 6. september 2014 Forfatter Del Skrevet 6. september 2014 (endret) Ser en feil her $query="UPDATE `users´ SET ´firstname´='$firstname' WHERE ´id´='$id'"; Regner med at id er ett numerisk felt, men du oppgir $id som en tekst verdi. Ikke har ' rundt verdier som ikke er tekst. Mulig databasen skjønner det allikavel, men greit å gjøre ting 100% korrekt. $query="UPDATE `users´ SET ´firstname´='$firstname' WHERE ´id´=$id"; For å pirke litt, skal du inkludere variabler i en tekst streng, så putt {} rundt dem slik at php vet nøyaktig hvor variablen begynner og slutter $query="UPDATE `users´ SET ´firstname´='{$firstname}' WHERE ´id´={$id}"; // alternativt $query="UPDATE `users´ SET ´firstname´='" . $firstname . "' WHERE ´id´=" . $id; Er det også greit å teste at sql'en din fungerer ved å kjøre den direkte mot databasen i ett verktøy som phpmyadmin, mysql workbench, heidisql e.l. Det ser du raskt om det er en feil med sql'en eller om feilen er ett sted i php. En annen ting som er viktig, og er greit å få inn i fingerspissene så tidlig som mulig. Aldri stol på bruker input, alltid valider og vask bruker input. Ta en titt på filter_input(), filter_var() og de andre filter_* funksjonene. Type casting er også greit å lese seg opp på. Problemet med spørringen min var at "`" var satt feil vei. Trodde løsningen din fungerte til jeg prøvde å gjøre alt på nytt, men takk for all hjelp Endret 7. september 2014 av jeIIy Lenke til kommentar
Thorbear Skrevet 24. september 2014 Del Skrevet 24. september 2014 Ser at du allerede har fått svar på det du lurte på, men jeg bare syns en ting må nevnes en ekstra gang, ref; Jeg setter pris på at du har tatt deg tid til å lage en egen kode, men jeg er veldig tidlig i php fasen, så det er ikke mye jeg får med meg. tenkte å hoppe over til mysqli eller pdo etter jeg er ferdig med litt mysql. Det er mulig det ikke kom godt frem hva du ikke bør bruke og hvorfor, men det du ikke bør bruke er altså alle funksjoner som begynner med: mysql_ Dette inkluderer altså mysql_query() som du bruker her. Hvorfor bør ikke dette brukes? Fordi disse funksjonene ble utdatert for over 8 år siden, og feil som har blitt funnet i dem siden har ikke blitt fikset, de har heller ikke fått noen forbedringer i ytelse. Videre er det en stadig økende sannsynlighet for at disse funksjonene vil bli fjernet helt i fremtidige versjoner av PHP. Alternativene som her foreslåes å bruke er Mysqli og PDO, begge disse alternativene har full støtte for MySQL databaser, de har faktisk bedre støtte for MySQL enn mysql_*() funksjonene har. De er ikke vanskeligere å bruke på noen måte, med Mysqli kan du faktisk gjøre alt helt likt som du ville gjort med mysql_* om du skulle ønske det, ved å bare legge til en "i" i funksjonsnavnet, selv om det absolutt er anbefalt å begynne med den objekt-orienterte versjonen. Om du fikk eksempler for "MySQL and PHP" som innehold mysql_*, så må du gjerne fortelle hvor du fikk dem fra, slik at vi kan henge dem ut offentlig for å spre utdatert info. Lenke til kommentar
Crowly Skrevet 24. september 2014 Del Skrevet 24. september 2014 Problemet med spørringen min var at "`" var satt feil vei.` rundt felt og tabell navn er kun nødvendig når du bruker reserverte ord, men det er ikke feil å bruke det uansett, helt sikkert en god vane. 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å