register script met fout maar kom er niet uit

Status
Niet open voor verdere reacties.

whisper380

Terugkerende gebruiker
Lid geworden
12 jan 2009
Berichten
1.247
Hey mede helpmijers.

Ik ben een paar dingen aan het proberen in PHP voor de lol, volg een boek, maar zit met een probleem. Ik krijg namelijk deze error:
Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in C:\Users\(gebruikersnaam)\Desktop\USBWebserver v8_nl\root\register.php on line 9
Zoals je ziet gebruik ik usb webserver om alles mee te leren. Hierin zit PHP, MYSQL, en apache. (zover ik weet)
Ik als leek met PHP weet het niet op te lossen. Misschien dat iemand me weer opweg kan krijgen.
Dit is het bestand waar ik mee bezig ben.
PHP:
<!doctype html public "-//W3C//DTD HTML 4.0 //EN"> 
<?php
include("connect.php");
if (!empty($_POST)){
    // Eerst controleren of inlognaam (= e-mailadres) al bestaat in database
    $email = $_POST["email"];
    $wachtwoord = $_POST["wachtwoord"];
    $query = "SELECT * from users WHERE email='$email';";
    $result = mysql_query($db, $query) or die
    (mysql_error());
    if (mysql_num_rows($result) > 0) {
        // e-mailadres al aanwezig in database, foutmelding tonen
        $tekst ="Dit e-mailadres (<b>$email</b>) bestaat al\n.
        <a href=\"" . $_SERVER["PHP_SELF"] ."\">Opnieuw registreren</a>\n";
        die($tekst);
    }else{
        // Ok, Query opbouwen
        $query="INSERT INTO users (email, wachtwoord) ";
        $query .= "VALUES ('$email', '$wachtwoord');";
        $result = mysql_query($db, $query) or die ("FOUT: ".
        mysql_last_error());
        $tekst = "bedankt voor uw aanmelding.<br>
        U kunt nu <a href=\"login.php\">inloggen</a>";
        die ($tekst);
    }
}
?>
<html>
<head>
       <title>Registreren</title>
</head>
<body>
<h2>Registreren</h2>
Welkom, u kunt zich hier registreren. Als inlognaam word u e-mailadres gebruikt.
<hr>
<form name="form1" method="post" action="<?php
echo($_SERVER["PHP_SELF"]);?>">
E-mailadres: <input name="email" type="text"
             size="30" maxlength="40"> (Maximaal 40 tekens)<br>
Wachtwoord: <input name="wachtwoord" type="password"
             size="10" maxlength="20"> (Maximaal 20 tekens)<br>
            <input type="submit" name="submit" value="Registreren">
            <input name="reset" type="reset" value="Leegmaken">
</form>
</body>
</html>
Als jullie nog meer willen weten hoor ik het wel.

Alvast bedankt:thumb:
 
$query = "SELECT * from users WHERE email='{$email}'";

Probeer dit eens, je had een ; in je query staan!
 
Dan krijg ik dit:
Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in C:\Users\(gebruikersnaam)\Desktop\USBWebserver v8_nl\root\register.php on line 9
 
heb het nu weer angepast zoals het in het boek staat:
PHP:
<!doctype html public "-//W3C//DTD HTML 4.0 //EN"> 
<?php
include("connect.php");
if (!empty($_POST)){
    // Eerst controleren of inlognaam (= e-mailadres) al bestaat in database
    $email = $_POST["email"];
    $wachtwoord = $_POST["wachtwoord"];
    $query = "SELECT * from users WHERE email='$email';";
    $result = mysql_query($db, $query) or die ("FOUT: " .
    mysql_last_error());
    if (mysql_num_rows($result) > 0) {
        // e-mailadres al aanwezig in database, foutmelding tonen
        $tekst ="Dit e-mailadres (<b>$email</b>) bestaat al\n.
        <a href=\"" . $_SERVER["PHP_SELF"] ."\">Opnieuw registreren</a>\n";
        die($tekst);
    }else{
        // Ok, Query opbouwen
        $query="INSERT INTO users (email, wachtwoord) ";
        $query .= "VALUES ('$email', '$wachtwoord');";
        $result = mysql_query($db, $query) or die ("FOUT: ".
        mysql_last_error());
        $tekst = "bedankt voor uw aanmelding.<br>
        U kunt nu <a href=\"login.php\">inloggen</a>";
        die ($tekst);
    }
}
?>
<html>
<head>
       <title>Registreren</title>
</head>
<body>
<h2>Registreren</h2>
Welkom, u kunt zich hier registreren. Als inlognaam word u e-mailadres gebruikt.
<hr>
<form name="form1" method="post" action="<?php
echo($_SERVER["PHP_SELF"]);?>">
E-mailadres: <input name="email" type="text"
             size="30" maxlength="40"> (Maximaal 40 tekens)<br>
Wachtwoord: <input name="wachtwoord" type="password"
             size="10" maxlength="20"> (Maximaal 20 tekens)<br>
            <input type="submit" name="submit" value="Registreren">
            <input name="reset" type="reset" value="Leegmaken">
</form>
</body>
</html>
krijg nu dit:
Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in C:\Users\gebruikersnaam\Desktop\USBWebserver v8_nl\root\register.php on line 9

Fatal error: Call to undefined function mysql_last_error() in C:\Users\gebruikersnaamDesktop\USBWebserver v8_nl\root\register.php on line 10
 
Laatst bewerkt:
probeer ipv

PHP:
$query = "SELECT * from users WHERE email='$email';";
    $result = mysql_query($db, $query) or die ("FOUT: " .
    (mysql_last_error());

dit te doen:

PHP:
$query = "SELECT * from users WHERE email = '{$email}'";
$result = mysql_query($db, $query) or die ("FOUT: " .( mysql_last_error() ) );

je had een ')' te weinig waardoor de 'die' nooit werd gesloten
dus wat je in principe had was het volgende:

die ( ; )

PHP weet uiteraard niet hoe hij hier mee om moet gaan
 
Laatst bewerkt door een moderator:
nu krijg ik dit:
Parse error: syntax error, unexpected ')' in C:\Users\gebruikersnaam\Desktop\USBWebserver v8_nl\root\register.php on line 10

code:
PHP:
<!doctype html public "-//W3C//DTD HTML 4.0 //EN"> 
<?php
include("connect.php");
if (!empty($_POST)){
    // Eerst controleren of inlognaam (= e-mailadres) al bestaat in database
    $email = $_POST["email"];
    $wachtwoord = $_POST["wachtwoord"];
    $query = "SELECT * from users WHERE email='$email';";
    $result = mysql_query($db, $query) or die ("FOUT: " .
    mysql_last_error() ) );
    if (mysql_num_rows($result) > 0) {
        // e-mailadres al aanwezig in database, foutmelding tonen
        $tekst ="Dit e-mailadres (<b>$email</b>) bestaat al\n.
        <a href=\"" . $_SERVER["PHP_SELF"] ."\">Opnieuw registreren</a>\n";
        die($tekst);
    }else{
        // Ok, Query opbouwen
        $query="INSERT INTO users (email, wachtwoord) ";
        $query .= "VALUES ('$email', '$wachtwoord');";
        $result = mysql_query($db, $query) or die ("FOUT: ".
        mysql_last_error());
        $tekst = "bedankt voor uw aanmelding.<br>
        U kunt nu <a href=\"login.php\">inloggen</a>";
        die ($tekst);
    }
}
?>
<html>
<head>
       <title>Registreren</title>
</head>
<body>
<h2>Registreren</h2>
Welkom, u kunt zich hier registreren. Als inlognaam word u e-mailadres gebruikt.
<hr>
<form name="form1" method="post" action="<?php
echo($_SERVER["PHP_SELF"]);?>">
E-mailadres: <input name="email" type="text"
             size="30" maxlength="40"> (Maximaal 40 tekens)<br>
Wachtwoord: <input name="wachtwoord" type="password"
             size="10" maxlength="20"> (Maximaal 20 tekens)<br>
            <input type="submit" name="submit" value="Registreren">
            <input name="reset" type="reset" value="Leegmaken">
</form>
</body>
</html>
 
nu heb je in regel 10 een ) teveel staan!
 
dat was een suggestie van iemand anders die ik dus heb geprobeerd. maar het script werkt nu nog niet.
Weet iemand de oplossing?
 
gebruik deze query eens

$query = "SELECT * from users WHERE email= '".$emai."'";

en in voor regel 10 tel eens hoevaak je ( open en )sluit, dat aantal MOET gelijk zijn!
 
als ik je oplossing probeer krijg ik dit:
Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in C:\Users\gebruikersnaam\Desktop\USBWebserver v8_nl\root\register.php on line 9

Fatal error: Call to undefined function mysql_last_error() in C:\Users\gebruikersnaam\Desktop\USBWebserver v8_nl\root\register.php on line 10

nu heb ik zelf wat zitten prullen aan het script en kwam tot dit:
PHP:
<!doctype html public "-//W3C//DTD HTML 4.0 //EN">
<?php
include("connect.php");
if (!empty($_POST)){
    // Eerst controleren of inlognaam (= e-mailadres) al bestaat in database
    $email = $_POST["email"];
    $wachtwoord = $_POST["wachtwoord"];
    $query = "SELECT * from users WHERE email='$email';";
    $result = mysql_query($query) or die (mysql_error());
    if (mysql_num_rows($result) > 0) {
        // e-mailadres al aanwezig in database, foutmelding tonen
        $tekst ="Dit e-mailadres (<b>$email</b>) bestaat al\n.
        <a href=\"" . $_SERVER["PHP_SELF"] ."\">Opnieuw registreren</a>\n";
        die($tekst);
    }else{
        // Ok, Query opbouwen
        $query="INSERT INTO users (email, wachtwoord) ";
        $query .= "VALUES ('$email', '$wachtwoord');";
        $result = mysql_query($query) or die (mysql_error());
        $tekst = "bedankt voor uw aanmelding.<br>
        U kunt nu <a href=\"login.php\">inloggen</a>";
        die ($tekst);
    }
}
?>
<html>
<head>
       <title>Registreren</title>
</head>
<body>
<h2>Registreren</h2>
Welkom, u kunt zich hier registreren. Als inlognaam word u e-mailadres gebruikt.
<hr>
<form name="form1" method="post" action="<?php
echo($_SERVER["PHP_SELF"]);?>">
E-mailadres: <input name="email" type="text"
             size="30" maxlength="40"> (Maximaal 40 tekens)<br>
Wachtwoord: <input name="wachtwoord" type="password"
             size="10" maxlength="20"> (Maximaal 20 tekens)<br>
            <input type="submit" name="submit" value="Registreren">
            <input name="reset" type="reset" value="Leegmaken">
</form>
</body>
</html>
wonderbaarlijk lijkt het te werken totdat je een 2de gebruiker toevoegt. dan krijg je dit:
Duplicate entry '0' for key 'PRIMARY'

Misschien is dit makkelijker op te lossen?
 
Het werkt! na lang zoeken en dingen proberen en googlen is het me toch gelukt!

het script zoals het er nu uitziet:
PHP:
<!doctype html public "-//W3C//DTD HTML 4.0 //EN">
<?php
include("connect.php");
if (!empty($_POST)){
    // Eerst controleren of inlognaam (= e-mailadres) al bestaat in database
    $email = $_POST["email"];
    $wachtwoord = $_POST["wachtwoord"];
    $query = "SELECT * from users WHERE email='$email';";
    $result = mysql_query($query) or die (mysql_error());
    if (mysql_num_rows($result) > 0) {
        // e-mailadres al aanwezig in database, foutmelding tonen
        $tekst ="Dit e-mailadres (<b>$email</b>) bestaat al\n.
        <a href=\"" . $_SERVER["PHP_SELF"] ."\">Opnieuw registreren</a>\n";
        die($tekst);
    }else{
        // Ok, Query opbouwen
        $query="INSERT INTO users (email, wachtwoord)
        VALUES ('$email', '".md5($_POST['wachtwoord'])."');";
        $result = mysql_query($query) or die (mysql_error());
        $tekst = "bedankt voor uw aanmelding.<br>
        U kunt nu <a href=\"login.php\">inloggen</a>";
        die ($tekst);
    }
}
?>
<html>
<head>
       <title>Registreren</title>
</head>
<body>
<h2>Registreren</h2>
Welkom, u kunt zich hier registreren. Als inlognaam word u e-mailadres gebruikt.
<hr>
<form name="form1" method="post" action="<?php
echo($_SERVER["PHP_SELF"]);?>">
E-mailadres: <input name="email" type="text"
             size="30" maxlength="40"> (Maximaal 40 tekens)<br>
Wachtwoord: <input name="wachtwoord" type="password"
             size="10" maxlength="20"> (Maximaal 20 tekens)<br>
            <input type="submit" name="submit" value="Registreren">
            <input name="reset" type="reset" value="Leegmaken">
</form>
</body>
</html>

Wat had ik fout gedaan waardoor ik dit kreeg:
Duplicate entry '0' for key 'PRIMARY'

Oplossing:
bij de structuur van de tabel had ik dit moeten aanvinken (wat ik dus niet had gedaan):
AUTO_INCREMENT

Nu werkt het!
Bedankt allemaal voor het meedenken!
En bedankt voor de goede hulp!
:thumb:
 
klopt de naam van je table (users) en van je collum(email) wel met de naam in je database?
en in regel 8 staat een ; in je query (sorry, was een typo van mij) die moet eruit
 
Mijn script werkt ondertussen al. Kijk in mijn laatste bericht voor de oplossing.
In ieder geval nog bedankt voor het meedenken:thumb:
 
nog een vraag. in het script staat:
if (mysql_num_rows($result) > 0) {

Mijn php leraar op school zegt dat hij hierdoor niks controleert, hoe zit dat?
heeft hij gelijk?
Wat is de functie van deze regel?
 
Die regel controleert of je query minimaal 1 record oplevert (m.a.w. of er minimaal 1 record is waarbij de waarde van de kolom email gelijk is aan $email). Hoewel ik hiervoor een uniqueness-constraint op de kolom email zou zetten (dan heb je maar 1 query nodig), zou dit gewoon moeten werken. Ik snap niet wat je leraar bedoelt.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan