Kan database niet vinden?

Status
Niet open voor verdere reacties.

jesse123

Gebruiker
Lid geworden
29 aug 2012
Berichten
301
Beste,

Ik heb een klein script waarmee je een agenda hebt met beheer functie werkend met php en mysql.
Maar ik heb een probleem.

config.php
PHP:
<?php
// Verbinding maken
$con=mysqli_connect("localhost","root","usbw","agenda"); //IK DRAAI DE SQL OP USBWEBSERVER, DUS SQL IS IDD LOCALHOST

// Verbinding controleren.
if (mysqli_connect_errno($con))
  {
  echo "Fout! Er kon geen verbinding worden gemaakt met de database. Excuses voor het ongemak.";
  }
?>

Dit werkt in principe vgm wel. Ik heb hetvolgende ingevoerd op mysql in de database "agenda":
Code:
CREATE TABLE `agenda` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`naam` VARCHAR( 50 ) NOT NULL ,
`tijd` VARCHAR( 50 ) NOT NULL ,
`locatie` VARCHAR( 50 ) NOT NULL ,
`datum` INT NOT NULL ,
`datum1` INT NOT NULL ,
`datum2` INT NOT NULL ) ENGINE = MYISAM ;

Als ik dan vervolgens de pagina open waarop ik een afspraak zou moeten kunnen invoeren krijg ik dit (bron van dit bestand staat eronder):

probleem.png

PHP:
<?php
include('config.php');

$sql = "INSERT INTO agenda (naam, datum, datum1, datum2, tijd, locatie) VALUES ('".$_POST['naam']."', '".$_POST['datum']."',  '".$_POST['datum1']."', '".$_POST['datum2']."', '".$_POST['tijd']."', '".$_POST['locatie']."')";
$query = mysql_query($sql);

?>
<body style="font-family: Verdana; font-size: 10pt; color: #FFFFFF" bgcolor="#000000">

<form action="" method="POST" name="agenda">

        <table cellpadding="0" cellspacing="0" width="280" height="88">
        <tr>
        <td>Naam</td>
        <td valign="top" height="22">
        <input type="text" name="naam" size="20"></td>
        </tr>
        <tr>
        <td>Datum</td>
        <td valign="top" height="22">
        <select size="1" name="datum">
            <option value="01">01</option>
            <option value="02">02</option>
            <option value="03">03</option>
            <option value="05">05</option>
            <option value="06">06</option>
            <option value="07">07</option>
            <option value="08">08</option>
            <option value="09">09</option>
            <option value="10">10</option>
            <option value="11">11</option>
            <option value="12">12</option>
            <option value="13">13</option>
            <option value="14">14</option>
            <option value="15">15</option>
            <option value="16">16</option>
            <option value="17">17</option>
            <option value="18">18</option>
            <option value="19">19</option>
            <option value="20">20</option>
            <option value="21">21</option>
            <option value="22">22</option>
            <option value="23">23</option>
            <option value="24">24</option>
            <option value="25">25</option>
            <option value="26">26</option>
            <option value="27">27</option>
            <option value="28">28</option>
            <option value="29">29</option>
            <option value="30">30</option>
            <option value="31">31</option>
        </select>
        <select size="1" name="datum1">
            <option value="01">01</option>
            <option value="02">02</option>
            <option value="03">03</option>
            <option value="04">04</option>
            <option value="05">05</option>
            <option value="06">06</option>
            <option value="07">07</option>
            <option value="08">08</option>
            <option value="09">09</option>
            <option value="10">10</option>
            <option value="11">11</option>
            <option value="12">12</option>
        </select>
        <select size="1" name="datum2">
            <option value="2009">2014</option>
            <option value="2010">2015</option>
            <option value="2011">2016</option>
            <option value="2012">2017</option>
			<option value="2011">2018</option>
            <option value="2012">2019</option>
			<option value="2011">2020</option>
            <option value="2012">2021</option>
			<option value="2011">2022</option>
            <option value="2012">2023</option>
			<option value="2011">2024</option>
        </select></td>
        </tr>
        <tr>
        <td>Tijd</td>
        <td valign="top" height="22">
        <input type="text" name="tijd" size="20"></td>
        </tr>
        <tr>
        <td width="121">Locatie</td>
        <td valign="top" height="22" width="159">
        <input type="text" name="locatie" size="20"></td>
        </tr>
        </table>
<input type="submit" value="Verzenden" name="submit">
</form>
</body>

Wie kan me hiermee helpen?

Alvast bedankt! :thumb:
Gr. Jesse
 
probeer het volgende stukje eens als volgt aan te passen :

PHP:
 if (isset($_POST)){
    $sql = "INSERT INTO agenda (naam, datum, datum1, datum2, tijd, locatie) VALUES ('".$_POST['naam']."', '".$_POST['datum']."',          '".$_POST['datum1']."', '".$_POST['datum2']."', '".$_POST['tijd']."', '".$_POST['locatie']."')";
    $query = mysql_query($sql);
}
 
Laten we die methode niet gebruiken om te controleren of een formulier verzonden is ;)

Dit is beter:
PHP:
if ($_SERVER['REQUEST_METHOD'] === 'POST')) {
    $sql = "INSERT INTO agenda (naam, datum, datum1, datum2, tijd, locatie) VALUES ('".$_POST['naam']."', '".$_POST['datum']."',          '".$_POST['datum1']."', '".$_POST['datum2']."', '".$_POST['tijd']."', '".$_POST['locatie']."')";
    $query = mysql_query($sql);
}
In plaats van controleren of een variabele bestaat controleren we nu of de server een POST-actie aan het uitvoeren is :)
 
Hmm oke, ik heb dat stukje vervangen door wat Tha Devil had voorgesteld, ik krijg nu niet meer die foutmeldingen als op de screenshot. Maar als ik nu iets invoer, wordt het nog steeds niet in de database gezet? Wat doe ik nog fout?

Gr. Jesse
 
Kwestie van debuggen :)

Waarschijnlijk klopt de query dan niet:
PHP:
if ($_SERVER['REQUEST_METHOD'] === 'POST')) {
    $sql = "INSERT INTO agenda (naam, datum, datum1, datum2, tijd, locatie) VALUES ('".$_POST['naam']."', '".$_POST['datum']."',          '".$_POST['datum1']."', '".$_POST['datum2']."', '".$_POST['tijd']."', '".$_POST['locatie']."')";
    $query = mysql_query($sql) or die(mysql_error());
}
Het was mij hiervoor niet opgevallen maar ik wil je aanraden de mysql_*-functies niet meer te gebruiken. Gebruik in plaats daarvan mysqli_* of PDO.
 
Volgens mij kloppen alle waardes wel, in database "agenda" in tabel "agenda". (Zie afbeelding)

prblm.jpg

Code:
INSERT INTO agenda (naam, datum, datum1, datum2, tijd, locatie) VALUES ('".$_POST['naam']."', '".$_POST['datum']."',          '".$_POST['datum1']."', '".$_POST['datum2']."', '".$_POST['tijd']."', '".$_POST['locatie']."')";
 
Heb je mijn code uitgevoerd? Het gaat niet alleen om wat je zelf typt, voornamelijk om de waardes vanuit $_POST die meegestuurd worden ;)
 
Ja, dat heb ik gedaan, ik snap niet wat ik nu nog fout doe.
 
Wordt er ook wel data in je database opgeslagen?

Wat is de output als je dit er van maakt:
PHP:
if ($_SERVER['REQUEST_METHOD'] === 'POST')) {
    $sql = "INSERT INTO agenda (naam, datum, datum1, datum2, tijd, locatie) VALUES ('".$_POST['naam']."', '".$_POST['datum']."',          '".$_POST['datum1']."', '".$_POST['datum2']."', '".$_POST['tijd']."', '".$_POST['locatie']."')";
    $query = mysql_query($sql) or die(mysql_error());
    var_dump($sql);
}
 
Witte pagina met tekst "No database selected" na het invoeren en opsturen.
 
Dan ligt het probleem dus niet in bovenstaande code :)

Er is iets niet goed gegaan met het maken van een verbinding met de database, loop dit dus na.
 
Hmm ik heb flink zitten puzzelen, maar ik kwam er niet uit, ik ben opnieuw begonnen en heb bovendien nu het een en ander aangepast. Ik heb weer hetzelfde probleem met de errormeldingen.

Als je de pagina voor het eerst opent komen de volgende foutmeldingen:
2.png

Vervolgens vul ik alles in en verzend ik de gegevens met het volgende script:
PHP:
 $host = "localhost";
    $gebruikersnaam = "root";
    $wachtwoord = "usbw";
    mysql_connect($host, $gebruikersnaam, $wachtwoord);

    $database = "agenda";
    mysql_select_db($database);
  
   $query ="   INSERT INTO agenda(afspraak, locatie, datum, uur, min)
                        VALUES('".$_POST['afspraak']."', '".$_POST['locatie']."', '".$_POST['datum']."', '".$_POST['uur']."', '".$_POST['min']."');";
mysql_query($query); 
mysql_query($query) or die ("FOUT: ". mysql_error());

Vervolgens is het wel verstuurd en staat het daadwerkelijk in de db maar dan 2 keer, en er komen een paar lege velden bij. Ik weet echt niet wat er nu misgaat.
1.png
 
Niet heel gek :)

De situatie: Je opent de pagina voor de eerste keer, wat gebeurt er?

PHP:
$host = "localhost";
$gebruikersnaam = "root";
$wachtwoord = "usbw";
// Verbinding maken met een database
mysql_connect($host, $gebruikersnaam, $wachtwoord);

$database = "agenda";
// Database selecteren
mysql_select_db($database);

// Query maken
// Hmmm die indexen ken ik niet in in de $_POST-array, laat ik daar een melding voor geven en geen waardes invoeren
$query ="   INSERT INTO agenda(afspraak, locatie, datum, uur, min)
                    VALUES('".$_POST['afspraak']."', '".$_POST['locatie']."', '".$_POST['datum']."', '".$_POST['uur']."', '".$_POST['min']."');";
// Mijn query is gevormd: INSERT INTO agenda(afspraak, locatie, datum, uur, min) VALUES('', '', '', '', '');
// Ik ga de gevormde query uitvoeren
mysql_query($query); 
// Ik ga de gevormde query nog maar een keer uitvoeren, wanneer dat mislukt stop ik het script en toon ik de foutmelding
mysql_query($query) or die ("FOUT: ". mysql_error());

Is het duidelijk wat er fout gaat? :)

Ga dus alleen een query uitvoeren wanneer er ook een formulier is verzonden (Die check heb ik in een eerder bericht al gegeven) en voer hem ook maar 1x uit ;)
 
Yess, dankjewel! Het is gelukt! Ik snap nu ook wat ik fout heb gedaan. Bedankt voor je hulp!
 
Hoe ziet je code er nu uit? :)
 
send.php
PHP:
<?php 

    $host = "localhost";
    $gebruikersnaam = "root";
    $wachtwoord = "usbw";
    mysql_connect($host, $gebruikersnaam, $wachtwoord);

    $database = "agenda";
    mysql_select_db($database);
  
   $query ="   INSERT INTO agenda(afspraak, locatie, datum, uur, min)
   VALUES('".$_POST['afspraak']."', '".$_POST['locatie']."', '".$_POST['datum']."', '".$_POST['uur']."', '".$_POST['min']."');";

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
	mysql_query($query) or die ("FOUT: ". mysql_error());
}
echo "Afspraak is opgeslagen!";
echo "<br><a href=registreren.php>Nog een afspraak aanmaken</a>";
?>

En dan staat dit script op een aparte pagina (send.php), dus op de pagina waar de invulvelden staan is het nu:
HTML:
<form action="send.php" method="post">
 
Omdat je het in 2 bestanden hebt (een voor het formulier, een voor de afhandeling) omzeil je de waarschuwing van "Undefined index". Zou je send.php nu rechtstreeks aanroepen krijg je ze alsnog en ook de melding dat de afspraak is opgeslagen.

Dit is beter:
PHP:
<?php 
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $host = "localhost";
    $gebruikersnaam = "root";
    $wachtwoord = "usbw";
    
    mysql_connect($host, $gebruikersnaam, $wachtwoord);
    $database = "agenda";
    mysql_select_db($database);
    
    $query = "INSERT INTO agenda (afspraak, locatie, datum, uur, min) VALUES ('".$_POST['afspraak']."', '".$_POST['locatie']."', '".$_POST['datum']."', '".$_POST['uur']."', '".$_POST['min']."');";
     
    mysql_query($query) or die ("FOUT: ". mysql_error());
    echo "Afspraak is opgeslagen!";
    echo "<br><a href=registreren.php>Nog een afspraak aanmaken</a>";
} else {
    echo "Er is geen formulier verstuurd";
}
?>
Nu wordt er niet van alles al uitgevoerd wanneer je geen formulier hebt verzonden ;)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan