Gå til innhold

Garanti's hjelpetråd til PHP


Anbefalte innlegg

Gjest Slettet+142
Skrevet

\\ Linje 24 er nok feilen. kommentarer markeres med // ;)

Videoannonse
Annonse
Skrevet

Hei igjen!

Jeg har to filer:

data.php (side som tar imot og viser data fra brukeren(e))

process.php (side som behandler data og skriver de til en tekstfil)

 

Problemet er at når jeg skriver inn informasjon i data.php og trykker på submit-knappen, sendes jeg til process.php. For å gjøre det litt enklere å komme tilbake til data.php har jeg lagt inn en link til den siden, men jeg skulle hatt en bedre måte å gjøre det på, f.eks. at jeg ble sendt direkte tilbake til data.php når den hadde oppdatert tekstfilen.

Skrevet

Du kan gjøre en av følgende:

1) inkludere process.php i data.php om noe skal prosesseres

if(isset($_POST['navn_på_felt_fra_form'])){include 'process.php';}

 

2) bruke header("Location: data.php"); i process.php

Skrevet

Funket med alternativ 2, men ikke med alternativ 1.

 

Skrev jeg det rett?:

if(isset($_POST['news']['author']['header']['truncate'])){include 'process.php';}

Skrevet

Nei, det ble ikke riktig.

if(isset($_POST['news'])){include 'process.php';}

 

Du den gjør er å se om variabelen $_POST['news'] er satt, noe den er om den kommer fra HTML-skjemaet ditt. Den skal jo kun laste process.php om du har sendt data (med $_POST) til data.php :)

Skrevet

Aha, så for flere variabler må en skrive

if(isset($_POST['var1'])){include 'process.php';}

if(isset($_POST['var2'])){include 'process.php';}

if(isset($_POST['var3'])){include 'process.php';}

 

Takk!

Skrevet

Nei, den over vil inkludere process.php tre ganger, fordi den vil returnere TRUE på alle de if-sjekkene.

 

Du kan kjøre flere sjekker i en if-setning, om du vil sjekke om alle variablene er satt. Eksempel:

<?php
if(isset($_POST['news']) && strlen($_POST['news'] > 20) && isset($_POST['author']) && $_POST['author'] == 'ditt brukernavn'){
	#alt det over er TRUE
	#her kan du inkludere process.php
}else{
	#if-sjekken returnerte feil
}
?>

Skrevet (endret)

Har nå begynt med mySQL, sliter med et script som tar imot og leser informasjonen fra tabell:

 

Glem denne, jeg droppet dette scriptet uansett

 

 

get.php

<?PHP
if(isset($_POST['ShowName']) && isset($_POST['Genre']) && isset($_POST['Seasons']) && isset($_POST['Episodes'])){
include("insertdata_table.php");
}
else{
echo "Feil";}
?>

<center>
<p>
<fieldset style=" width: 600px;">
<legend>add movie to database</legend>
<form action="insertdata_table.php" method="post">
ShowName: <input type="text" size="10" maxlength="20" name="ShowName">
Genre: <input type="text" size="10" maxlength="20" name="Genre">
Seasons: <input type="text" size="10" maxlength="40" name="Seasons">
Episodes: <input type="text" size="10" maxlength="40" name="Episodes">
<p><input type="submit" value="Submit"></p>
</form>
</fieldset>
</p>
<p>
<?PHP
include("show.php");
?>
</p>
</center>

 

insertdata_table.php

<?php
include("get.php");
mysql_connect("localhost", "root", "sofa") or die(mysql_error());
mysql_select_db("televisionshowdatabase") or die(mysql_error());

$rawShowName = $_POST['ShowName'];
$rawGenre = $_POST['Genre'];
$rawSeasons = $_POST['Seasons'];
$rawEpisodes = $_POST['Episodes'];

$ShowName = htmlentities($rawShowName, ENT_NOQUOTES, "UTF-8"); 
$Genre = htmlentities($rawGenre, ENT_NOQUOTES, "UTF-8"); 
$Seasons = htmlentities($rawSeasons, ENT_NOQUOTES, "UTF-8"); 
$Episodes = htmlentities($rawEpisodes, ENT_NOQUOTES, "UTF-8"); 

mysql_query("INSERT INTO shows 
(ShowName, Genre, Seasons, Episodes) VALUES
	('$ShowName', '$Genre', '$Seasons', '$Episodes') ") or die(mysql_error());  

?>

 

show.php

<?PHP

mysql_connect("localhost", "root", "sofa") or die(mysql_error());
mysql_select_db("televisionshowdatabase") or die(mysql_error());

$query = "SELECT * FROM shows"; 

$result = mysql_query($query) or die(mysql_error());
$th = "</td><td>";

echo "<table border='5'>";
echo "<tr><th>ShowName</th><th>Genre</th><th>Seasons</th><th>Episodes</th></tr>";
while($row = mysql_fetch_array($result)){
echo "<tr><td>";
echo $row['ShowName'] . $th. $row['Genre'] . $th. $row['Seasons'] . $th . $row['Episodes'];
}

echo "<td /><tr /></table>";

?>

 

Vet at selve koden fungerer nogenlunde ok, men jeg får timeout i browseren når jeg la til

if(isset($_POST['ShowName']) && isset($_POST['Genre']) && isset($_POST['Seasons']) && isset($_POST['Episodes'])){
include("insertdata_table.php");
}
else{
echo "Feil";}

i stedet for bare [include("insertdata_table.php");] i begynnelsen av get.php.

 

Hvordan fikser jeg dette?

Endret av Garanti
Skrevet

Noen som vet hvordan man kan søker gjennom en mySQL-table? Ved oppretting av en bruker skal jeg sjekke om brukernavnet allerede ikke er tatt, returnere tekst dersom den eksisterer, eller skrive brukeren inn i tablen dersom brukernavnet ikke eksisterer.

 

Prøvde meg fram med denne originalkoden

<?
$query = "SELECT * FROM table WHERE somefield like '%$userInput%'";
$result = mysql_query($query);
$num_rows = mysql_num_rows($result);
if($num_rows == 0) {
echo "No results<BR>n";
} else {
while($row = mysql_fetch_array($result)) {
echo "{$row['somefield']}<BR>n";
}
}
?>

 

Mitt forsøk:

$result = mysql_query("SELECT * FROM users WHERE UserName like '$UserName'");
$num_rows = mysql_num_rows($result);

if($num_rows == 0) {	
 mysql_query("INSERT INTO users 
(UserName, PassWord) VALUES('$UserName', '$PassWord') ") or die(mysql_error());

} else {
while($row = mysql_fetch_array($result)) {
  echo "Username is taken.";
}
}

Skrevet

Får du noen feilmelding når du prøver koden?, kan ikke se noe galt, uten om hva du egentlig skal med denne linjen

 

while($row = mysql_fetch_array($result)) {

 

Du henter jo ikke info fra den

Skrevet (endret)

Fikk hjelp på irc-kanalen irc.enterthegame.com#php, men ble bannet fordi jeg postet for mye kode :(

 

Uansett, nå sjekker scriptet om brukernavnet finnes. Problemet nå er at passord og brukernavn ikke blir lagret i tabellen i databasen, alt jeg får er whitespace: :S

 

Fra phpMyAdmin

162341.jpeg

 

<?php
// Make a MySQL Connection
mysql_connect("localhost", "test", "test1") or die(mysql_error());
mysql_select_db("cee") or die(mysql_error());

$rawUserName = $_POST['UserName'];
$rawPassWord = $_POST['PassWord'];

$rawUserName = htmlentities($UserName, ENT_NOQUOTES, "UTF-8"); 
$rawPassWord = htmlentities($PassWord, ENT_NOQUOTES,"UTF-8"); 


$result = mysql_query("SELECT * FROM users WHERE UserName='$UserName'");
if (!$result) {
echo "Username is takin";
}
else {
 mysql_query("INSERT INTO users 
(UserName, PassWord) VALUES('$UserName', '$PassWord') ") or die(mysql_error());  
}

?>

Endret av Garanti
Gjest Slettet+142
Skrevet

Ville heller skrevet if( mysql_num_rows($result) > 0 ) istedenfor if(!$result).

Skrevet (endret)

Vel, i denne databasen hverken vil eller bør det være to brukere med samme navn :)

 

EDIT:

Nå får jeg endelig opprettet nye brukere, ved å ta bort funksjonen som sjekker om brukernavnet finnes i databasen fra før, og funksjonen som tar bort html-kode.

 

EDIT2:

Da var alt ordnet :)

Endret av Garanti
Skrevet (endret)

Hmm, har problemer med preg_match, skulle gjerne inkludert æ, ø og å:

$UserName = mysql_escape_string($_POST['UserName']);
$PassWord = mysql_escape_string($_POST['PassWord']);

if (!preg_match('#^[a-z0-9_oa]{1,12}$#iu', $UserName)) {
exit;
echo "Username contained unsupported characters";
} else {
$result = mysql_query("SELECT * FROM `users` WHERE `UserName`='".$UserName."'",$link);
if (mysql_num_rows($result) > 0) { 
echo "Username is in use, choose another";
} 
else 
{
mysql_query("INSERT INTO `users` (`UserName`, `PassWord`) VALUES ('".$UserName."', '".$PassWord."')", $link);
echo 'User created!';
}}

Endret av Garanti
Skrevet

preg_match støtter vel æ,ø,å såvidt jeg husker.

// prøv dette
if (!preg_match('#^[a-å+0-9_oa]{1,12}$#iu', $UserName))
// eventuelt dette
if (!preg_match("/^[a-å+0-9]*$/i", $UserName))

Skrevet (endret)

Jeg er sikker på at det støtter æ, ø og å, men jeg får det ikke til.

<?php
$link = mysql_connect("localhost:3306", "test", "test1") or die(mysql_error());
mysql_select_db("cee",$link) or die(mysql_error());


$UserName = mysql_escape_string($_POST['UserName']);
$PassWord = mysql_escape_string($_POST['PassWord']);

if (preg_match("/^[a-zæøå0-9 ]+$/i", $UserName)) { /* Legg til æøå og " "! */

$result = mysql_query("SELECT * FROM `users` WHERE `UserName`='".$UserName."'",$link);
if (mysql_num_rows($result) > 0) { 
	echo "Username is taken, choose another";
	} 
else 
	{
	mysql_query("INSERT INTO `users` (`UserName`, `PassWord`) VALUES ('".$UserName."', '".$PassWord."')", $link);
	echo 'User created!';
	}
} 
else
{
echo "Username contained unsupported characters";
exit;
}
?>

 

Dersom noen kunne forklart meg hvordan man setter opp preg_match hadde jeg blitt veldig glad! Dokumentasjonen hos php.net er for vanskelig og for lang, og de eksempelene jeg finner f.eks. her, funker ikke.

Endret av Garanti
Skrevet (endret)

Fikk endelig fikset det, har holdt i hele dag for å få det til :)

if (preg_match('/^[a-zæøåØÆÅ0-9 ]{8,30}+$/iu', $UserName) && preg_match('/^[a-zæøåØÆÅ0-9 ]{8,30}+$/iu', $PassWord)){

$result = mysql_query("SELECT * FROM `users` WHERE `UserName`='".$UserName."'",$link);
	if (mysql_num_rows($result) > 0) { 
		echo "Username is taken, choose another";
		} 
	else 
		{
		mysql_query("INSERT INTO `users` (`UserName`, `PassWord`) VALUES ('".$UserName."', '".$PassWord."')", $link);
		echo 'User created!';
		}
}
else{
echo "Username and/or password contained unsupported characters, and/or it's too long or too short. Please try again.";
}

 

Nå er problemet mitt at dersom brukerene som blir opprettet har brukernavn eller passord som inneholder æøå, blir det seende slik ut:

163074.jpeg

Hva skal jeg gjøre?

Endret av Garanti
Skrevet (endret)

Så lenge du har med "echo '<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />';" i dokumentene dine så burde det ikke være noe stress.

 

Det du ser i phpadmin kommer av at phpadmin ikke er kompatibel med utf-8, men det går bra når du henter det ut.

 

EDIT : Et bra tips, bruk md5 på passordene dine. Sikkerhet.

Endret av Hjelpphp

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