Data fra brugerne gemt i MySQLi

Her kan du få hjælp og stille spørgsmål til MySQL/MySQLi!
Robin
Begynder
Indlæg:11
Tilmeldt:24. sep 2015, 15:05
Data fra brugerne gemt i MySQLi

Indlæg af Robin » 24. sep 2015, 15:24

Hej

Tak for de mange gode videoer. Jeg skal til i gang nu, men der er en ting, jeg ikke har fanget endnu. Hvis man vil bygge en database af data, som brugeren selv har indtastet - altså det er Jens Jensen, der selv indtaster på min hjemmeside - så kan jeg godt lave felterne til det, men hvordan får jeg det gemt i en bestemt database?

Kan I henvise til den video, jeg må have overset.

Tusind tak,

Robin

Brugeravatar
Daniel
Admin
Admin
Indlæg:625
Tilmeldt:14. jun 2011, 09:27
Geografisk sted:Danmark, Fyn, Nørre Aaby
Kontakt:

Re: Data fra brugerne gemt i MySQLi

Indlæg af Daniel » 24. sep 2015, 16:46

Hej Robin,

Velkommen til NemProgrammering.dk forummet :)

Når du arbejder med databaser, så er der flere muligheder, siden du er helt ny til det her, så vil jeg anbefale at du starter ud med MySQLi.
NemProgrammering.dk har en hel serie omkring MySQLi liggende, og mere specifikt skal du kigge på denne video, hvis du gerne vil se hvordan man indsætter data med MySQLi.

Håber dette hjælper dig videre, ellers må du altid spørge igen ;)

Robin
Begynder
Indlæg:11
Tilmeldt:24. sep 2015, 15:05

Re: Data fra brugerne gemt i MySQLi

Indlæg af Robin » 25. sep 2015, 07:46

Hej Daniel

Tak for dit svar og for den fremsendte video - endda med min favoritinstruktør :-D

Men det, jeg gerne vil, er, at det er brugeren, der sætter data ind. Altså at jeg ikke selv skriver Jens Jensen mv i koden, men istedet henter et stykke data, som brugeren har fyldt ind via en form.

Venligst

Robin

Brugeravatar
Daniel
Admin
Admin
Indlæg:625
Tilmeldt:14. jun 2011, 09:27
Geografisk sted:Danmark, Fyn, Nørre Aaby
Kontakt:

Re: Data fra brugerne gemt i MySQLi

Indlæg af Daniel » 25. sep 2015, 11:07

Hej igen,

Så er jeg med på hvad du spørger om :)
Jeg kommer først lige med nogle links her til 2 videoer der forklare princippet i hvad du skal gøre, og så kommer jeg med et eksempel nedenunder hvordan du i praksis sætter de forskellige ting sammen.

PHP: POST
PHP: GET

Eksempel:

Kode: Vælg alt

<form action="" method="POST">
	<label for="navn">Navn: </label>
	<input type="text" name="navn" id="navn">
	<br>
	<input type="submit" value="Indsæt data">
</form>

<?php
if(isset($_POST['navn']) && !empty($_POST['navn'])) {
	$navn = mysqli_real_escape_string($db, $_POST['navn']);
	
	mysqli_query($db, "INSERT INTO `tabel` (`navn`) VALUES ('$navn')");
}
?>
I eksemplet ovenfor, bliver værdien fra tekstfeltet indsat ind i databasen, i en tabel med navnet tabel, i en række der hedder navn.
Der er ikke vist noget om hvordan man forbinder til databasen eller noget, så det er ikke et helt færdigt eksempel, men resten burde du nemt kunne finde blandt MySQLi videoerne her på siden :)

Robin
Begynder
Indlæg:11
Tilmeldt:24. sep 2015, 15:05

Re: Data fra brugerne gemt i MySQLi

Indlæg af Robin » 25. sep 2015, 15:39

Kære Daniel

Tusind tak. Du har hjulpet mig et stort skridt videre. Jeg kan ikke påstå, at det virker endnu - det er som om min performQuery ikke kan genkende variablene. Men jeg forsøger videre i morgen,

