Vraag tijdens het aanmaken van gastenboek

Status
Niet open voor verdere reacties.

julianmurillo

Gebruiker
Lid geworden
15 jan 2018
Berichten
41
Hi allemaal

Ik ben aan het 'struwelen' met het volgende programma (zie bestanden). Ik krijg altijd dezelfde bericht te zien: 'Database niet geselecteerd' op het moment dat ik de gegevens invul in het gastenboek. Inmiddels weet ik niet maar ik moet doen om door te kunnen gaan :( kan iemand mij helpen? Ik zou dit erg op prijs stellen.

dank allemaal


Database:

Code:
-- phpMyAdmin SQL Dump
-- version 4.7.7
-- https://www.phpmyadmin.net/
--
-- Host: localhost:8889
-- Generation Time: Mar 01, 2018 at 08:12 PM
-- Server version: 5.6.38
-- PHP Version: 5.6.32

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";

--
Database: 'dBLOI'
--

-- --------------------------------------------------------

--
-- Table structure for table `dbloi`
--

CREATE TABLE 'dbloi' (
  'ID' int(11) NOT NULL,
  'Naam' varchar(50) NOT NULL,
  'Boodschap' text NOT NULL,
  'Datum' date NOT NULL,
  'Sport' varchar(30) NOT NULL,
  'Beoefenaar' tinyint(1) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Indexes for dumped tables
--

--
-- Indexes for table `dbloi`
--
ALTER TABLE 'dbloi'
  ADD PRIMARY KEY ('ID');

--
-- AUTO_INCREMENT for dumped tables
--

--
-- AUTO_INCREMENT for table `dbloi`
--
ALTER TABLE 'dbloi'
  MODIFY 'ID' int(11) NOT NULL AUTO_INCREMENT;

Guestbook:

HTML:
<!DOCTYPE html>
<html>
    
<head>
<title>Gastenbook</title>
</head>
    
<body>

    <table width="400" border="0" align="center" cellpadding="3" cellspacing="0">
        <tr>
            <td><strong>Vul de gastenboek in</strong></td>
        </tr>
    </table>

    <table width="400" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#CCCCCC">
        <tr>
            <form id="form1" name="form1" method="post" action="addguestbook.php">
                <td>
                    <table width="400" border="0" cellpadding="3" cellspacing="1" bgcolor="#FFFFFF">
                        <tr>
                            <td width="117">Naam</td>
                            <td width="14">:</td>
                            <td width="357"><input name="name" type="text" id="name" size="40" /></td>
                        </tr>
                        <tr>
                            <td>Sport</td>
                            <td>:</td>
                            <td><input name="sport" type="text" id="sport" size="40" /></td>
                        </tr>
                        <tr>
                            <td valign="top">Boodschap</td>
                            <td valign="top">:</td>
                            <td><textarea name="comment" cols="40" rows="3" id="comment"></textarea></td>
                        </tr>
                        <tr>
                            <td valign="top">Beoefenaar</td>
                            <td valign="top">:</td>
                            <td>
                                <select name="beoefenaar">
                                    <option value="false" selected="selected">No</option>
                                    <option value="true">Yes</option>
                                </select>
                            </td>
                        </tr>
                        <tr>
                            <td>&nbsp;</td>
                            <td>&nbsp;</td>
                            <td><input type="submit" name="Submit" value="Submit" /> <input type="reset" name="Submit2" value="Reset" /></td>
                        </tr>
                    </table>
                </td>
            </form>
        </tr>
    </table>

    <table width="400" border="0" align="center" cellpadding="3" cellspacing="0">
        <tr>
            <td><strong><a href="viewguestbook.html">Gastenboek bekijken</a> </strong></td>
        </tr>
    </table>

</body>  

</html>


Add to guestbook:

PHP:
<?php
$host="localhost"; // Host-naam 
$username=""; // Mysql-username 
$password=""; // Mysql-wachtwoord 
$db="dBLOI.sql";
$db_name="dBLOI"; // Database 
$tbl_name="dbloi"; // Tabel-naam 

// Verbinden met de server en database selecteren
mysql_connect("$host", "$username", "$password")or die('Verbinden niet mogelijk'); 
mysql_select_db("$db", "$db_name") or die('Database is niet geselecteerd');

$datetime=date("y-m-d h:i:s"); //date time

$name = $_POST['name'];
$sport = $_POST['sport'];
$comment = $_POST['comment'];
$beoefenaar = $_POST['beoefenaar'];

//$name = mysql_real_escape($_POST['name']);
//$sport = mysql_real_escape($_POST['sport']);
//$comment = mysql_real_escape($_POST['comment']);
//$beoefenaar = mysql_real_escape($_POST['beoefenaar']);

$sql="INSERT INTO $tbl_name(Naam, Boodschap, Datum, Sport, Beoefenaar)VALUES('$name', '$comment', '$datetime', '$sport', '$beoefenaar')";
$result=mysql_query($sql);

//is de query succesvol geweest? 
if($result){
echo ('Succesvol');
echo "<BR>";

// link naar gastenboek
echo "<a href='viewguestbook.html'>Gastenboek bekijken</a>";
}

else {
echo ('Fout');
}
mysql_close();
?>


Guestbook (view):

HTML:
<!DOCTYPE html>
<html>
    
<head>
<title>Gastenbook bekijken</title>
</head>
    
<body>

<table width="400" border="0" align="center" cellpadding="3" cellspacing="0">
<tr>
<td><strong>Gastenboek | <a href="guestbook.html">Vul de gastenboek in</a> </strong></td>
</tr>
</table>
<br>

<?php

$host="localhost"; // Host-naam 
$username=""; // Mysql username 
$password=""; // Mysql wachtwoord 
$db="dBLOI.sql";
$db_name="dbloi"; // Database 
$tbl_name="dbloi"; // Tabel-naam 

// Verbinden met server en database selecteren
mysql_connect("$host", "$username", "$password")or die("Verbinden niet mogelijk"); 
mysql_select_db("$db_name","$db")or die("Database is niet geselecteerd");
$sql="SELECT * FROM $tbl_name";
$result=mysql_query($sql);

?>
    
<table width="400" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#CCCCCC">
<tr>

<?php
while($rows=mysql_fetch_array($result)){
?>

<td><table width="400" border="0" cellpadding="3" cellspacing="1" bgcolor="#FFFFFF">
<tr>
<td>ID</td>
<td>:</td>
<td><? echo $rows['id']; ?></td>
</tr>
<tr>
<td width="117">Naam</td>
<td width="14">:</td>
<td width="357"><? echo $rows['naam']; ?></td>
</tr>
<tr>
<td>Sport</td>
<td>:</td>
<td><? echo $rows['sport']; ?></td>
</tr>
<tr>
<td valign="top">Boodschap</td>
<td valign="top">:</td>
<td><? echo $rows['boodschap']; ?></td>
</tr>
<tr>
<td valign="top">Datum</td>
<td valign="top">:</td>
<td><? echo $rows['datetime']; ?></td>
</tr>
<tr>
<td valign="top">Beoefenaar</td>
<td valign="top">:</td>
<td><? echo $rows['beoefenaar']; ?></td>
</tr>
</table></td>

<?php
}
mysql_close(); //database sluiten
?>

</tr>
</table>
    
</body>

</html>
 
Laatst bewerkt:
Je moet verwijzen naar een aangemaakte database op je webhosting, en niet naar je .sql file.

Vraag anders je hostinghelpdesk als je niet weet hoe je daar jouw mysql-database moet aanmaken. Als dat gebeurd is, kan je via bijvoorbeeld phpMyAdmin je .sql-file uitvoeren en je database gebruiksklaar maken.

Let er wel op dat je oude functies van mysql_***() gebruikt. In de nieuwe PHP7 zullen die niet werken, en zal je site 'breken'. Het alternatief voor deze functies is mysqli.

Verder ben ik benieuwd waar je jouw script gevonden hebt, want er zit een flink veiligheidslek in voor SQL-injection en zelfs XSS, en alle mogelijke validaties missen.
 
Laatst bewerkt:
En, is het nog gelukt met de connectie?
 
Hi; ik heb eerder de database aangemaakt (met de tabel) via phpMyAdmin; vervolgens heb ik het geprobeerd te exporteren als .sql; de weergegeven code heb ik dan gekopieerd, geplakt in een nieuw bestand en opgeslagen als dBLOI.sql; ik neem dus aan dat ik geen fout zou moeten zien, maar dat fout blijft aanhouden.

Dit zijn de gegevens van de database:

ID (INT, AUTO_INCREMENT, PRIMARY KEY, NOT NULL)
Naam (50 karakters, NOT NULL)
Boodschap (TEKST, NOT NULL)
Datum (datetime)
Sport (30 karakters)
Beoefenaar (BOOLEAN, default FALSE)
 
Ik neem aan dat je bedoelt dat je de SQL-file geimporteerd hebt in phpMyAdmin.

Die SQL-file is verder niet nodig voor de werking van je script, zodra je de queries daarin uitgevoerd hebt.
Zorg dan ook dat je connectie in je script naar je database goed en correct zijn.
 
Je kan van een deelprobleem een klein te overzien scriptje maken in een apart bestand.
Code:
<?php
$link = mysqli_connect($host, $username, $password, $db_name);
if (!$link) {
  echo "Connectie mislukt." . PHP_EOL;
  echo "Foutmelding: " . mysqli_connect_errno() . PHP_EOL;
  exit;
}
echo "Connectie gelukt." . PHP_EOL;
echo "Informatie: " . mysqli_get_host_info($link) . PHP_EOL;
mysqli_close($link);
exit;
?>
Suc6. Have fun.
 
Hi Allemaal

Helaas nog dezelfde bericht ("Database is niet geselecteerd").
Als jullie dat zouden proberen met jullie computers, krijgen jullie hetzelfde fout te zien? Dit zijn de gegevens van de database:

ID (INT, AUTO_INCREMENT, PRIMARY KEY, NOT NULL)
Naam (50 karakters, NOT NULL)
Boodschap (TEKST, NOT NULL)
Datum (datetime)
Sport (30 karakters)
Beoefenaar (BOOLEAN, default FALSE)


De feedback van dit oefening is als volgt:

"De inhoud van het gastenboek moet worden getoond met het meest recente bericht bovenaan.
"Het ID van het bericht mag niet worden getoond.
"Nadat een item in het gastenboek is ingevoerd, moet dat direct worden getoond. Tip: zie http://php.net/manual/en/function.header.php.
"Voeg een tijdsaspect toe.
"Zorg voor foutafhandeling als de verbinding met de server of de database niet tot stand kan worden gebracht.
"Ingevoerde returns bij het invoeren van een bericht moeten ook als zodanig in het gastenboek op het scherm worden getoond.
"Als er nog geen berichten in het gastenboek staan, toon dan de melding "Er is nog geen bericht in het gastenboek geplaatst".


Ondertussen heb ik de gastenboek (html voornamelijk) aangepast:


HTML:
<!DOCTYPE html>
<html>
    
<head>
<title>Gastenbook</title>
</head>
    
<body>

    <table width="400" border="0" align="center" cellpadding="3" cellspacing="0">
        <tr>
            <td><strong>Vul de gastenboek in</strong></td>
        </tr>
    </table>

    <table width="400" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#CCCCCC">
        <tr>
            <form id="form1" name="form1" method="post" action="addguestbook.php">
                <td>
                    <table width="400" border="0" cellpadding="3" cellspacing="1" bgcolor="#FFFFFF">
                        <tr>
                            <td width="117"><label>Naam</label></td>
                            <td width="14">:</td>
                            <td width="357"><input name="name" type="text" id="name" size="40" required=""/></td>
                        </tr>
                        <tr>
                            <td><label>Sport</label></td>
                            <td>:</td>
                            <td>
                             <select required>
                                    <option value="">Kies een sport</option>  
                                    <option value="tennis">Tennis</option>
                                    <option value="voetbal">Voetbal</option>
                                    <option value="running">Running</option>
                                    <option value="tafeltennis">Tafeltennis</option>
                                    <option value="squash">Squash</option>
                                    <option value="wielrennen">Wielrennen</option>
                                    <option value="boksen">Boksen</option>
                             </select>
                            </td>
                        </tr>
                        <tr>
                            <td valign="top"><label>Boodschap</label></td>
                            <td valign="top">:</td>
                            <td><textarea name="comment" cols="40" rows="3" id="comment" required=""></textarea></td>
                        </tr>
                        <tr>
                            <td valign="top"><label>Beoefenaar</label></td>
                            <td valign="top">:</td>
                            <td>
                                <select name="beoefenaar">
                                    <option value="false" selected="selected">No</option>
                                    <option value="true">Yes</option>
                                </select>
                            </td>
                        </tr>
                        <tr>
                            <td>&nbsp;</td>
                            <td>&nbsp;</td>
                            <td><input type="submit" name="Submit" value="Submit" /> <input type="reset" name="Submit2" value="Reset" /></td>
                        </tr>
                    </table>
                </td>
            </form>
        </tr>
    </table>

    <table width="400" border="0" align="center" cellpadding="3" cellspacing="0">
        <tr>
            <td><strong><a href="viewguestbook.html">Gastenboek bekijken</a> </strong></td>
        </tr>
    </table>

</body>  

</html>
 
Aan de HTML zal het echt niet liggen. Maar wat heb je inmiddels al uitgevoerd aan stappen?

- Heb je via phpMyAdmin al een database aangemaakt?
- Heb je via phpMyAdmin in die database al je queries uitgevoerd door je *.sql bestand te importeren?
- Heb je al de juiste databasenaam en inloggegevens ingevoerd in de connectie? (en dus geen bestandsnaam van je .sql bestand)
- Hoe ziet je connectie er nu uit met de nodige gegevens?

Dus kan je deze vragen eerst eens doorlopen en beantwoorden?
Want voor nu is het koffiedik kijken wat je nou uitgevoerd hebt.
 
Laatst bewerkt:
1. en 2. Ja
(zie screenshots)

Schermafbeelding 2018-03-12 om 14.31.07.pngSchermafbeelding 2018-03-12 om 14.35.47.png

3. Ja

PHP:
$host="localhost:8889"; // Host-naam 
$username=""; // Mysql-username 
$password=""; // Mysql-wachtwoord 
$db="dBLOI";
$db_name="dBLOI"; // Database 
$tbl_name="dbloi"; // Tabel-naam 

// Verbinden met de server en database selecteren
mysql_connect("$host", "$username", "$password")or die('Verbinden niet mogelijk'); 
mysql_select_db("$db", "$db_name") or die('Database is niet geselecteerd');
echo "Foutmelding: " . mysqli_connect_errno() . PHP_EOL;
 
Ik zou om te beginnen eerst eens je username invoeren.
Verder voer je op de tweede screenshot de verkeerde dingen uit. Ik denkd at het wel logisch moet zijn dat je geen PHP-variabelen in phpMyAdmin kan verwerken.

Waar heb je dit gastenboek vandaan?
(EN ja, het is super oud en zeer onveilig!!!)
 
Laatst bewerkt:
Hi

Ik gebruik MAMP op mijn laptop voor dit oefening; ik gebruik dus geen username en password.
Wat suggereert je om te invoeren in de tweede screenshot? Dit gaat om een simpele php-oefening; dit zou uiteraard nooit gereleased worden op een echte website of webshop :)
 
Een query zonder variabelen. Of wou je letterlijk $naam in je database zetten?


Standaard zijn de inloggegevens vaak root met een blanko en leeg password.
 
Ik had de volgende queries al geprobeerd (zie screenshots):
Schermafbeelding 2018-03-12 om 15.20.08.png

Met 'root' en een blanco -en leeg- password krijg ik 'Verbinden niet mogelijk' te zien.
 
Dat is dan erg apart. Je zult toch echt een user moeten aanmaken.

Installeer anders het hele zwikkie eens opnieuw. En let goed op bij de vragen over gebruikersaccounts en root.
Kijk anders eens naar het script van @bron die hij hier gepost heeft. En kijk of die wel een connectie aanmaakt.
 
Laatst bewerkt:
Okay;

Dit stukje code is veranderd:

PHP:
$host="localhost:8889"; // Host-naam 
$username="root"; // Mysql-username 
$password="root"; // Mysql-wachtwoord 
$db="dBLOI";
$db_name="dBLOI"; // Database 
$tbl_name="dbloi"; // Tabel-naam

Nu krijg ik wel de melding 'Succesvol' :) maar als ik op 'Gastenboek bekijken' klikt, krijg ik niets te zien (de gastenboek is nog steeds leeg). Het bestand viewguestbook.html heb ik ook aangepast met dezelfde -bovenstaande- code om te garanderen dat het verbinden met de database zou lukken

Schermafbeelding 2018-03-12 om 15.37.22.png Schermafbeelding 2018-03-12 om 15.37.28.png

Dit is de bijgewerkte versie van het bestand die een tabel laat zien met alle 'entries' van het gastenboek. Wat zou -in dit bestand- nog misgaan? Is er een manier om alle 'entries' te ordenen van meest recent tot meest oud?

Code:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    
<head>
<title>Gastenbook bekijken</title>
</head>
    
<body>

<table width="400" border="0" align="center" cellpadding="3" cellspacing="0">
<tr>
<td><strong>Gastenboek | <a href="guestbook.html">Vul de gastenboek in</a> </strong></td>
</tr>
</table>
<br>

<?php

$host="localhost:8889"; // Host-naam 
$username="root"; // Mysql username 
$password="root"; // Mysql wachtwoord 
$db="dBLOI";
$db_name="dBLOI"; // Database 
$tbl_name="dbloi"; // Tabel-naam 

// Verbinden met server en database selecteren
mysql_connect("$host", "$username", "$password")or die('Verbinden niet mogelijk'); 
mysql_select_db("$db_name") or die('Database is niet geselecteerd');
$sql="SELECT * FROM $tbl_name";
$result=mysql_query($sql);

?>
    
<table width="400" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#CCCCCC">
<tr>

<?php
while($rows=mysql_fetch_array($result)){
?>

<td><table width="400" border="0" cellpadding="3" cellspacing="1" bgcolor="#FFFFFF">
<tr>
<td width="117">Naam</td>
<td width="14">:</td>
<td width="357"><?php echo ($rows["Naam"]); ?></td>
</tr>
<tr>
<td>Sport</td>
<td>:</td>
<td><?php echo ($rows["Sport"]); ?></td>
</tr>
<tr>
<td valign="top">Boodschap</td>
<td valign="top">:</td>
<td><?php echo ($rows["Boodschap"]); ?></td>
</tr>
<tr>
<td valign="top">Datum</td>
<td valign="top">:</td>
<td><?php echo ($rows["Datum"]); ?></td>
</tr>
<tr>
<td valign="top">Beoefenaar</td>
<td valign="top">:</td>
<td><?php echo ($rows["Beoefenaar"]); ?></td>
</tr>
</table></td>

<?php
}
mysql_close(); //database sluiten
?>

</tr>
</table>
    
</body>

</html>
 
Laatst bewerkt:
Moet het geen viewguestbook.php heten?

Kijk eens in de HTML-source, waarschijnlijk zie je daar PHP-code in staan, en dat is niet de bedoeling.
Verder mist er ook een mysql_error() bij je query. (waarom nog oude mysql-functies gebruiken i.p.v. mysqli???)
 
