Simpel PHP scriptje werkt niet... help aub!

Status
Niet open voor verdere reacties.

Acario

Gebruiker
Lid geworden
28 jul 2010
Berichten
5
Ik heb de volgende code voor een php woordenboek applicatie:

main.php:


PHP:
<html>
<body>
<?php
        include("connect.php");

        if ($do_this=="searchform"):
        echo "<form action=\"$PHP_SELF?do_this=result\" method=\"post\" >word :&nbsp;<input type=\"text\" name=\"word\" size=30 style='$glossary_input_style'>
      <br><input type=\"submit\" value=\"search\"></form>";
        exit;
        else :

        echo "<a href=\"main.php?do_this=searchform\">Search Form</a>";
        //je dient dus op deze link te klikken, zodat het geheel erboven wordt geladen... althans, dat is de bedoeling...
        endif;
?>
</html>
</body>

Onderin wordt do_this=searchform meegegeven, en dan zou als het goed is weer hetzelfde .php bestand (main.php) moeten worden geladen, maar om de één of andere reden pikt de if($do_this=="searchform") dit niet op.

Weet iemand misschien waarom dit niet gebeurt? Volgens mij klopt die echo helemaal onderin niet helemaal...
 
get data

de $do_this variabele bestaat nog niet als hij aan de if komt ( en is dus zeker nog geen searchform
Wat jij wil doen is de get data ( de data achter het ? ) controleren

het moet dus iets zijn als :
PHP:
if ($GET[do_this]=="searchform"):
         // toon formulier 
   else :
       // toon link
 
     endif;
 
Het eerste wat i zie is at je aan het einde van

if ($do_this=="searchform"): sluit met een dubbele punt ':' dit moet een punt komma zijn ';'

en hoezo laat je bij de action van de form iets aan de url meesturen, de form post de gegevens al
en probeer eens

if($_GET['do_this']=="seachform");

Maar in je script doet deze if statment nix!
 
probeer dit eens
PHP:
<?php
        include("connect.php");
 
        if ($_GET['do_this']=="searchform"){
        echo "<form action=\"$PHP_SELF?do_this=result\" method=\"post\" >word :&nbsp;<input type=\"text\" name=\"word\" size=30 style='$glossary_input_style'>
      <br><input type=\"submit\" value=\"search\"></form>";
}        else{
 
        echo "<a href=\"main.php?do_this=searchform\">Search Form</a>";
        //je dient dus op deze link te klikken, zodat het geheel erboven wordt geladen... althans, dat is de bedoeling...
}
?>
 
Laatst bewerkt:
Jongens, ontzettend bedankt!!! Het zat 'm inderdaad in de if-statement, dit moest een $_GET['do_this'] zijn.

De search form werkt nu gelukkig.

Er is echter één ding dat niet helemaal werkt... :confused: Als ik in het zoekveld een bepaald woord opgeef, dan zou onder result deze variabele genaamd $word in de database moeten worden gezocht met de LIKE functie, helaas krijg ik 0 resultaten terug... als ik daartegen %$word% gebruik, dan krijg ik alles als resultaat terug.

PHP:
<html>
<body>
<?php
       include("connect.php");

        if ($_GET['do_this']=="searchform"):
        echo "
<form action=\"$PHP_SELF?do_this=result\" method=\"post\"> Geef Woord:&nbsp;
<input type=\"text\" name=\"word\" size=30 style='$glossary_input_style'>
<input type=\"submit\" value=\"search\">
</form> ";
        exit;

        elseif ($_GET['do_this']=="result"):
                $result = mysql_query("SELECT * FROM $glossary_table WHERE word LIKE '$word' OR definition LIKE '$word' ");
                if ( mysql_num_rows($result) == 0 ):
                        echo "No result for <b>($word) </b>in the glossary" ;
                        mysql_close($link);
                        exit ;
                endif;
                echo "Search result (<b>",mysql_num_rows($result),"</b>): <table   style='$glossary_table_style' ><tr style='$glossary_header_style'><td>$feild1name</td><td>$feild2name</td></tr>";
                while ($row = mysql_fetch_array($result,MYSQL_NUM)) {
                echo "<tr><td style='$glossary_word_style' >$row[1]</td><td style='$glossary_definition_style'> $row[2]</td></tr>";
                }
                echo "</table>";
                mysql_close($link);
               exit;

        else : echo "<a href=\"main.php?do_this=searchform\">Search Form</a> ";

endif;
?>
</html>
</body>

Het is de bedoeling dat het woord dat ik opgeef in het zoekveld, in de tabel ($glossary_table) wordt opgezocht in de 'word' kolom of 'definition' kolom, en alle matches worden geretourneerd....

Kan iemand me alsjeblieft nog met dit laatste probleem helpen? Dan ben ik er zo'n beetje wel klaar mee, bij voorbaat dank! :thumb::thumb:
 
Laatst bewerkt:
Als $word van je formulier afkomt (dat gebruik maakt van 'method="post"'), moet je $_POST['word'] gebruiken (evt. met de procent-tekens, afhankelijk van wat je precies wilt).
 
Het lijkt erop dat dit script gebruik maakt(e) van de bijzonder onveilige, altijd al afgeraden en tegenwoordig zelfs simpelweg geblokkeerde register_globals methode.

Dat zegt veel over de kwaliteit en de veiligheid van het script...
 
Even een vraagje tussendoor, het woordenboek script werkt nu prima, en ik heb zelfs een x aantal woorden in de database gestopt, dat is verder ook allemaal prima gegaan, woorden opzoeken, vertalingen weergeven, alles lukt.

Alleen sommige woorden bevatten de letters ş en ğ, het inserten en weergeven van deze woorden in phpmyadmin gaat prima, echter als ik de daadwerkelijke website open, krijg ik allerlei vraagtekens te zien op de plekken waar deze leters horen voor te komen...

Ik heb de character-encoding zowel in de database alsmede in de head van mijn website op utf-8 gezet, maar dat heeft niet geholpen... Heeft iemand enig idee hoe ik dit kan oplossen?
 
de $do_this variabele bestaat nog niet als hij aan de if komt ( en is dus zeker nog geen searchform
Wat jij wil doen is de get data ( de data achter het ? ) controleren

het moet dus iets zijn als :
PHP:
if ($GET[do_this]=="searchform"):
         // toon formulier 
   else :
       // toon link
 
     endif;

Als er geen "$GET['do_this']" bestaat (of die in de link staat) dan krijg een Php error.

Ik zou ook kunnen kijken of "$GET['do_this']" wel bestaat.
Dat kun je als volgt doen;
PHP:
if(isset($_GET['do_this'])):
        // Dit word gedaan als die bestaat.
else:
      // En dit word gedaan als die niet bestaat.
endif;
Dit is meer mijn manier van ifjes;
PHP:
if(isset($_GET['do_this'])){
        // Dit word gedaan als die bestaat.
}else{
      // En dit word gedaan als die niet bestaat.
}




Remi1995
 
voor mensen die het niet gewoon zijn er wordt post en get door elkaar gebruikt
ik dacht dat $PHP_SELF depricated was
Mijn veranderingen
PHP:
<html>
<body>
<?php
       include("connect.php");
 
        if ($_GET['do_this']=="searchform"):
 ?>
<form action="<?php print $_SERVER["PHP_SELF"]  ?>?do_this=result" method="post"> Geef Woord:&nbsp;
<input type="text" name="word" size=30 style='<?php print $glossary_input_style ?>'>
<input type="submit" value="search">
</form>
<?php
        exit;
 
        elseif ($_GET['do_this']=="result"):
                $result = mysql_query("SELECT * FROM $glossary_table WHERE word LIKE '$word' OR definition LIKE '$word' ");
                if ( mysql_num_rows($result) == 0 ):
                        echo "No result for <b>($word) </b>in the glossary" ;
                        mysql_close($link);
                        exit ;
                endif;
                echo "Search result (<b>",mysql_num_rows($result),"</b>): <table   style='$glossary_table_style' ><tr style='$glossary_header_style'><td>$feild1name</td><td>$feild2name</td></tr>";
                while ($row = mysql_fetch_array($result,MYSQL_NUM)) {
                echo "<tr><td style='$glossary_word_style' >$row[1]</td><td style='$glossary_definition_style'> $row[2]</td></tr>";
                }
                echo "</table>";
                mysql_close($link);
               exit;
 
        else : echo "<a href=\"main.php?do_this=searchform\">Search Form</a> ";
 
endif;
?>
</html>
</body>
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan