Toon posts:

[PHP] Record opvragen via where query met tekstveld

Pagina: 1
Acties:
  • 99 views sinds 30-01-2008

Verwijderd

Topicstarter
Hallo, ik wil de openingstijden van 1 bedrijf kunnen opvragen dmv een tekst veld.

Mijn query:

code:
1
$strSql ="select * from rds_bd_bedrijven where BD_naam = '$bedrijf'";


Mijn invoerveld:
PHP:
1
print <input type='text' value='$bedrijf'>;


Het uitlezen werkt gewoon goed zonder het invoer tekstveld, maar hij keurt de regel hierboven af met de melding:

code:
1
Parse error: parse error, unexpected '<' in E:\onlineorders.nl\wwwroot\opvragen_openingstijden.php on line 25


Ziet iemand het probleem?

Alvast bedankt.

Verwijderd

Verwijderd schreef op maandag 25 december 2006 @ 12:57:


code:
1
$strSql ="select * from rds_bd_bedrijven WHERE `BD_naam` = '$bedrijf'";


Mijn invoerveld:
PHP:
1
print '<input type="text" value="' . $bedrijf . '" name="???">';

Verwijderd

Quotes om je print statement zetten? Let ook op je security, en er zitten volgens mij nog wel meer problemen in (input veld zonder naam, etc.) tenzij je dat verkeerd hebt overgetypt...

  • JvdM
  • Registratie: April 2004
  • Laatst online: 01-12 16:47

JvdM

<---->

PHP:
1
2
3
<?php 
echo  "<input type='text'name='tekstveld' value='$bedrijf'>"; 
?>


zo?

[ Voor 9% gewijzigd door JvdM op 25-12-2006 13:00 ]


  • frickY
  • Registratie: Juli 2001
  • Laatst online: 13:38
Vergeet mysql_real_escape_string() niet om je variabele te zetten in de query, om SQL Injection te voorkomen (boeit je nu misschien nog niet zoveer, maar het kan niet vaak genoeg gezegd worden).

  • B-Man
  • Registratie: Februari 2000
  • Niet online
Je tekstveld wordt op deze manier niet doorgegeven aan PHP op een manier die uit te lezen is. Je moet de name attribute op het form field instellen.

Aangezien je in je SQL statement werkt met $bedrijf, kun je je form field name="bedrijf" meegeven.

Je krijgt dan zoiets:
PHP:
1
$sql = sprintf( 'select * from xyz where bedrijf="%s"', mysql_real_escape_string( $_POST['bedrijf'] ) );

Verwijderd

Verwijderd schreef op maandag 25 december 2006 @ 12:57:
Hallo, ik wil de openingstijden van 1 bedrijf kunnen opvragen dmv een tekst veld.

Mijn query:

code:
1
2
$bedrijf = addslashes($_POST['bedrijf']);
$strSql ="SELECT * FROM rds_bd_bedrijven WHERE BD_naam = '".$bedrijf."' LIMIT 1";

Uitleg:
Alles wat je invult in de databases moet je behandelen met addslashes. Dit voor veiligheid (google > sql injection)
Vervolgens de query, met de variable tussen ". en ." . Dit is gezien als de _goede_ manier van een variable in een string te zetten. Dus dit aanleren!
Vervolgens zie je een LIMIT 1. Dit is voor snelheid. Al zet je er niet LIMIT 1 achter, gaat hij je hele database onderzoeken voor een bedrijf met die naam. Met LIMIT 1 stopt hij zodra hij de eerste heeft gevonden.
(en voortaan het sql in hoofdletters, dit leest makkelijker)

Mijn invoerveld:
PHP:
1
echo '<input type='text' name="bedrijf">';

Uitleg:
Dit is standaart HTML, dit kan je zo van w3schools oid halen. Ik raad je aan eerst html te leren voordat je aan PHP begint.


Ziet iemand het probleem?

Alvast bedankt.
Een makkelijk voorbeeld hierboven weergegeven.
Overgens graag je hele script posten. Als je dit fout hebt zal je gehele script een zooitje zijn. Nee, niet erg :), maar ik denk dat de tweaker je wel wil helpen je script te redden van XSS.

(XSS = Cross Side Scripting. Dat mensen je site overhoop kunnen halen, hou het daar maar op)

[ Voor 31% gewijzigd door Verwijderd op 25-12-2006 13:17 ]


Verwijderd

Topicstarter
Een gedeetle van mijn code is nu dit:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
mysql_select_db("rds_onlineorders") or die ("Kon geen verbinding maken met database"); // Database selecteren
$strSql ="select * from rds_bd_bedrijven where BD_naam = '$bedrijf'"; // SQL query 
$strResultaat = mysql_query($strSql); // Aangeven dat strsql een SQL query is

 
echo  "<input type='text'name='tekstveld' value='$bedrijf'>";  

If(!isset($_POST['submit']){    
    
        print("<input type='submit' name='submit' value='$strResultaat'>\n"); 
        }

while($row = mysql_fetch_array($strResultaat)) { // Tonen van de query op het scherm.


Uiteraard moet er nog een button worden gelinkt aan het invoer veld en de query, hij geeft nu dit aan:

Parse error: parse error, unexpected '{' in E:\onlineorders.nl\wwwroot\opvragen_openingstijden.php on line 28

Verwijderd

Zoals php zegt is waarschijnelijk een acolade ( } ) teveel gepost.
Zet eens je hele script online. Zoals het er nu uit ziet en als dit alles zou zijn zitten er tig fouten in.

Er zitten btw ook fouten in als een ) te weinig in je isset check.

[ Voor 16% gewijzigd door Verwijderd op 25-12-2006 13:20 ]


Verwijderd

Verwijderd schreef op maandag 25 december 2006 @ 13:17:
Een gedeetle van mijn code is nu dit:
[...]
Parse error: parse error, unexpected '{' in E:\onlineorders.nl\wwwroot\opvragen_openingstijden.php on line 28
Let gewoon eens op wat je schrijft. Dit zijn echt makkelijk te vinden problemen. Je 'if' statement heeft niet genoeg sluit-haakjes!

Overigens, post aub je hele script, want een fout in regel 28 die er hier niet is is niet echt handig om te helpen...

(edit: en ga niet uit dat je post/get variablen automagisch naar normale variablen omgezet worden want al heel lange tijd staat deze functionaliteit standaard uit in PHP (wegens security).)

[ Voor 15% gewijzigd door Verwijderd op 25-12-2006 13:29 ]


Verwijderd

Topicstarter
Mijn gehele script dan maar:

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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
<?php

//----------------------------------------------------
// Datum            : 2006-10-30
// Versie           : 1.0
// Opmerkingen      : Geen
// Datum            : 2006-10-30
//----------------------------------------------------

Require_once("libs/RDS_SP_specific_lib.php");  // Ophalen van de library
SP_DataConn();                                 // Database connectie maken

print("<a href=invoeren_bedrijf.php>Voeg een nieuw bedrijf toe!</a>");  // Link om een nieuw product toe te voegen
print("<br>"); 
print("<br>"); 

mysql_select_db("rds_onlineorders") or die ("Kon geen verbinding maken met database"); // Database selecteren
$strSql ="select * from rds_bd_bedrijven where BD_naam = '$bedrijf'"; // SQL query 
$strResultaat = mysql_query($strSql); // Aangeven dat strsql een SQL query is

 
echo  "<input type='text'name='tekstveld' value='$bedrijf'>";  

If(!isset($_POST['submit']){    
    
        print("<input type='submit' name='submit' value='$strResultaat'>\n"); 
        }

while($row = mysql_fetch_array($strResultaat)) { // Tonen van de query op het scherm.



print ("<table border='1'>");
print ("<tr> 
             <td>".$row['BD_id']."</td> 
             <td>".$row['BD_naam']."</td>
             <td>&nbsp;</td>
             <td>(Open)</td>
             <td>&nbsp;</td>
             <td>(Dicht)</td>
        </tr>
        <tr>
             <td></td>
             <td></td> 
             <td>Openingstijd Maandag</td> 
             <td>".$row['BD_open_maandag']."</td>
             <td>TOT</td>
             <td>".$row['BD_dicht_maandag']."</td>
        </tr>
        <tr>
            <td></td>
            <td></td>  
             <td>Openingstijd Dinsdag</td> 
             <td>".$row['BD_open_dinsdag']."</td>
             <td>TOT</td>
             <td>".$row['BD_dicht_dinsdag']."</td>
        </tr>
        <tr>
            <td></td>
            <td></td>  
             <td>Openingstijd Woensdag</td> 
             <td>".$row['BD_open_woensdag']."</td>
             <td>TOT</td>
             <td>".$row['BD_dicht_woensdag']."</td>
        </tr>
        <tr>
            <td></td>
            <td></td>  
             <td>Openingstijd Donderdag</td> 
             <td>".$row['BD_open_donderdag']."</td>
             <td>TOT</td>
             <td>".$row['BD_dicht_donderdag']."</td>
        </tr>
        <tr>
            <td></td>
            <td></td>  
             <td>Openingstijd Vrijdag</td> 
             <td>".$row['BD_open_vrijdag']."</td>
             <td>TOT</td>
             <td>".$row['BD_dicht_vrijdag']."</td>
        </tr>
        <tr>
            <td></td>
            <td></td>  
             <td>Openingstijd Zaterdag</td> 
             <td>".$row['BD_open_zaterdag']."</td>
             <td>TOT</td>
             <td>".$row['BD_dicht_zaterdag']."</td>
        </tr>
        <tr>
            <td></td>
            <td></td>  
             <td>Openingstijd Zondag</td> 
             <td>".$row['BD_open_zondag']."</td>
             <td>TOT</td>
             <td>".$row['BD_dicht_zondag']."</td>
        </tr>
        
        
        "); // Aanmaken kolomnamen

} 

print("</table>");

exit();

?>

[ Voor 0% gewijzigd door NMe op 28-05-2014 16:00 ]


  • MrNGm
  • Registratie: Augustus 2004
  • Laatst online: 05-11 16:22
If(!isset($_POST['submit']){

Nooit last van wiskunde gehad? Als je daar een haakje mist kan de hele som verkeerd gaan. Even goed kijken, diep inademen tot 10 tellen en oplossen...

Verwijderd

MrNGm schreef op maandag 25 december 2006 @ 18:38:

Nooit last van wiskunde gehad? Als je daar een haakje mist kan de hele som verkeerd gaan. Even goed kijken, diep inademen tot 10 tellen en oplossen...
Parse errors zijn overigens altijd prima zelf op te lossen, zeker als je een beetje een fatsoenlijke editor gebruikt, waarbij de matching braces gehighlight kunnen worden.

  • Mafkees
  • Registratie: Oktober 2003
  • Niet online
Maar dan nog .. als je een parse error ziet kun je hem makkelijk zelf oplossen, gewoon de code goed controleren. Imo is een parse error niet iets om door GoT te laten oplossen. Highlights is meer een vorm van voorkomen omdat je de fouten dan niet zo snel maakt.

  • Tanuki
  • Registratie: Januari 2005
  • Niet online
En ik zou ook eens iets over database normalisatie gaan lezen, "BD_open_..." en "BD_dicht_..." zijn niet bepaald voorbeelden van een goed opgezette database.

PV: Growatt MOD5000TL3-XH + 5720wp, WPB: Atlantic Explorer v4 270LC, L/L: MHI SCM 125ZM-S + SRK 50ZS-W + 2x SRK 25ZS-W + SRK 20ZS-W Modbus kWh meter nodig?


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 18:25

Creepy

Tactical Espionage Splatterer

MrNGm schreef op maandag 25 december 2006 @ 18:38:
If(!isset($_POST['submit']){

Nooit last van wiskunde gehad? Als je daar een haakje mist kan de hele som verkeerd gaan. Even goed kijken, diep inademen tot 10 tellen en oplossen...
Dit wil ik even onderstrepen.

We verwachten hier van je dat je in eerste instantie zelf aan de slag gaat. Een parse error is een fout die met simpele checks vrij snel te zien is. Ja, je kan er overheen kijken, maar dat is nog geen reden om je script maar te dumpen hier en te verwachten dat wij het voor je gaan oplossen.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney

Pagina: 1

Dit topic is gesloten.