Gå til innhold

Garanti's hjelpetråd til PHP


Anbefalte innlegg

Videoannonse
Annonse

Dersom noen kunne forklart meg følgende kodesnutt noe bedre enn det som står i kommentaren, hadde jeg blitt svært glad :)

Klikk for å se/fjerne innholdet nedenfor

<html>
<head>
</head>

<body>

<form name="form" action="searchscript.php" method="get">
 <input type="text" name="q" />
 <input type="submit" name="Submit" value="Search" />
</form>

<?php

 // Get the search variable from URL

 $var = @$_GET['q'] ;
 $trimmed = trim($var); //trim whitespace from the stored variable

// rows to return
$limit = 10; 

// check for an empty string and display a message.
if ($trimmed == "")
 {
 echo "<p>Please enter a search...</p>";
 exit;
 }

// check for a search parameter
if (!isset($var))
 {
 echo "<p>We dont seem to have a search parameter!</p>";
 exit;
 }

//connect to your database ** EDIT REQUIRED HERE **
mysql_connect("xxx","yyy","zzz"); //(host, username, password)

//specify database ** EDIT REQUIRED HERE **
mysql_select_db("ddd") or die("Unable to select database"); //select which database we're using

// Build SQL Query  
$query = "SELECT * FROM `sponsor` WHERE `checkSponsorChild` LIKE '%$trimmed%' ORDER BY `id`";  // EDIT HERE and specify your table and field names for the SQL query


$numresults = mysql_query($query);
$numrows = mysql_num_rows($numresults);

// If we have no results, offer a google search as an alternative

if ($numrows == 0)
 {
 echo "<h4>Results</h4>";
 echo "<p>Sorry, your search: "" . $trimmed . "" returned zero results</p>";

// google
echo "<p><a href=\"http://www.google.com/search?q="
 . $trimmed . "\" target=\"_blank\" title=\"Look up 
 " . $trimmed . " on Google\">Click here</a> to try the 
 search on google</p>";
 }

// next determine if s has been passed to script, if not use 0

if (empty($_GET['s'])){
 $s=0;
}else{
 $s = $_GET['s'];
}


// get results
 $query .= " LIMIT $s,$limit";
 $result = mysql_query($query) or die("Couldn't execute query");

// display what the person searched for
echo "<p>You searched for: "" . $var . ""</p>";

// begin to show results set
echo "Results";
$count = 1 + $s ;
$childrenInfo['childsName'] ."\r\n";
// now you can display the results returned
 while ($childrenInfo= mysql_fetch_array($result)) {
 $title = $childrenInfo['childsName'];

 echo "$count.) $title" ;
 $count++ ;
 }

$currPage = (($s/$limit) + 1);

//break before paging
 echo "<br />";

 // next we need to do the links to other results
 if ($s>=1) { // bypass PREV link if s is 0
 $prevs=($s-$limit);
 print " <a href=\"$PHP_SELF?s=$prevs&q=$var\">Previous</a>&nbsp ";
 }

// calculate number of pages needing links
 $pages=intval($numrows/$limit);

// $pages now contains int of pages needed unless there is a remainder from division if ($numrows%$limit) {
 // has remainder so add one page
 $pages++;
 }

// check to see if last page
 if (!((($s+$limit)/$limit)==$pages) && $pages!=1) {

 // not last page so give NEXT link
 $news=$s+$limit;

 echo " <a href=\"$PHP_SELF?s=$news&q=$var\">Next</a>";
 }

$a = $s + ($limit) ;
 if ($a > $numrows) { $a = $numrows ; }
 $b = $s + 1 ;
 echo "<p>Showing results $b to $a of $numrows</p>";

?>

</body>
</html>

Lenke til kommentar
Gjest Slettet+6132

trim() fjerner whitespace (mellomrom) på venstre og høyre side av det du angir, eksempelvis vil " lol " returnere "lol".

 

if ($trimmed == "") er skrevet på en dårlig måte, man bør heller bruke if (empty($trimmed)), funksjonen den har er å sjekke om $trimmed har en verdi.

 

if (!isset($var)) vil gi true om $var ikke er satt (utropstegnet foran isset() betyr not, altså if not isset, da vil ifen bli true om isset er false.

 

mysql_* er diverse funksjoner som kobler til database, velger database og henter ut data fra database.

 

$numrows = mysql_num_rows($numresults);

if ($numrows == 0)

Igjen litt dårlig skrevet, ifen burde inneholdt $numrows === 0 fordi mysql_num_rows() vil returnere en int-verdi, se her for mer info. Uansett, det koden gjør er å sjekke hvor mange søkeresultater du fikk fra databasen, og deretter skrive ut en tekst om det er null resultater.

 

Mer enn det gidder jeg ikke å forklare, enten får noen andre fortsette, eller så kan jeg foreslå at du faktisk begynner å bruke manualen litt, den er veldig nyttig, og om man kombinerer den med kommentarene er det ofte lettere å forstå. Ta for deg scriptsnutter som denne, åpne www.php.net, og hver gang du kommer over en funksjon du ikke kjenner til søker du den opp øverst til høyre på php.net, og så leser du hva den gjør. Man lærer ikke så mye av å få alt på sølvfat ;)

 

Redigert: Forresten, ikke bruk

 på PHP-kode, bruk [color="#000000"][[/color][color="#000000"]code[/color][color="#000000"]][/color] til det, syntax highlight blir forferdelig feil om du bruker [sql].
[code]<?php
echo 'Mye penere!';
?>[/code]

Endret av Slettet+6132
Lenke til kommentar

Haha, jeg takker svært mye! Når det gjelder det med at jeg ikke forstod oppsettet mente jeg ikke at jeg ikke forstod bruken av funksjonene for seg selv, men selve skriptet i sin helhet. Fant det uansett ut etterhvert. Det var blandt annet denne snutten jeg ikke forstod vitsen med:

if (empty($_GET['s'])){
$s=0;
}else{
$s = $_GET['s'];
}

 

Takk for at du gadd å svare uansett!

Lenke til kommentar
  • 2 uker senere...

Fra PHP-pub'en:

Hei! Jeg bare lurer på hva som er vanlig å ha i header.php, jeg har noen server/database-connect-script, men er litt usikker på hva man f.eks skal gjøre når man vil legge til stylesheets osv. Skal jeg skrive include("style.css") eller

echo "<link rel=\"stylesheet\" href=\"style.css\" />";? Hva skal jeg gjøre for å legge til html-tager? echo "<html>"; ?

Hvilke andre ting can jeg definere i header() enn Location: og Content-Type:?

Lenke til kommentar
Gjest Slettet+142

På denne siden finnes det en liste som dokumenterer hvilke headers og hva de brukes til du også kan bruke i header().

 

Det andre du snakker om. Du kan skrive vanlig HTML-kode i en .php-fil om det var det du mente, du må ikke bruke php til å skrive det ut.

<?php

// Headers, dbconnect, loggføring(?)

?>
<!DOCTYPE ...>
<html>
<head>
<link rel="stylesheet" href="style.css" type="text/css" />
<?php echo '<link rel="stylesheet" href="'.$dynamisk_stylesheet_filnavn.'" type="text/css" />'; ?>
</head>
<body>
<?php echo "Innhold :D"; ?>
</body>
</html>

 

Håper jeg svarte noenlunde hva du lurte på, skjønt eikke helt :p

Lenke til kommentar

Ja, du svarte forsåvidt på spørsmålet mitt, men jeg lurte på om det var vanlig å inkludere HTML-tag'er i header.php, noe det ser et som om det ikke er. Takk for svar :)

Forresten, jeg har et problem med at alle hermetegn jeg skriver inn blir skrevet som \", noen som vet hva jeg skal gjøre med det?

Endret av Garanti
Lenke til kommentar

Så jeg kan skrive

echo string . 'tekst med "hermetegn"';

Og escape ' dersom jeg behøver det:

echo string . 'tekst med "hermetegn" og \'apostrof\'';

Problemet oppstår som regel i strenger med input, så det er kanskje greit å replace tegnet met en HTML-entity?

Lenke til kommentar
Gjest Slettet+6132

Brukerinput skal som regel alltid escapes, ta en titt på funksjoner som addslashes() og stripslashes(). htmlspecialchars() er også greit å kjøre på brukerinput som skal vises på siden :)

Lenke til kommentar

Hk. Hva er galt med denne funksjonen?

function preparestring($string){
$NorCharFind = array("æ", "Æ", "ø", "Ø", "å", "Å");
$NorCharRepl = array("æ", "Æ", "ø", "Ø", "å", "Å");
$string = str_replace($NorCharFind, $NorCharRepl, $string);
addslashes($string);
}

preparestring($Header);

Lenke til kommentar
Gjest Slettet+6132

Legg til en return $string; nederst i funksjonen din ;)

 

PS: I arrayene dine kan du godt bruke ' istedenfor ", da slipper PHP å lete etter variabler.

 

Redigert: Og for å teste funksjonen må du da bruke echo preparestring($header);

Endret av Slettet+6132
Lenke til kommentar

Mkay, men hvorfor virker ikke denne?:

$test = 'qwertyu""iopåasdfghjkløæ\nzxcvbnm';

function preparestring($string){
$NorCharFind = array('æ', 'Æ', 'ø', 'Ø', 'å', 'Å');
$NorCharRepl = array('æ', 'Æ', 'ø', 'Ø', 'å', 'Å');
$string = str_replace($NorCharFind, $NorCharRepl, $string);
addslashes($string);
nl2br($string);
return $string;
}

echo preparestring($test);

Lenke til kommentar
Gjest Slettet+6132

Du må lære deg å bruke PHPs dokumentasjon bedre, gutt.

 

$string = addslashes($string);

$string = nl2br($string);

 

PS: Når du ikke får koden til å fungere er det greit om du poster resultatet, eller eventuelle feilmeldinger. Koden bør nå printe ut qwertyu\"\"iopåasdfghjkløæ<br/>zxcvbnm.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...