MVH
Robin

Brugeravatar
Daniel
Admin
Admin
Indlæg:625
Tilmeldt:14. jun 2011, 09:27
Geografisk sted:Danmark, Fyn, Nørre Aaby
Kontakt:

Re: Data fra brugerne gemt i MySQLi

Indlæg af Daniel » 25. sep 2015, 16:26

Du skal være velkommen til at indsætte koden herinde du har problemer med, så vil jeg meget gerne kigge på det :)

Robin
Begynder
Indlæg:11
Tilmeldt:24. sep 2015, 15:05

Re: Data fra brugerne gemt i MySQLi

Indlæg af Robin » 25. sep 2015, 19:01

Kære Daniel

Tusind tak. Jeg har klippet det, jeg tror, er relevant ind nedenfor


<

Kode: Vælg alt

form method='POST' action="">
            <fieldset>
                <legend>Indsæt data her</legend>
                
                    <label for="name"> fornavn </label>
                    <input type="text" name="name" id="name" autofocus required placeholder="Søren Petersen">
                    <br></br>
                    <label for="age"> alder </label>
                    <input type="text" name="age" id="age" required placeholder="25">
                    <br></br>
                    <label for="phone"> nummer </label>
                    <input type="text" name="phone" id="phone" required placeholder="12345678">
                    <br></br>
                    <input type="submit" name="send" id="send" value="Opret">
                
            </fieldset>
        </form>


        
<?php
    require_once "connecttildatabase.php"; 
    

    if(isset($_POST['submit'])){
        
                  
            $name = $_POST['name']; 
            $name = mysqli_real_escape_string($name);
    
            $age = $_POST['age'];
            $age = mysqli_real_escape_string($age);
    
            $phone = $_POST['phone'];
            $phone = mysqli_real_escape_string($phone);
            
            performQuery("INSERT INTO personerne(name, age, phone)VALUES ('$name', '$age', '$phone')");
                   
        }
?>


MVH
Robin

Brugeravatar
Daniel
Admin
Admin
Indlæg:625
Tilmeldt:14. jun 2011, 09:27
Geografisk sted:Danmark, Fyn, Nørre Aaby
Kontakt:

Re: Data fra brugerne gemt i MySQLi

Indlæg af Daniel » 25. sep 2015, 22:22

Så fik jeg kigget din kode igennem, og der er nogle småfejl, som jeg har rettet i nedenstående kode, som jeg kopierer ind nederst i indlægget her, så kan du kigge på den, og tage det ud du kan bruge :)

1. For lige at tage din HTML, så har du bruget <br></br> i løbet af din kode, br tags er et af de tilfælde, hvor du kan nøjes med åbningstagget, altså <br> (en lille ting, men rart at få det med fra start)

2. I starten af din PHP kode har du brugt if(isset($_POST['submit'])), det kan du ikke bruge, da du ikke har noget input med et "navn" af submit. Altid når du arbejder med POST og GET, så er det name attributten du skal henvise til i din PHP kode.

3. Når du arbejder med MySQLi, så skal du i næsten alle funktioner starte med at linke til den variabel der indeholder din database forbindelse, det vil sige når du forbinder, så skriver du noget alla $db = mysqli_connect(...);, i det her tilfælde hedder min variabel $db, så ved mysqli_real_escape_sting og query, der skal du starte ud med $db som det første parameter. Eksempel: $name = mysqli_real_escape_string($db, $_POST['name']);

4. Du har skrevet performQuery("..."), det er der ikke en funktion der hedder, her skal du bruge mysqli_query($db, "...");.

Det er højst sandsynligt den sidste fejl der gør at det ikke virker for dig, de andre ting vil også påvirke resultatet, men din besked til databasen går slet ikke igennem uden den sidste detalje :)

Her kommer så den kode jeg har skrevet til dig, det jeg har gjort med den, er at jeg har optimeret den til nogle af de mere generelle standarder. Det vil sige at det ikke er alt jeg har skrevet om til det mest optimale, men kun de ting der vil hjælpe dig mest til ikke at få lært noget der senere kan forvirre dig når du skal læse andres kode.
Det der så er ved det, er at det ikke er alle der bør lære det mest korrekte fra starten, jeg var/er personligt en af dem der bare skal lære det på den nemmeste og mest kludrede måde, og så finder jeg ud af standarterne efterhånden, men nu er eksemplet givet til dig, og så kan du bruge det hvis du får noget ud af det, og ellers så er det bare at glemme alt om det ;)

Kode: Vælg alt

<form action="" method="post">
	<fieldset>
		<legend>Indsæt data her</legend>

		<label for="name">Fornavn </label>
		<input type="text" name="name" id="name" autofocus required placeholder="Søren Petersen">
		<br>

		<label for="age">Alder </label>
		<input type="text" name="age" id="age" required placeholder="25">
		<br>

		<label for="phone">Telefonnummer </label>
		<input type="text" name="phone" id="phone" required placeholder="12345678">
		<br>

		<input type="submit" name="send" id="send" value="Opret">
	</fieldset>
</form>

<?php
require 'connecttildatabase.php';
if(isset($_POST['send'])) {
	if(isset($_POST['name'], $_POST['age'], $_POST['phone']) && !empty($_POST['name']) && !empty($_POST['age']) && !empty($_POST['phone'])) {
		$name = mysqli_real_escape_string($db, $_POST['name']);
		$age = mysqli_real_escape_string($db, $_POST['age']);
		$phone = mysqli_real_escape_string($db, $_POST['phone']);

		$query = mysqli_query($db, "INSERT INTO `personerne` (`name`, `age`, `phone`) VALUES ('$name', '$age', '$phone')");
		if($query) {
			echo 'Alt gik godt og personerne er nu indsat i databasen';
		} else {
			echo 'Der skete en fejl da personerne skulle indsættes i databasen';
		}
	} else {
		echo 'Alle felter skal udfyldes';
	}
}

Robin
Begynder
Indlæg:11
Tilmeldt:24. sep 2015, 15:05

Re: Data fra brugerne gemt i MySQLi

Indlæg af Robin » 25. sep 2015, 22:45

Mange tak igen

Funktionen, du savner i pt 4 er i en selvstændig connect fil, som jeg henter.

Er det rigtigt forstået, når jeg læser dine gode råd, at jeg bruger $DB..... sådan som du beskriver det i pkt 3 - i stedet for en selvstændig connect fil?

Tak for de mange forbedringstips.....

Brugeravatar
Daniel
Admin
Admin
Indlæg:625
Tilmeldt:14. jun 2011, 09:27
Geografisk sted:Danmark, Fyn, Nørre Aaby
Kontakt:

Re: Data fra brugerne gemt i MySQLi

Indlæg af Daniel » 25. sep 2015, 23:19

Ikke helt :)

Som det er lige nu, så har du en connect fil, i den skulle der gerne være noget i stil med:

connecttildatabase.php

Kode: Vælg alt

<?php
$db = mysqli_connect('vært', 'brugernavn', 'kodeord', 'database');

function performQuery($query) {
	global $db;
	
	mysqli_query($db, $query);
}
fil.php

Kode: Vælg alt

<?php
performQuery("INSERT INTO...");
Her er filerne opdelt sådan som jeg forstår at du har det.
Det jeg så har gjort, er at jeg har oprettet en performQuery funktion som kunne være den du har.
I starten af den har jeg brugt global $db. Det har jeg gjort for at gøre $db global, normalt når man arbejder i funktioner, så arbejder man med lokale variabler, altså variabler der kun findes i den pågældende funktion. Det kan også gøres på andre måder, hvor man sender variablen igennem funktionens parametre, men i første omgang er det andet nemmere at lære og forstå (vil jeg mene).

Håber det giver mening, det er ikke det nemmeste at starte ud med at skulle lære om globale og lokale scopes i funktioner :)

Robin
Begynder
Indlæg:11
Tilmeldt:24. sep 2015, 15:05

Re: Data fra brugerne gemt i MySQLi

Indlæg af Robin » 26. sep 2015, 21:01

YES!!!

Nu virker det.

mange tak for hjælpen, det var virkelig godt,

mvh
Robin

cristian
Moderator
Moderator
Indlæg:882
Tilmeldt:26. sep 2011, 21:31
Kontakt:

Re: Data fra brugerne gemt i MySQLi

Indlæg af cristian » 26. sep 2015, 21:57

Er overstående et prepared statement eller skriver i bare direkte til databasen?

Brugeravatar
Daniel
Admin
Admin
Indlæg:625
Tilmeldt:14. jun 2011, 09:27
Geografisk sted:Danmark, Fyn, Nørre Aaby
Kontakt:

Re: Data fra brugerne gemt i MySQLi

Indlæg af Daniel » 26. sep 2015, 23:44

Kanon Robin, glad for at du har fået det til at virke :D

Hej Cristian,
Ovenstående jeg har vist har ikke været prepared statements ;)

cristian
Moderator
Moderator
Indlæg:882
Tilmeldt:26. sep 2011, 21:31
Kontakt:

Re: Data fra brugerne gemt i MySQLi

Indlæg af cristian » 27. sep 2015, 20:58

Hej Cristian,
Ovenstående jeg har vist har ikke været prepared statements
Okey. Så vil jeg bare nævne at man kan lave SQL injection i koden.
Vh
Cristian

Brugeravatar
Daniel
Admin
Admin
Indlæg:625
Tilmeldt:14. jun 2011, 09:27
Geografisk sted:Danmark, Fyn, Nørre Aaby
Kontakt:

Re: Data fra brugerne gemt i MySQLi

Indlæg af Daniel » 1. okt 2015, 12:19

Det er rigtigt, men synes personligt ikke at man til at starte med, skal tænke alt for meget over SQL injection, men det er kun min personlige mening.
Og på den anden side, så er prepared statements i PHP PDO og MySQLi heller ikke 100% sikre i forhold til SQL injection, men det er da absolut det bedste at bruge på seriøse live sider :)

Robin
Begynder
Indlæg:11
Tilmeldt:24. sep 2015, 15:05

Re: Data fra brugerne gemt i MySQLi

Indlæg af Robin » 10. okt 2015, 11:44

Hej

Kunne jeg have lavet en hjemmeside direkte fra WordPress til at lægge data ind i min mySQLi tabel og til at hente det igen.

Er lidt i tvivl nu om, om jeg skal gå php eller wordpress vejen, når jeg nu skal bygge videre.

Hvad er egentlig fordelene ved at lave det i php? Hvad er dit råd?

Mange hilsner

Robin

cristian
Moderator
Moderator
Indlæg:882
Tilmeldt:26. sep 2011, 21:31
Kontakt:

Re: Data fra brugerne gemt i MySQLi

Indlæg af cristian » 10. okt 2015, 20:30

Kunne jeg have lavet en hjemmeside direkte fra WordPress til at lægge data ind i min mySQLi tabel og til at hente det igen.
Kan du nok godt men har ingen anelse hvordan.
Er lidt i tvivl nu om, om jeg skal gå php eller wordpress vejen, når jeg nu skal bygge videre.
Personligt bruger jeg ikke WordPress, Joomla / Andet.
Hvad er egentlig fordelene ved at lave det i php? Hvad er dit råd?
Der er igen fordele ved PHP fremfor andre sprog. Sproget er mere udbredt fordi det er nemmere at sætte servere
op til det, og derved mindre overhead for udbydere.

Du kan bruge PHP, Java (bruger jeg selv), Pearl, Python mm som dit server-side language.

Sidst jeg tjekkede har PHP stadig nogle ulemper som andre sprog ikke har og jeg ser flere og flere firmaer der skifter fra PHP til f.eks Java.
Grunden til det er blandt andet at Java eksekvere hurtigere end PHP, dette var den direkte årsag til at Twitter gik væk fra PHP.

Facebook burde nok også gøre det men de har investeret en del i at modificere PHP så det virker til deres behov.
Dog deler de så vidt jeg ved ikke disse modifikationer med andre.

Besvar