php / sql probleem
ik moet een auto reserverings programma maken waarbij je de auto kan reserveren
dit heb ik gedaan maar nu krijg ik het niet voor elkaar om aan de gebruiker te laten zien of de auto op de datum waarop hij de auto wil reserveren al bezet is of niet bezet is. ik zal hieronder wat code posten met wat ik tot nu toe heb.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
<?php include("connect.php");
$autonaam = $_POST['soort'];
$begindate = $_POST['begindate'];
$einddate = $_POST['einddate'];
//show reeds gereserveerd
$result = mysql_query("SELECT * FROM reserveringen ORDER BY begindate");
echo "<table border='1'>
<tr>
<th>Type</th>
<th>Model</th>
<th>Van</th>
<th>Tot</th>
</tr>";
while($row = mysql_fetch_array($result))
{
echo "<tr>";
echo "<td>" . $row['autonaam'] . "</td>";
echo "<td>" . $row['model'] . "</td>";
echo "<td>" . $row['begindate'] . "</td>";
echo "<td>" . $row['einddate'] . "</td>";
echo "</tr>";
}
echo "</table>";
// reservering
if (isset($_POST['verder'])) {
$autonaam = $_POST['soort'];
$model = $_POST['model'];
$automaat = $_POST['automaat'];
$begindate = $_POST['datum1'];
$einddate = $_POST['datum2'];
// dit moet erin geprogrammeerd worden WHERE auto_id == auto_ID van het scherm && ( $begindate BETWEEN Begindate && Einddate uit de table || einddatum BETWEEN begindatum && eindatum uit de DB
$sql = "SELECT * FROM reserveringen WHERE begindate BETWEEN begindate AND einddate OR einddate BETWEEN begindate AND einddate " ;
$result = mysql_query($sql);
if(mysql_num_rows($result) > 0){
echo "de auto is niet beschikbaar op deze datum";
}
else {
{ $insert = mysql_query("INSERT INTO reserveringen (auto_id, autonaam, automaat, model, begindate, einddate) VALUES ('', '$autonaam', '$automaat', '$model', '$begindate', '$einddate') ") or die (mysql_error());
echo "uw reservering is geplaatst";
$id++;
}
}
}
// einde reservering
?>
$autonaam = $_POST['soort'];
$begindate = $_POST['begindate'];
$einddate = $_POST['einddate'];
//show reeds gereserveerd
$result = mysql_query("SELECT * FROM reserveringen ORDER BY begindate");
echo "<table border='1'>
<tr>
<th>Type</th>
<th>Model</th>
<th>Van</th>
<th>Tot</th>
</tr>";
while($row = mysql_fetch_array($result))
{
echo "<tr>";
echo "<td>" . $row['autonaam'] . "</td>";
echo "<td>" . $row['model'] . "</td>";
echo "<td>" . $row['begindate'] . "</td>";
echo "<td>" . $row['einddate'] . "</td>";
echo "</tr>";
}
echo "</table>";
// reservering
if (isset($_POST['verder'])) {
$autonaam = $_POST['soort'];
$model = $_POST['model'];
$automaat = $_POST['automaat'];
$begindate = $_POST['datum1'];
$einddate = $_POST['datum2'];
// dit moet erin geprogrammeerd worden WHERE auto_id == auto_ID van het scherm && ( $begindate BETWEEN Begindate && Einddate uit de table || einddatum BETWEEN begindatum && eindatum uit de DB
$sql = "SELECT * FROM reserveringen WHERE begindate BETWEEN begindate AND einddate OR einddate BETWEEN begindate AND einddate " ;
$result = mysql_query($sql);
if(mysql_num_rows($result) > 0){
echo "de auto is niet beschikbaar op deze datum";
}
else {
{ $insert = mysql_query("INSERT INTO reserveringen (auto_id, autonaam, automaat, model, begindate, einddate) VALUES ('', '$autonaam', '$automaat', '$model', '$begindate', '$einddate') ") or die (mysql_error());
echo "uw reservering is geplaatst";
$id++;
}
}
}
// einde reservering
?>
het stuk waar het om gaat is vanaf regel 40 trouwens
alvast bedankt!
Gewijzigd op 02/11/2011 11:49:08 door Reshad F
- gebruik beter _fetch_assoc dan fetch_array
- het is aangeraden om voor php enkele quotes te gebruiken en voor html dubbele: echo '<input type="text" name="naam"/>';
- vars MOETEN ALTIJD buiten quotes: '.$var'. of ".$var."
- geen onnodige vars aanmaken.
- geen wildcard gebruiken (*).
En wat is het probleem nu net? Je wilt de reservatie laten zien aan de gebruiker? Wat lukt er niet?
Gewijzigd op 02/11/2011 12:41:15 door Jasper DS
Aanvulling op Jasper: Het script is lek => sql-injection. Zie daarvoor mysql_real_escape_string(). Zijn de datums in de database wel in het juiste format (DATA of DATETIME)? Bij het gebruik van AND en OR altijd haakjes gebruiken. (... AND ...) OR ... is heel wat anders dan ... AND (... OR ...).
probleem is dus het lukt niet om aan de gebruiker te laten zien dat de auto al gereserveerd is als die al gereserveerd is.
@santhe hoe bedoel je dat met die haakjes? van AND en OR?
Gewijzigd op 02/11/2011 14:33:23 door Reshad F
Reshadd farid op 02/11/2011 14:25:40:
.. Datum in de database in DATE gezet maar dan krijg ik alleen 0000-00-00 bij elke datum.
@santhe hoe bedoel je dat met die haakjes? van AND en OR?
@santhe hoe bedoel je dat met die haakjes? van AND en OR?
Dan geef je de datum niet in het juiste (YYYYMMDD) format aan de database.
Zoals ik al zei:
(... AND ...) OR ...
is heel wat anders dan
... AND (... OR ...)
maar zeker niet zo doen
... AND ... OR ...
want dan krijg je onverwachte resultaten.
@santhe hoe geef ik de datum dan aan de database in de juiste format? want nu heb ik inderdaad ddmmyyyy terwijl het omgekeerd moet zijn moet dit met iets van CONVERT(data_type(length),data_to_be_converted,style) en waar moet ik dit dan in zetten?
Volgens mij is daar een php function voor, maar zeker weten doe ik dat niet.
Weet niet zeker of het werkt, zul je even moeten testen
Gewijzigd op 02/11/2011 15:19:16 door Jelle -
Toevoeging op 02/11/2011 15:35:13:
Als je php version 5.3 of hoger hebt is er deze function.
http://nl2.php.net/manual/en/datetime.createfromformat.php
Gewijzigd op 02/11/2011 15:45:31 door - SanThe -
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
$sql = "SELECT room_id FROM reservations
WHERE room_id =" . $room_id .
" AND (begin_date BETWEEN STR_TO_DATE('".$begin_date."', '%d-%m-%Y') AND
STR_TO_DATE('".$end_date."', '%d-%m-%Y') OR end_date BETWEEN
STR_TO_DATE('".$begin_date."', '%d-%m-%Y') AND
STR_TO_DATE('".$end_date."', '%d-%m-%Y'))"
?>
$sql = "SELECT room_id FROM reservations
WHERE room_id =" . $room_id .
" AND (begin_date BETWEEN STR_TO_DATE('".$begin_date."', '%d-%m-%Y') AND
STR_TO_DATE('".$end_date."', '%d-%m-%Y') OR end_date BETWEEN
STR_TO_DATE('".$begin_date."', '%d-%m-%Y') AND
STR_TO_DATE('".$end_date."', '%d-%m-%Y'))"
?>
stukje uit een werkend script
@ger ah thankss dit had ik ook nodig maar het prob was dat het formulier wat ik op de pagina heb staan de datum in een tekstvak komt als d-m-y en dit kan sql niet verwerken omdat het y-m-d moet zijn dus hoe convert ik dat zo? mijn leraar zegt gebruik 3 aparte tekstvakjes en dat kan je dan als date wegschrijven in de database maar ik heb een kalender met Javascript gemaakt waar je de datum kan selecteren en deze automatisch als d-m-y in het tekstvakje komt en als ik dat niet zou doen zou de klant de datum handmatig moeten invullen en dat vind ik weer niet gebruiksvriendelijk.
dus:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '%d-%m-%Y) STR_TO_DATE(''%d-%m-%Y))' at line 1
komt dit door mijn xampp die ik gebruik?
mijn code ziet er zo uit
Code (php)
1
2
3
4
5
2
3
4
5
<?php
$insert = mysql_query("INSERT INTO reserveringen (auto_id, autonaam, automaat, model, begindate, einddate) VALUES ('', '$autonaam', '$automaat', '$model', STR_TO_DATE('".$begindate."', %d-%m-%Y) STR_TO_DATE('".$einddate."'%d-%m-%Y)) ") or die (mysql_error());
?>
$insert = mysql_query("INSERT INTO reserveringen (auto_id, autonaam, automaat, model, begindate, einddate) VALUES ('', '$autonaam', '$automaat', '$model', STR_TO_DATE('".$begindate."', %d-%m-%Y) STR_TO_DATE('".$einddate."'%d-%m-%Y)) ") or die (mysql_error());
?>
Code (php)
1
2
3
4
5
2
3
4
5
<?php
$insert = mysql_query("INSERT INTO reserveringen (auto_id, autonaam, automaat, model, begindate, einddate) VALUES ('', '$autonaam', '$automaat', '$model', STR_TO_DATE('".$begindate."', '%d-%m-%Y') STR_TO_DATE('".$einddate."', '%d-%m-%Y')) ") or die (mysql_error());
?>
$insert = mysql_query("INSERT INTO reserveringen (auto_id, autonaam, automaat, model, begindate, einddate) VALUES ('', '$autonaam', '$automaat', '$model', STR_TO_DATE('".$begindate."', '%d-%m-%Y') STR_TO_DATE('".$einddate."', '%d-%m-%Y')) ") or die (mysql_error());
?>
je mist een komma tussen de eerste en tweede STR_TO_DATE
@ger je bent een held! ik heb zolang geprobeerd dit op te lossen maar er stond niks duidelijks op internet:p