Nu ik rustig aan PHP aan het leren ben kom ik verschillende uitdagingen tegen die ik vrijwel altijd weet op te lossen door alle tutorials en reeds gestelde vragen. Nu kom ik iets tegen waar ik niet zo snel een oplossing voor weet. Dit komt uiteraard door mijn gebrek aan kennis omtrent de mogelijkheden, maar daar krijg ik hier vast antwoord op. Ik zal proberen zo duidelijk mogelijk uit te leggen:

Goed, stel je hebt een inlog systeem waarbij je in de database de volgende gegevens in een tabel opslaat: id, gebruikersnaam en e-mail. Vervolgens wil je de gebruikers een mogelijkheid geven om een profiel te creëren met bepaalde vaste waardes zoals: leeftijd, land van herkomst, hobby's etc. En daarnaast een vrij vlak waarbij iets kort kunnen neerzetten.
Mijn gedachten waren om een nieuwe tabel aan te maken waarin die waardes kunnen worden opgeslagen. Alleen hoe zorg je ervoor dat de juiste persoon ook de juiste waardes kan aanpassen. Omdat er in die nieuwe tabel geen id zit. Of is het verstandig om geen profiel tabel aan te maken, en gewoon nieuwe kolommen te creëren in de bestaande tabel? Lijkt mij op te duur wat onoverzichtelijk worden.

Alvast bedankt!
Het koppelen doe je gewoon met de SELECT query.

Hieronder een klein voorbeeldje

SELECT
	id, users.name, users.email hobbies.hobby
FROM
	users
JOIN
	hobbies
ON
	users.id = hobbies.user_id
WHERE
	hobbies.hobby = 'programmeren';


of met aliasses

SELECT
	u.id, u.name, u.email, h.hobby
FROM
	users u
JOIN
	hobbies h
ON
	u.id = h.user_id
WHERE
	h.hobby = 'programmeren';


Bij de registratie heb je een minimum aan gegevens nodig. De rest kun je direct vragen bij registratie maar je kunt de gebruiker hier ook in een later stadium om vragen. (Datingsites zijn er goed in om je met enkel een username, wachtwoord en emailadres binnen te halen waarna ze alsnog het hemd van je lijf gaan vragen om zodoende de drempel voor registratie zo laag mogelijk te houden).
Oke, bedankt voor de reacties. Weer even genoeg materie om mee te spelen.

Groet!
Ik ben dus bezig om zo'n profiel te maken, maar ik loop vast op moment dat ik op de submit knop druk. Er wordt dan niks naar mijn database gezet. Iemand een idee waar ik een fout heb gemaakt?

<?php
include_once 'core/db_connect.php';
include_once 'core/functions.php';
sec_session_start();

$sqlCommand = "SELECT * FROM gebruikers WHERE gebruikersnaam='" . $_SESSION['gebruikersnaam'] . "'";
$query = mysqli_query($mysqli, $sqlCommand) or die (mysqli_error($mysqli));
While ($row =mysqli_fetch_array($query)) {
	$pid = $row["id"]; 
	$gebruikersnaam = $row["gebruikersnaam"];

}
mysqli_free_result($query);

 ?>



<form method="post">
	<Table  name="tabel" width="685"border="1">
		<tr>
			<td width"185">Leeftijd:</td>
			<td width"605"> <input  name="leeftijd" id="leeftijd" Size="3" maxlength="2"></td>
		</tr>					
		<tr>
			<td width"185">Land:</td>
			<td width"605"> 			
				<select name="land" id="land">
					<OPTION VALUE="Nederland"> 
						Nederland
					</OPTION>
					<OPTION VALUE="België">
						Belgi&#235;
					</OPTION>		
				</select>
			</td>
		</tr>
		<tr>
			<td  COLSPAN="2"><textarea name="beschrijving" id="beschrijving" cols="80" rows="20"></textarea></td>
		</tr>
		<tr>
			<td COLSPAN="2"align="center"> <input type="Submit" name"="submit" id="submit" value="Verander"><input name="pid" type="hidden" id="pid" value="<?php print $pid; ?>"/><input name="gebruikersnaam" type="hidden" id="gebruikersnaam" value="<?php print $gebruikersnaam; ?>"/></td>
		</tr>
	</Table>
	
</form>	
<?php

 if(isset($_POST['verander'])) {
	$pid			= $_POST["pid"];
	$gebruikersnaam	= $_POST["gebruikersnaam"];
 	$leeftijd		= $_POST["leeftijd"];
	$land 			= $_POST["land"];
	$beschrijving 	= $_POST["beschrijving"];


		$query = mysqli_query($mysqli,"INSERT INTO profiel( 'gebruikersnaam', 'userid', 'leeftijd', 'land', 'beschrijving') VALUES ('$gebruikersnaam', '$pid','$leeftijd','$land','$beschrijving')")or die(mysqli_error($mysqli));
		
		
		echo("gelukt"); 
		exit();
		
			}		


?>

Welke melding zie je?
Er zitten wat kleine onjuistheden in je script:


    <Table  name="tabel" width="685"border="1">


Table zou gewoon met kleine letters kunnen of allemaal met hoofdletters. er mist een spatie tussen width="685" en border="1".

Maak een afspraak met jezelf alle html elementen in kleine letters of in hoofdletters. Kleine letters hebben mijn persoonlijke voorkeur. In iedergeval doe je het nu telkens weer anders en dat komt wel erg rommelig over.
Zo maak je een <select> met daarin <OPTIONS>


<td width"185">


Hier mist een = teken. Bovendien hoort deze informatie allemaal in CSS te staan.


<td COLSPAN="2"align="center">


Hier mist wederom een spatie.

Dan je query:
kolomnamen mogen niet tussen single quotes staan. Alleen waardes wel.


INSERT INTO profiel
	(gebruikersnaam, userid, leeftijd, land, beschrijving)
VALUES
	('$gebruikersnaam', '$pid', '$leeftijd', '$land', '$beschrijving')


Daarnaast mis ik je foutafhandeling. Hoe had je nu kunnen weten dat je query mislukt?
Door te testen wat mysql_query() teruggeeft.
Ik krijg dus geen melding... dus ik weet ook niet waar ik naar moet kijken.
Zie http://php.net/manual/en/mysqli.query.php en dan bij het kopje Return Values:

Returns FALSE on failure. For successful SELECT, SHOW, DESCRIBE or EXPLAIN queries mysqli_query() will return a mysqli_result object. For other successful queries mysqli_query() will return TRUE.
Eerste script:
Regel 4: Ken ik niet.
Regel 6: Query is lek. Gebruik mysqli_real_escape_string().
Regel 8: Leuk, maar je doet er niks mee.

Tweede script:
Regel 32-36: Waarom al die nieuwe $vars aanmaken, nergens voor nodig.
Regel 39: Query is lek. Gebruik mysqli_real_escape_string().
Frank Nietbelangrijk op 27/11/2014 21:08:51

echo ook eens je $query.

Dan krijg je een result ID, waar je geen fluit mee kan.
Laten we het maar even op de string houden ;-).

<?php
$sql = "INSERT INTO profiel( 'gebruikersnaam', 'userid', 'leeftijd', 'land', 'beschrijving') VALUES ('$gebruikersnaam', '$pid','$leeftijd','$land','$beschrijving')";
echo $sql;
$query = mysqli_query($mysqli,$sql)or die(mysqli_error($mysqli));
?>

Reageren