När jag lägger formuläret som en del i php-filen får jag följande varning Varifrån kommer $searchitem? searchitem kommer från formuläret som ser ut såhär Jo, jag visste att det inte skulle hjälpa. Det var bara tips för snyggare och effektivare kod. OK IC Har du register_globals aktiverat på servern? Om inte (eller om du inte vet), pröva att lägga till raden register_globals = Off Då vill jag att du lägger in dessa rader, kryssar i en eller ett par rutor, skickar formuläret och sedan visar mig vad som har skrivits ut av dem: Hade du då kryssat i någon kryssruta eller skrivit något i textrutan? Jag har gjort alla varianter och dessutom flyttat runt de tre kodraderna i scriptet men ingen förändring. En sak jag upptäckte nu var att i URL så blir det olika beroende på om jag fyller i "Födelseår" elle ej. Så här ser det ut utan födelseår. Åh... nu ser jag... Du har två form-märken: Ja tänk man inte såg det! Men det första ska vara kvar och sen tar jag bort det andra så det står såhär Så här kan du ju för fan inte ha det: Som jag skrev förut så fungerade det inte med att ta bort första "FORM" men däremot med det andra vilket ju verkade konstigt precis som du skriver. Nu har jag startat om allt och plockat bort första form och då ser det ut som om arrayen fungerar och den skriver ut mina sökbegrepp och svaret blir detta med två kryssrutor ifyllda. Det blir lika med en också förutom att då står det naturligtvis bara en uppgift: <b>print "<b><center>Databasutskrift - $searchitem</center></b><br><br>";</b> PUUUHHH!!!!Invalid argument supplied for foreach() mm
Warning: Invalid argument supplied for foreach() in C:\xampp\htdocs\Kallsok.php on line 20
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in C:\xampp\htdocs\Kallsok.php on line 36
Database Output
Såhär ser koden ut fram till sista varningen
<?php
/*Concat Checkbox Values into One string separated by commas for Select*/
foreach($searchitem as $value){
$search=$search.",".$value;
}
/* Remove Leading comma*/
$searchit=substr($search,1);
/*Show the selected fields*/
print "$searchit";
$db="kall300db";
$link = mysql_connect("localhost","root","");
if (! $link)
die("Couldn't connect to MySQL");
mysql_select_db($db , $link)
or die("Couldn't open $db: ".mysql_error());
$result=mysql_query( "SELECT $searchit FROM kall where Helnamn LIKE '%$where%'" );
$num=mysql_num_rows($result);
Vad gör jag för fel? Rubriken på tabellen skrivs ju ut "Database output"
Lägger jag formuläret för sig och kallar på scriptfilen får jag upp formuläret men inga poster. Int ens rubriken "Database output"
Och att det finns poster som ska motsvara sökbegreppet jag anger är 100!
Jag har Apache 2.2.11(WIN32), php 5.2.8, mysql 5.1.30 Sv: Invalid argument supplied for foreach() mm
Tips:
Du kan byta ut
foreach($searchitem as $value){
$search=$search.",".$value;
}
/* Remove Leading comma*/
$searchit=substr($search,1);
mot det kortare
$searchit = implode(',', $searchitem);
Dessutom finns ingen anledning att stoppa in en ensam variabel i en sträng som du gör på raden
print "$searchit";
Det går lika bra med
print $searchit;
Sv:Invalid argument supplied for foreach() mm
<body>
<form>
<h4>Sök efter:</h4>
<form method="POST" action="Kallsok2.php">
<input type="checkbox" name="searchitem[]" value="Familjnr">Familjenr<br>
<input type="checkbox" name="searchitem[]" value="Helnamn">Namn<br>
<input type="checkbox" name="searchitem[]" value="Födelseår">Födelseår<br>
<br>
Parenteserna ska indikera array där foreach förut skulle ha plockat ut elementen
<h4>Med:</h4>
Namnet: <input type="text" name="where" size="20">
<input type="submit" value="Submit"><input type="reset">
</form>
Jag satte in implode i stället för foreach som Du föreslog liksom printändringen. Då får jag följande rsultat:
Warning: implode() [function.implode]: Invalid arguments passed in C:\xampp\htdocs\Kallsok2.php on line 22
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in C:\xampp\htdocs\Kallsok2.php on line 35
Database output -
Dvs först skrivs formuläret ut sedan felmeddelandena och därefter skrivs rubriken "Database output" men inga poster. Jag skriver "fnutt" "komma" 2 ggr i implode som jag fattat det.
Så det blev fel även med implode och på samma ställen.
Verkar ligga någon annanstansmen var?
Sv: Invalid argument supplied for foreach() mm
Får du felmeddelandet när någon av kryssrutorna är ikryssad eller bara när ingen är ikryssad?Sv:Invalid argument supplied for foreach() mm
men det spelar ingen roll för när jag kallar på sidan får jag direkt felmeddelandena och om jag fyller i en, två eller alla kryssrutorna samt ett sökbegrepp så blir det "lyckligtvis" samma fel!
Jag kör koden i Dreamweaver och där kan jag ju kära kodkoll men allt verkar OK.
Resten av koden kollar om kryssrutorna är ifyllda och skriver ut bara värden för de som är ikryssade.
Så vad göra?Sv: Invalid argument supplied for foreach() mm
extract($_POST);
i början av skriptet.
Sv:Invalid argument supplied for foreach() mm
Jag la in
<code>
extract($_POST);
</code>
före implode men inte hjälpte det!Sv: Invalid argument supplied for foreach() mm
echo '<pre>';
print_r($_POST);
echo '</pre>';
Sv: Invalid argument supplied for foreach() mm
Sv:Invalid argument supplied for foreach() mm
<code>
http://localhost/Kallsok2.php?searchitem[]=Familjnr&searchitem[]=Helnamn&where=Rolf
</code>
Med "Födelseår" ikryssat så blir det såhär:
<code>
http://localhost/Kallsok2.php?searchitem%5B%5D=Familjnr&searchitem%5B%5D=Helnamn&searchitem%5B%5D=F%F6delse%E5r&where=Rolf
</code>
Men det är väl så att våra svenska ö och å ställer till det kan jag tro
Den ska ju skriva ut vilka fält som sökts, men det gör den inte heller.Sv: Invalid argument supplied for foreach() mm
<code>
<form>
<h4>Sök efter:</h4>
<form method="POST" action="Kallsok2.php">
</code>
Det är det första som används. Eftersom method inte är angivet på det, används GET.
Plocka alltså bort det första form-märket.Sv:Invalid argument supplied for foreach() mm
<code>
<title>Sök efter Kallbor</title>
</head>
<body>
<form>
<h4>Sök efter:</h4>
<method="POST" action="Kallsok2.php">
<input type="checkbox" name="searchitem[]" value="Familjnr">Familjenr<br>
<input type="checkbox" name="searchitem[]" value="Helnamn">Namn<br>
<input type="checkbox" name="searchitem[]" value="Födelseår">Födelseår<br>
</code>
Jag lät det kodsnuttar du velat lägga till tidigare ligga kvar och då blir resultatet detta när jag kryssar i två rutor, men ingen utskrift av "Rolfar":
<code>
Sök efter:
Familjenr
Namn
Födelseår
Med:
Namnet: Familjnr,Helnamn
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in C:\xampp\htdocs\Kallsok2.php on line 38
Array
(
[searchitem] => Array
(
[0] => Familjnr
[1] => Helnamn
)
[where] => Rolf
)
Databasutskrift - Array
</code>
Tar jag sedan bort kodsnuttarna får jag tillbaka båda warningarna såhär:
<code>
Warning: implode() [function.implode]: Invalid arguments passed in C:\xampp\htdocs\Kallsok2.php on line 23
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in C:\xampp\htdocs\Kallsok2.php on line 38
Databasutskrift -
</code>
Nu verkar i vart fall arryen innehålla de värden jag ger den men jag lyckas inte få ut dom.Sv: Invalid argument supplied for foreach() mm
<code>
<form>
<h4>Sök efter:</h4>
<method="POST" action="Kallsok2.php">
</code>
Det finns inget godkänt element som heter "method". Attributet method skall ligga inne i form-taggen.Sv:Invalid argument supplied for foreach() mm
<code>
Familjnr,Helnamn
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in C:\xampp\htdocs\Kallsok2.php on line 37
Array
(
[searchitem] => Array
(
[0] => Familjnr
[1] => Helnamn
)
[where] => Rolf
)
Databasutskrift - Array
</code>
Jag har kollat igenom om stor/liten bokstav blivit fel men inte. Tar jag bort ditt tillägg om array-utskrift så skriver den ändå
Databasutskrift - Array
Missar jag något i själva printen?
<code>
$num=mysql_num_rows($result);
mysql_close();
print "<b><center>Databasutskrift - $searchitem</center></b><br><br>";
print "<table cellpadding=2 cellspacing=0 border=1>";
</code>
Vi har ju konstaterat att det finns ngt i arrayen.Sv: Invalid argument supplied for foreach() mm
$searchitem är en array och då skriver PHP bara ut "Array" när man använder print eller echo.
För att få information om vad som går fel i databasfrågan, ändra
<code>$result=mysql_query( "SELECT $searchit FROM kall where Helnamn LIKE '%$where%'" ); </code>
till
<code>
$sql = "SELECT $searchit FROM kall where Helnamn LIKE '%$where%'";
$result=mysql_query( $sql ) or die(mysql_error() . '<pre>' . $sql . '</pre>');
</code>Sv:Invalid argument supplied for foreach() mm
Tack för all hjälp.
Även detta sista löste sig när jag gick igenom koden och upptäckte att jag hade utelämnat ett "E" i "Familjenr" i formuläret.
Nu fungerar det ypperligt.
Det var alltså fler felaktigheter:
<code>
foreach-----blev implod----
extract($_POST)----som man tydli8gen inte ska använda hur som helst
form-------dubblerad
print av söksträngen förbättrad
felstavning i formuläret
</code>
Tack än en gång för din välvilja att hjälpa en pensionär som inte kodat sedan RGPII:s dagar, kanske du inte ens känner till detta språk för IBM-maskiner såsom S38. Men en sak ska man vara klar över.
GE ALDRIG UPP!
Kolla sedan på en problemställning som inte är ett kodproblem utan ett mer generellt som jag ska lägga in senare och rör SELECT upprepad. Ha det!