php / sql probleem

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Reshad F

Reshad F

02/11/2011 11:46:45
Quote Anchor link
Hallo ik ben een beginende php programmeur en ik kom ergens niet uit ik hoop dat jullie mij kunnen helpen.

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)
PHP script in nieuw venster Selecteer het PHP script
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
<?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

?>


het stuk waar het om gaat is vanaf regel 40 trouwens

alvast bedankt!
Gewijzigd op 02/11/2011 11:49:08 door Reshad F
 
PHP hulp

PHP hulp

08/11/2024 15:43:10
 
Jasper DS

Jasper DS

02/11/2011 12:38:30
Quote Anchor link
- foutafhandeling bij de query's ontbrekeken (GEEN OR DIE)
- 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
 
- SanThe -

- SanThe -

02/11/2011 12:50:02
Quote Anchor link
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 ...).
 
Reshad F

Reshad F

02/11/2011 14:25:40
Quote Anchor link
@jasper het probleem is dat als ik een auto al gereserveerd heb dat ik deze niet nog een keer kan reserveren tussen de opgegeven data, de data daar heb ik met javascript een kalender mee gemaakt waar je data mee kan selecteren en nu heb ik zoals @santhe gezegd heeft de Datum in de database in DATE gezet maar dan krijg ik alleen 0000-00-00 bij elke datum. voorheen had ik het in varchar maar dit pakt hij dus niet volgens mij

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
 
- SanThe -

- SanThe -

02/11/2011 14:45:07
Quote Anchor link
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?


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.
 
Reshad F

Reshad F

02/11/2011 14:49:35
Quote Anchor link
@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?
 
- SanThe -

- SanThe -

02/11/2011 14:51:34
Quote Anchor link
Volgens mij is daar een php function voor, maar zeker weten doe ik dat niet.
 
Jelle -

Jelle -

02/11/2011 15:19:00
Quote Anchor link
Je zou zoiets kunnen proberen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
 $db_date
= date('Y-m-d',strtotime($jedatum));
?>


Weet niet zeker of het werkt, zul je even moeten testen
Gewijzigd op 02/11/2011 15:19:16 door Jelle -
 
- SanThe -

- SanThe -

02/11/2011 15:27:15
Quote Anchor link
@Smurf: Getest en die werkt niet.

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
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

02/11/2011 15:40:16
Quote Anchor link
Vanaf PHP 5.3 heb je date_create_from_format
Maar je kan het gewoon in de sql oplossen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
STR_TO_DATE('02-11-2011', '%m-%d-%Y')

zie hier
 
- SanThe -

- SanThe -

02/11/2011 15:45:16
Quote Anchor link
@Ger: Netjes, die kende ik nog niet.
Gewijzigd op 02/11/2011 15:45:31 door - SanThe -
 
Reshad F

Reshad F

09/11/2011 10:13:35
Quote Anchor link
@ger je bent een held! maar nu had ik nog een klein vraagje STR_TO_DATE('02-11-2011', '%m-%d-%Y') is volgens mij wel goed maar moet ik de datum niet veranderen in $datum1 o.i.d?

bedankt

Toevoeging op 09/11/2011 10:47:48:
Gewijzigd op 09/11/2011 11:14:51 door Reshad F
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

09/11/2011 13:24:31
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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'))"
?>

stukje uit een werkend script
 
Reshad F

Reshad F

09/11/2011 14:04:25
Quote Anchor link
@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.
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

09/11/2011 14:30:30
Quote Anchor link
de insert doe je hetzelfde als de select
dus:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$sql
= "INSERT INTO reservations SET (room_id, begin_date, end_date)
VALUES ("
.$room_id.", STR_TO_DATE('".$begin_date."', %d-%m-%Y),
STR_TO_DATE('"
.$end_date."', %d-%m-%Y))";
?>
 
Reshad F

Reshad F

09/11/2011 15:13:43
Quote Anchor link
ik heb gedaan wat je zei, alleen krijg ik dit

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)
PHP script in nieuw venster Selecteer het PHP script
1
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());

?>
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

09/11/2011 16:02:18
Quote Anchor link
nee hoor, mijn excuus %d-%m-%Y moet tussen single quotes(')
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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());

?>
 
Reshad F

Reshad F

10/11/2011 09:17:23
Quote Anchor link
ik krijg nu

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
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 'STR_TO_DATE('12-11-2011', '%d-%m-%Y'))' at line 1
?>
Gewijzigd op 10/11/2011 09:17:44 door Reshad F
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

10/11/2011 10:07:50
Quote Anchor link
je mist een komma tussen de eerste en tweede STR_TO_DATE
 
Reshad F

Reshad F

10/11/2011 10:15:53
Quote Anchor link
@ger je bent een held! ik heb zolang geprobeerd dit op te lossen maar er stond niks duidelijks op internet:p
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.