Gå til innhold

Hente ut $_POST info fra loop


Anbefalte innlegg

Skrevet (endret)

Heisann. Jeg lager et testscript på pure f. I scriptet skal man skrive inn Navn, URL, velge kategori og en beskrivelse. Hele scriptet fungerer i samkjør med en database og kategoriene hentes ut derfra. Når jeg har fylt ut feltene og valgt kateogri ble kategori-raden blank i databasen.

 

Tror feilen ligger i denne delen av scriptet:

 

if(!isset($_POST['add']))
		{
			echo "<table width='29%' border='0' align='center' >";
            echo "<tr>";
			echo $text;
            echo "<td width='20%' height='25'>";
            echo "<form action='".$_SERVER['self']."' method='post'>";
            echo "Name: </td><td width='70%'><input type='text' size='45' name='name' value='" . $_SESSION['name'] . "'></td>";
            echo "</tr>";
            echo "<tr>";
            echo "<td width='20%' height='25'>";
            echo "URL: </td><td width='70%'><input type='text' size='45' name='url' value='" . $_SESSION['url'] . "'></td>";
            echo "</tr>";
			echo "<tr>";
			echo "<td width='20%' height='25'>";
			echo "Kategori: </td><td width='70%'>";
			// Find all categoryeis
			$catf = "SELECT cat_name, cat_id FROM cat ORDER BY cat_id DESC";
			$catfind = mysql_query($catf) or die(mysql_error());
			echo "<select name='category'><br />";
			while ($catrow=mysql_fetch_assoc($catfind))
			{
				echo "<option value='".$catrow['cat_id']."'>".$catrow['cat_name']."</option>";
			}
			mysql_free_result($catfind);
			echo "</select></td>";
            echo "</tr>";
			echo "<tr>";
            echo "<td width='20%' height='100'>";
            echo "Beskrivelse: </td><td width='70%'><textarea name='desc' rows='15' cols='45' >" . $_SESSION['desc'] . "</textarea></td>";
            echo "</tr>";
            echo "<tr>
            <td width='20%' height='25'>";
            echo "</td><td width='70%'>";
            echo "<input type='submit' name='add' value='Legg til'></td></form>";
            echo "</tr>";
            echo "</table>";
		}

...

 

// Getting the post info into normal vars for database use
				$_POST['name'] = $name;
				$_POST['url'] = $url;
				$_POST['category'] = $cat;
				$_POST['desc'] = $desc;

				// Insert all the info into the database
				$sql3 = "INSERT INTO link (link_id, link_title, link_url, link_desc, link_posted, user_id, cat_id) 	VALUES ('$iddd','$name','$url','$desc','$now','$userID','$cat')";
				$result3 = mysql_query($sql3) or die(mysql_error());

 

 

Hele scriptet: http://pastebin.com

 

(Har også problem med at

// Add one to get a new ID
                                       $stupid = 1;
                                       $iddd = $idd + $stupid

 

Ikke funker. Noen som veit hvorfor ikke iden blir økt med en? (Klipt ut av hele scriptet))

Endret av TheClown
Videoannonse
Annonse
Skrevet

Under den siste linjen du har postet:

var_dump($sql3);

 

Det er meget mulig at spørringen din ikke inneholder det du tror den vil gjøre. Dette på grunn av at

$_POST['name'] = $name;
$_POST['url'] = $url;
$_POST['category'] = $cat;
$_POST['desc'] = $desc;

meget sansynlig skulle ha vært

$name = mysql_real_escape_string($_POST['name']);
$url = mysql_real_escape_string($_POST['url']);
$cat = mysql_real_escape_string($_POST['category'] );
$desc = mysql_real_escape_string($_POST['desc']);

Skrevet

$iddd = $idd + $stupid

 

Den første variabelen er: $iddd

Den andre variabelen er: $idd

 

I en løkke så vil alltid $iddd være $idd + 1 uansett hvor mange ganger løkken går.

Skrevet

Når det er sagt så er det et par grunnregler du bør lære deg:

 

1: Alltid feilsjekk informasjon som kommer fra eksterne kilder (også databaser) slik at du er sikker på at dette ikke er ting som kan ødelegge for deg

2: Bruk alltid beskrivende variabelnavn. Hvis du har flere spørringer så bruk gjerne tabellnavnet i variabelene som brukes til å behandle spørringen med. Variabler som $sql424 er veldig uheldige.

3: Når du skal feilsøke noe som mangler så legg til kall i skriptet som skriver ut verdiene underveis. På den måten så kan du finne ut hvor verdiene forsvinner.

Skrevet (endret)

Nei, nei :p

 

Jeg har skjekket databasene flere ganger, og jeg vet at den skriver riktig info. Problemet er det at jeg tror ikke at jeg har satt til $_POST ordentlig på kategori.

 

And IDen; En loop heter ut den høyeste IDen som finnes i databasen og slutter loopen (altså bare en løkke), så fører jeg databaseinfoen vidre til en vanelig variable. Så skal jeg legge til 1 slik at variablen blir en høyere enn det den orginalt var.

 

Problemet er bare det at loopen henter og skriver samme verdi, som akkurat nå er 10.

Endret av TheClown
Skrevet
En loop heter ut den høyeste IDen som finnes i databasen og slutter loopen (altså bare en løkke)

Bare til info. Da trenger du ingen løkke ;) Bare å kjøre en mysql_fetch_row/assoc/array så vil verdien bli hentet ut en gang.

Skrevet

// Get the highest ID from the database
                                       $idget = "SELECT link_id FROM link where link_id = (SELECT max(link_id) FROM link)"; $resultt=mysql_query($idget) or die(mysql_error());
                                       while ($roww=mysql_fetch_assoc($resultt))
                                       {
                                               $idd = $roww['link_id'];
                                       }
                                       mysql_free_result($resultt);

                                       // Add one to get a new ID
                                       $stupid = 1;
                                       $iddd = $idd + $stupid;

 

Loopen er unødendig?

Skrevet (endret)

PHP

<?php

// Get the highest ID from the database

$idget = "SELECT link_id FROM link where link_id = (SELECT max(link_id) FROM link)";

$resultt=mysql_query($idget) or die(mysql_error());

$roww=mysql_fetch_assoc($resultt)

$idd = $roww['link_id'];

mysql_free_result($resultt);

 

// Add one to get a new ID

$stupid = 1;

$iddd = $idd + $stupid;

?>

 

Gir vel samme resultat

Endret av Runar0
Skrevet

Jeg ville ha gjordt det slik, og sql ser unødvendig tungvint ut

 

PHP
<?php

$idget "SELECT max(link_id) id FROM link";

$idd=mysql_fetch_assoc(mysql_query($idget));

echo $idd['id'];

 

// evt hvis man ønsker maks id + 1

$idget "SELECT max(link_id)+1 id FROM link";

$idd=mysql_fetch_assoc(mysql_query($idget));

echo $idd['id'];

?>

Skrevet

if(!isset($_POST['add']))
  	{
    echo "<table width='29%' border='0' align='center' >";
             echo "<tr>";
    echo $text;
             echo "<td width='20%' height='25'>";
             echo "<form action='".$_SERVER['self']."' method='post'>";
             echo "Name: </td><td width='70%'><input type='text' size='45' name='name' value='" . $_SESSION['name'] . "'></td>";
             echo "</tr>";
             echo "<tr>";
             echo "<td width='20%' height='25'>";
             echo "URL: </td><td width='70%'><input type='text' size='45' name='url' value='" . $_SESSION['url'] . "'></td>";
             echo "</tr>";
    echo "<tr>";
    echo "<td width='20%' height='25'>";
    echo "Kategori: </td><td width='70%'>";
    // Find all categoryeis
    $catf = "SELECT cat_name, cat_id FROM cat ORDER BY cat_id DESC";
    $catfind = mysql_query($catf) or die(mysql_error());
    echo "<select name='category'><br />";
    while ($catrow=mysql_fetch_assoc($catfind))
    {
    	echo "<option value='".$catrow['cat_id']."'>".$catrow['cat_name']."</option>";
    }
    mysql_free_result($catfind);
    echo "</select></td>";
             echo "</tr>";
    echo "<tr>";
             echo "<td width='20%' height='100'>";
             echo "Beskrivelse: </td><td width='70%'><textarea name='desc' rows='15' cols='45' >" . $_SESSION['desc'] . "</textarea></td>";
             echo "</tr>";
             echo "<tr>
             <td width='20%' height='25'>";
             echo "</td><td width='70%'>";
             echo "<input type='submit' name='add' value='Legg til'></td></form>";
             echo "</tr>";
             echo "</table>";
  	}

 

Når du først skal skrive ut såpass mye HTML-kode, lønner det seg å benytte seg av EOF, eller heredoc.

 

Lite eksempel:

 

PHP

<?php

$minVariabel "Hei på deg din sei!:)";

$output = <<<EOF

<html>

<head>

<title>PHP-testside</title>

</head>

<body>

<h1>$minVariabel</h1>

<br>

<h2>$minVariabel</h2>

<br>

<p>$minVariabel</p>

</body>

</html>

EOF;

 

echo $output;

?>

 

Skrevet (endret)

Kan være greit å legge ved en link til en eller flere sider om forklarer litt mer on hva EOF/Heredoc gjør for noe. Jeg fant denne: http://en.wikipedia.org/wiki/Here_document

 

Men vil ikke <pre> tagen gjøre det samme ?

 

Jeg pleier alltid å bruke \n (linjeskift) for å gjøre kildekoden mer lesbar, men dette ser ut til å være en enklere metode, lært noe i dag og :)

Endret av crowly
Skrevet

Men jeg lurer på en ting. Forenkler jeg script / alt en del hvis jeg setter sammen siden med mid PHP & Javascript?

 

Har b.la tenkt til å legge inn popup @ empty felt.

Skrevet

Kan veldig lite javascript, så jeg vil si kanskje. En ting å huske på når man bruker javascript er at brukern kan skru av dette, og da er det ikke gitt at ting vil fungere som tiltenkt. Er vel mulig å legge inn sjekker for dette, og så kjøre scriptet deretter.

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