Gå til innhold

Garanti's hjelpetråd til PHP


Anbefalte innlegg

Videoannonse
Annonse

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.

Lenke til kommentar

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 :)

Lenke til kommentar

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
}
?>

Lenke til kommentar

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
Lenke til kommentar

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.";
}
}

Lenke til kommentar

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
Lenke til kommentar

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
Lenke til kommentar

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
Lenke til kommentar

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
Lenke til kommentar

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
Lenke til kommentar

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