Laatst bewerkt:
Het klopt! Het is viewguestbook.php :s

Is er een manier te implementeren zodat alle tabelletjes onder elkaar staan en niet naast elkaar?, en is er ook een manier om alle tabelletjes (de meeste recent 'entry' als eerst)?

Nu ziet het er zo uit:
Schermafbeelding 2018-03-12 om 16.51.05.png
 
De vraag is of tabellen eigenlijk nog wel nodig zijn? met div-jes kan je prima je berichten in blokken verdelen.
Als ze naast elkaar staan, dan zal je tabelopzet ergens niet kloppen. Gooi de HTML-code eens door de validator .

Verder kan je met ORDER BY je volgorde instellen:
https://www.w3schools.com/sql/sql_orderby.asp
 
Maak een lege database "dBLOI" aan.
Voer deze iets gewijzigde sql uit.
Code:
-- Host: localhost:8889
-- PHP Version: 5.6.32
-- Note: Name of existing database is `dBLOI`

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";

--
-- Table structure for table `dbloi`
--

CREATE TABLE `dbloi` (
  `ID` int(11) NOT NULL,
  `Naam` varchar(50) NOT NULL,
  `Boodschap` text NOT NULL,
  `Datum` date NOT NULL,
  `Sport` varchar(30) NOT NULL,
  `Beoefenaar` tinyint(1) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Indexes for table `dbloi`
--

ALTER TABLE `dbloi` ADD PRIMARY KEY (`ID`);

--
-- AUTO_INCREMENT for table `dbloi`
--

ALTER TABLE `dbloi` MODIFY `ID` int(11) NOT NULL AUTO_INCREMENT;
De standaard MySQL poort is 3306.
Echter, bovenaan in jouw sql staat "Host: localhost:8889"

Ik gebruik MAMP op mijn laptop voor dit oefening; ik gebruik dus geen username en password
Dan zal de mysql username waarschijnlijk "root" zijn. Ik lees net ergens dat bij MAMP het wachtwoord van root standaard ook "root" is. Verander in het script van #6 deze regel:
Code:
$link = mysqli_connect("localhost", "root", "root", "dbloi", 8889);
 
Laatst bewerkt:
Vergeet dan niet dat je de rest van de mysql-functie ook moet omzetten naar mysqli.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan