Ik heb een php script, maar dat krijg ik niet werkend. Het probleem is dat de variabele die uit de database gehaald worden leeg blijven. Er komt ook geen foutmelding, dus heb geen idee waar het aan kan liggen.
Bijvoorbeeld het volgende:
Maar ookal bestaad de username in de database, de gehele row is leeg. Als ik dan dit stuk code in een aparte file plaats, dan werkt het weer wel. Dus er moet iets anders in het script zitten dat roet in het eten gooit.PHP Code:
$check = mysql_query("SELECT name, firstname, active, sms FROM users WHERE username = '$username'");
$row = mysql_fetch_row($check);
$_SESSION['name'] = $row[0];
$_SESSION['firstname'] = $row[1];
$_SESSION['active'] = $row[2];
$_SESSION['sms'] = $row[3];
$_SESSION['username'] = $username;
Wie kan me hiermee helpen?
- Hulp bij problemen met php/mysql script.
-
1212 × bekeken sinds 18-03-2008, 13:33 #1
Hulp bij problemen met php/mysql script.
-
In de schijnwerper
[SNELLE LEVERING] Laat je website / webshop snel en professioneel bouwen!Freelance / WerkProfessionele tekstschrijver (actie: 2,5 cent per woord)Freelance / WerkErvaren WordPress & WooCommerce Developer – Pixel-perfect & Whitelabel maatwerk!Freelance / WerkFull Stack: Web development, Design and BrandingFreelance / Werk -
18-03-2008, 13:37 #2
- Berichten
- 142
- Lid sinds
- 17 Jaar
ik denk wel dat ik je kan helpen, kan je me je msn eens geven?
-
18-03-2008, 13:41 #3
- Berichten
- 658
- Lid sinds
- 18 Jaar
$check = mysql_query("SELECT name, firstname, active, sms FROM users WHERE username = '$username'");
Ten eerste variabelen buiten de quotes dus:
$check = mysql_query("SELECT name, firstname, active, sms FROM users WHERE username = ' ".$username." ' ");
En daarnaast een nette error afhandeling erbij:
$check = mysql_query("SELECT name, firstname, active, sms FROM users WHERE username = ' ".$username." ' ") or die(mysql_error());
Bovendien maak ik altijd gebruik van mysql_fetch_array, dan komt het gehele script er zo uit te zien:
PHP Code:<?php
error_reporting(E_ALL);
$check = mysql_query("SELECT name, firstname, active, sms FROM users WHERE username = ' ".$username." ' ") or die(mysql_error());
$row = mysql_fetch_array($check);
$_SESSION['name'] = $row['name'];
$_SESSION['firstname'] = $row['firstname'];
$_SESSION['active'] = $row['active'];
$_SESSION['sms'] = $row['sms'];
$_SESSION['username'] = $username;
?>
-
18-03-2008, 15:06 #4
- Berichten
- 132
- Lid sinds
- 17 Jaar
Bedankt voor de reacties.
Ward: je hebt PM
Lodewijk: Ik heb de code aangepast, maar dat geeft geen verschil. Ik denk dus dat er iets anders aan de hand is waardoor dit niet werkt.
-
18-03-2008, 16:44 #5
- Berichten
- 9
- Lid sinds
- 18 Jaar
Probeer het via session_register. Het is ook belangrijk een while loop te maken.
<?php
session_start();
error_reporting(E_ALL);
$check = mysql_query("SELECT name, firstname, active, sms FROM users WHERE username = ' ".$username." ' ") or die(mysql_error());
while($row = mysql_fetch_array($check);){
$naam = $row['name'];
session_register(name);
}
?>
-
18-03-2008, 16:55 #6
- Berichten
- 658
- Lid sinds
- 18 Jaar
Wat voor error geeft hij terug, en heb je bovendien wel session_start();
bovenaan je pagina staan?
-
19-03-2008, 00:10 #7
- Berichten
- 20
- Lid sinds
- 17 Jaar
Origineel gepost door John P
Ik heb een php script, maar dat krijg ik niet werkend. Het probleem is dat de variabele die uit de database gehaald worden leeg blijven. Er komt ook geen foutmelding, dus heb geen idee waar het aan kan liggen.
Origineel gepost door John P
Bijvoorbeeld het volgende:
PHP Code:$check = mysql_query("SELECT name, firstname, active, sms FROM users WHERE username = '$username'");
$row = mysql_fetch_row($check);
$_SESSION['name'] = $row[0];
$_SESSION['firstname'] = $row[1];
$_SESSION['active'] = $row[2];
$_SESSION['sms'] = $row[3];
$_SESSION['username'] = $username;
Wie kan me hiermee helpen?
Ik ga er maar vanuit dat het uit een POST-formulier komt, dus ik gebruik hieronder $_POST['username'].
Ten tweede: Negeer wat men hierboven zegt. or die is nooit maar dan ook nooit een oplossing. Met een die breek je simpelweg je script af en poept een (voor de bezoeker onzinnige) foutmelding op het scherm d.m.v. mysql_error(), die ook nog eens gegevens kan bevatten die jij eigenlijk niet wilt laten zien aan iedereen.
Vergelijk het met Windows: Jij wilt ook niet dat Windows zichzelf afsluit als je een bestand probeert te verwijderen dat niet bestaat. Je wilt een nette melding krijgen die jou vertelt dat het bestand inderdaad niet bestaat. Dat willen jouw bezoekers ook als er iets mis gaat op jouw website.
Ten derde: mysql_fetch_row() is hier nutteloos, mysql_fetch_assoc() doet precies wat jij wilt: Het geeft een associatieve array terug met daarin de kolomnamen als key en de waarde van de kolom als value. Maak er dus mysql_fetch_assoc() van.
Ten vierde: Je vergeet de waarden in je query te escapen om SQL injection te voorkomen. Dat doe je d.m.v. mysql_real_escape_string().
Ten vijfde: De gegevens die jij opslaat in je sessie zijn niet goed. Jouw script hoeft alleen maar het ID van de gebruiker te weten die is ingelogd. Aan de hand van dat ID kan het script de rest van de gegevens opvragen. Zo kun je dus ook gebruikers "realtime" verwijderen. Met jouw aanpak kun je een gebruiker verwijderen, maar dit heeft alleen effect als de gebruiker uitlogt en daarna weer probeert in te loggen. Als je het ID opslaat, zul je de gegevens op moeten halen en als die gegevens niet bestaan weet je dus dat de ingelogde gebruiker niet meer ingelogd kan zijn, dus haal je zijn sessie weg.
Een geschikter stukje code:
PHP Code:<?php
echo 'Momenteel is het script bezig met de volgende gebruikersnaam: ' . htmlspecialchars($_POST['username']); // htmlspecialchars() om XSS (cross site scripting) te voorkomen.
if (($check = mysql_query("SELECT id FROM users WHERE username = '" . mysql_real_escape_string($_POST['username']) . "'")) === false)
{
// Query mislukte. Doe iets, tijdens het debuggen kun je hier echo mysql_error(); neer zetten om zo te achterhalen wat eventueel een foutmelding is.
}
else if (mysql_num_rows($check) == 0)
{
// Gebruiker bestaat niet.
}
else
{
// mysql_result() volstaat hier, aangezien het slechts om de waarde van 1 kolom gaat.
$_SESSION['id'] = mysql_result($check, 0, 'id');
// Of, als je, ondanks mijn advies, toch de andere gegevens op wilt slaan in de sessie, kun je iets als dit doen:
// (Je moet dan nog wel de volgende velden in je query opnemen, in plaats van id: name, firstname, active, sms)
$aSQLGetUser = mysql_fetch_assoc($check);
$_SESSION['name'] = $aSQLGetUser['name'];
$_SESSION['firstname'] = $aSQLGetUser['firstname'];
$_SESSION['active'] = $aSQLGetUser['active'];
$_SESSION['sms'] = $aSQLGetUser['sms'];
}
?>
Plaats een
- + Advertentie
- + Onderwerp
Marktplaats
Webmasterforum
- Websites algemeen
- Sitechecks
- Marketing
- Domeinen algemeen
- Waardebepaling
- CMS
- Wordpress
- Joomla
- Magento
- Google algemeen
- SEO
- Analytics
- Adsense
- Adwords
- HTML / XHTML
- CSS
- Programmeren
- PHP
- Javascript
- JQuery
- MySQL
- Ondernemen algemeen
- Belastingen
- Juridisch
- Grafisch ontwerp
- Hosting Algemeen
- Hardware Info
- Offtopic