Zoekveld werkt niet goed in PHP i.c.m. MySQL

Status
Niet open voor verdere reacties.

Janzzen

Gebruiker
Lid geworden
8 feb 2011
Berichten
11
Hallo,

Ik ben al enige tijd bezig met MySQL en PHP en ik kom nu een probleem tegen waar ik geen antwoord op kan vinden. Ik zal proberen zo helder mogelijk uit te leggen wat er aan de hand is.

Ik heb een MySQL-database met één tabel die bestaat uit een aantal velden. Op mijn website heb ik een zoekformulier gemaakt waarmee gezocht kan worden in de database. Om precies te zijn in één veld en exact het woord wat ingevoerd wordt. Wildcards zijn niet mogelijk.

Behalve dat de pagina op de website staat, wil ik graag ook dat applicaties de pagina direct kunnen oproepen. Dus zoiets als: www.domein.nl/zoeken.php?zoekveld=Roland

Dit laatste krijg ik echter niet voor elkaar.

Nu heb ik een PHP-pagina met code die goed lijkt te werken. Echter, PHP en MySQL zijn voor mij nieuw en hoewel het script wel werkt, ziet het er (denk ik) niet al te florissant uit. Verbeteringen en aanvullingen zijn dan ook van harte welkom.

Het script waar het om gaat:

Code:
<?php
include 'connectie.php';

if(isset($_POST['submit'])){ 
    $select = "SELECT * FROM Zendamateurs WHERE Callsign ='".$_POST['zoekveld']."'"; 
    $sql = mysql_query($select) or die (mysql_error()); 
 
    $aantal = mysql_num_rows($sql); 
     
    if(!$aantal > 0){ 
?>        
<br />
<font face="Verdana" size="2"><b>

<?php
echo "Deze callsign staat (nog) niet in de database.";
?>

</b></font> 
<?php

    } else { 
 
        while($row = mysql_fetch_assoc($sql)){

?>


<br />
<table border="1" width="500" id="table2" cellspacing="1" style="border-collapse: collapse">
	<tr>
		<td width="152"><font face="Verdana" size="2"><b>Callsign</b></font></td>
		<td><font face="Verdana" size="2"><?php echo $row['Callsign']; ?></font></td>
	</tr>
	<tr>
		<td width="152"><font face="Verdana" size="2"><b>Voornaam</b></font></td>
		<td><font face="Verdana" size="2"><?php echo $row['Voornaam']; ?></font></td>
	</tr>
	<tr>
		<td width="152"><font face="Verdana" size="2"><b>E-mail</b></font></td>
		<td><font face="Verdana" size="2"><?php echo $row['Email']; ?></font></td>
	</tr>
	<tr>
		<td width="152"><font face="Verdana" size="2"><b>Website</b></font></td>
		<td><font face="Verdana" size="2"><?php echo $row['Website']; ?></font></td>
	</tr>
	<tr>
		<td width="152"><font face="Verdana" size="2"><b>Packet</b></font></td>
		<td><font face="Verdana" size="2"><?php echo $row['Packet']; ?></font></td>
	</tr>
	<tr>
		<td width="152"><font face="Verdana" size="2"><b>Locator</b></font></td>
		<td><font face="Verdana" size="2"><?php echo $row['Locator']; ?></font></td>
	</tr>
	<tr>
		<td width="152"><font face="Verdana" size="2"><b>Regio</b></font></td>
		<td><font face="Verdana" size="2"><?php echo $row['Regio']; ?></font></td>
	</tr>
	<tr>
		<td width="152"><font face="Verdana" size="2"><b>Opmerkingen</b></font></td>
		<td><font face="Verdana" size="2"><?php echo $row['Opmerkingen']; ?></font></td>
	</tr>
</table>

<?php

        } 
    } 
} else { 
    echo "<form action='".$_SERVER['PHP_SELF']."' method='post'>"; 
    echo "<input type='text' name='zoekveld'>"; 
    echo "<input type='submit' name='submit' value='Zoeken'>"; 
    echo "</form>"; 
} 
?>

Wat moet er nu gebeuren om dit 'www.domein.nl/zoeken.php?zoekveld=Roland' te laten werken?

Ik heb geen flauw idee, ik hoop dat iemand me kan helpen.

Roland.
 
waarom maar op een veld en niet meerderen velden of eerste 3 letters
ik heb tijdje bezig gehouden met een zoek script deze heb ik werkend gekregen
en kan al op nr en op 1 leter zoeken op meerdere velden
bij iets exacte gedtaileerde in voer bij zoeken wordt resoltaat al stuk fijner
 
ik weet niet of je in tresse in heb in het geheel het script van mijn
laat maar weten zal ik van middag wel ff posten
en een mooie test pagina waar bij je kunt izen hoe in zijn geheel er uit ziet
 
Hallo Ciske :)

Dank voor je reactie.
In verband met privacy en om te voorkomen dat er bulk-zoekopdrachten worden gegeven, mag er alleen worden gezocht op één veld.
Dat veld moet exact het woord bevatten wat er gezocht wordt, wildcards zijn uitgesloten.
Dit werkt inmiddels al, dus dat is het probleem niet.

Het probleem is wel dat een directe aanvraag niet werkt.
Zoeken kan op de site, maar er wordt een applicatie geschreven die graag op deze manier de data wil zien: 'www.domein.nl/zoeken.php?zoekveld=Callsign'
Juist dit werkt niet en ik snap niet waarom...

Roland
 
ik zal eens kijken bij mijn ik op alleen niet op ftp lol zal dan ff het sript zo zetten dat kunt kijken hoe bij mijn werk
en ik zal script compleet posten
 
De reden dat je waarschijnlijk geen directe reactie krijgt is omdat je script werkt met $_POST, maar $_POST wordt alleen ingevuld als je een formulier instuurt. Als je "zoekveld=iets" opneemt in de URL komt dit terecht in de variabele $_GET.

Wat je beste kunt doen is zoiets:

PHP:
// bepaal de zoekterm
if ( isset( $_POST['zoekveld'] ) ) {
  $zoekveld = $_POST['zoekveld'];
}
elseif ( isset ( $_GET['zoekveld'] ) ) {
  $zoekveld = $_GET['zoekveld'];
}

Daarna moet je dus controleren of je moet gaan zoeken of nog niet door te kijken of $zoekveld bestaat, en niet of $_POST['submit'] bestaat, want die zal er niet zijn als de gebruiker via de url zoekt.

EDIT: en dus $zoekveld gebruiken in je query en overal waar je hem nodig hebt.
 
Hallo Frats :)

Ik heb je code even geprobeerd, maar ik krijg nu niets anders dan foutmeldingen :(
Ik ben absoluut geen expert in dit soort dingen, 'k begin net met dit soort scriptjes.
Wellicht kun je aangeven wat er nog meer moet worden veranderd in mijn opgegeven script.
Volgens mij moet het niet moeilijk zijn, maar wat ik ook probeer, ik heb het nog steeds niet voor elkaar gekregen.

In elk geval bedankt voor je reactie!

Roland.
 
Wat voor foutmeldingen krijg je? Dat helpt vaak een hoop als je dat aangeeft ;)

Waarschijnlijk heb je de code op de verkeerde plek gezet en/of niet de dingen weggehaald die je niet meer nodig hebt.
 
Ik krijg OF een witte pagina (in feite ook een foutmelding, maar 'k weet niet hoe ik deze moet laten weergeven).

OF ik krijg te zien (met welke zoekopdracht dan ook) dat het gegeven zoekwoord niet in de database voorkomt (terwijl ik zeker weet van wel)

OF ik krijg te zien dat er een { op de verkeerde plek staat. (unexpected { at line 38 ofzo). Als ik deze weghaal, dan komt er geheid een foutmelding zoals hierboven beschreven :d

Zo vallen we dus van het één in het ander :(

Roland.
 
Laatst bewerkt:
Zet bovenaan eens:

PHP:
<?php error_reporting( E_ALL ); ?>

Dan krijg je als het goed is álle fouten te zien.
 
Het zal best werken dat regeltje, maar niet bij mij :)
Ik blijf een witte pagina houden.

'k Zet even het script hier even neer wat ik nu heb:

Code:
<?php
include 'connectie.php';


if ( isset( $_POST['zoekveld'] ) ) {
  $zoekveld = $_POST['zoekveld'];
}
elseif ( isset ( $_GET['zoekveld'] ) ) {
  $zoekveld = $_GET['zoekveld'];

    $select = "SELECT * FROM Zendamateurs WHERE Callsign ='".$_POST['zoekveld']."'"; 
    $sql = mysql_query($select) or die (mysql_error()); 
    $aantal = mysql_num_rows($sql); 
     
    if(!$aantal > 0){ 
        echo "Deze callsign staan (nog) niet in de database."; 
    } else { 
        echo "Er is ".$aantal." callsign gevonden."; 
 
        while($row = mysql_fetch_assoc($sql)){
?>

<br /><br />
<CALLSIGN><?php echo $row['Callsign']; ?></CALLSIGN> <br />
<VOORNAAM><?php echo $row['Voornaam']; ?></VOORNAAM> <br />
<E-MAIL><?php echo $row['Email']; ?></E-MAIL> <br />
<HOMEPAGE><?php echo $row['Website']; ?></HOMEPAGE> <br />
<OPMERKINGEN><?php echo $row['Opmerkingen']; ?></OPMERKINGEN> <br />
<PACKET><?php echo $row['Packet']; ?></PACKET> <br />
<LOCATOR><?php echo $row['Locator']; ?></LOCATOR> <br />
<REGIO><?php echo $row['Regio']; ?></REGIO> <br />

<?php

        } 
    } 
} else { 
    echo "<form action='".$_SERVER['PHP_SELF']."' method='post'>"; 
    echo "<input type='text' name='zoekveld'>"; 
    echo "<input type='submit' name='submit' value='zoeken'>"; 
    echo "</form>"; 
} 
?>

Hiermee krijg ik dus een witte pagina.
Ook 'zoeken.php?zoekveld=roland' werkt nog steeds niet.
Ik krijg dan te zien: 'Deze callsign staan (nog) niet in de database.', een regel die in het script staat maar kennelijk niet goed verwerkt wordt op één of andere manier.

Roland.
 
beste ronald

beste ronald

als je wil kan mijn script wel ff posten is voor mijn geen enkele moeite kun je deze des noods verder uit werken naar je zin
 
Ja, is goed, mag ook via een PM als dat lukt.
Ik krijg het écht niet voor elkaar, mijn kennis is nog te beperkt.
Alle hulp is welkom.
 
Hoi Ciske,

Op de een of andere manier kan ik je geen PM-mail sturen, dus dan maar zo.
heb het script even bekeken en wellicht zitten er mogelijkheden in.
't Zal nog wel enige tijd kosten voordat ik dit een beetje door heb, maar 'k ga m'n best doen.
Hartelijk dank voor je moeite!

Roland.
 
pm ronald zijn allleen voor betaalde leden
zo als je gezien heb op mijn site over zelfde zoek script heb ik flink hard aan gepakt
als je nog vragen hebe hoor ik het graag
 
Momenteel dit script in gebruik:

Code:
<?php
include 'connectie.php';

if ( isset ( $_GET['zoekveld'] ) ) {
  $zoekveld = $_GET['zoekveld'];

    $select = "SELECT * FROM Zendamateurs WHERE Callsign ='".$_GET['zoekveld']."'"; 
    $sql = mysql_query($select) or die (mysql_error()); 
     
    if(!$aantal > 0){ 
        echo "Deze callsign staan (nog) niet in de database."; 
    } else { 
        echo "Er is ".$aantal." callsign gevonden."; 
 
        while($row = mysql_fetch_assoc($sql)){
?>

<br /><br />
<CALLSIGN><?php echo $row['Callsign']; ?></CALLSIGN> <br />
<VOORNAAM><?php echo $row['Voornaam']; ?></VOORNAAM> <br />
<E-MAIL><?php echo $row['Email']; ?></E-MAIL> <br />
<HOMEPAGE><?php echo $row['Website']; ?></HOMEPAGE> <br />
<OPMERKINGEN><?php echo $row['Opmerkingen']; ?></OPMERKINGEN> <br />
<PACKET><?php echo $row['Packet']; ?></PACKET> <br />
<LOCATOR><?php echo $row['Locator']; ?></LOCATOR> <br />
<REGIO><?php echo $row['Regio']; ?></REGIO> <br />

<?php

        } 
    } 
} else { 
    echo "<form action='".$_SERVER['PHP_SELF']."' method='post'>"; 
    echo "<input type='text' name='zoekveld'>"; 
    echo "<input type='submit' name='submit' value='zoeken'>"; 
    echo "</form>"; 
} 
?>

<?php error_reporting( E_ALL ); ?>

Maar werken ho maar.

Inmiddels ben ik al zover gefrustreerd dat ik me alleen nog maar wil inzetten op het gebruik van een variabele in de URL. Dus: www.domein.nl/search.php?zoekveld=roepnaam'. De output moet het liefst wel zo blijven zoals deze in de code vermeld staat, die wordt namelijk uitgelezen voor een applicatie die die termen weer filtert. Layout van de HTML-file maakt niet uit, die wordt dus niet gezien door iemand.

Helaas werkt bovenstaande niet.
Kan iemand me op weg helpen om dit script werkend te krijgen?

Roland.
 
ronald als je mijn kan vertellen waarop hij precies moet zoeken welk veld
en wat hij moet laten zien uit data base kijk ik ff voor je
 
Eindelijk gelukt met het volgende script:

Code:
<?php
include 'connectie.php';

if ( isset ( $_GET['zoekveld'] ) ) {
  $zoekveld = $_GET['zoekveld'];

    $select = "SELECT * FROM Zendamateurs WHERE Callsign ='".$_GET['zoekveld']."'"; 
    $sql = mysql_query($select) or die (mysql_error()); 
     
     
    while($row = mysql_fetch_assoc($sql)){
?>
<CALLSIGN><?php echo $row['Callsign']; ?></CALLSIGN> <br />
<VOORNAAM><?php echo $row['Voornaam']; ?></VOORNAAM> <br />
<E-MAIL><?php echo $row['Email']; ?></E-MAIL> <br />
<HOMEPAGE><?php echo $row['Website']; ?></HOMEPAGE> <br />
<OPMERKINGEN><?php echo $row['Opmerkingen']; ?></OPMERKINGEN> <br />
<PACKET><?php echo $row['Packet']; ?></PACKET> <br />
<LOCATOR><?php echo $row['Locator']; ?></LOCATOR> <br />
<REGIO><?php echo $row['Regio']; ?></REGIO> <br />

<?php
    } 
} 
?>

Tja, simpel, maar doeltreffend.
Er kan nu vanuit het URL worden gezocht en daar ging het om :):)

Roland.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan