עבור לתוכן

PHP, בעיה בIF-ELSE

Featured Replies

פורסם

התחלתי ללמוד את השפה, ואני מנסה לבנות דף של משחק מלחמה (שני משתמשים - מי שיש לו את המספר הגבוה מנצח).

זה הקוד שכתבתי. הבעיה היא שלא משנה באיזה כפתור אני בוחרת (המשך במשחק / יציאה), הוא מבצע את הIF הראשון (להתחיל משחק חדש):



<?php

session_start();
?>

<html dir = "rtl">

<?php
if((!isset($_POST["submit"]))||((isset($_POST["select"]))&&($_POST["opt"]=="n"))||(isset($_POST["new"])))
{
?>
<body>

<form action ="game.php" method ="post">
<font size ="4" color ="blue">שלום וברוכים הבאים למשחק מלחמה</font><br>
<font size ="3" color ="black">הכניסו את שמות השחקנים</font><br>

שחקן 1: <input type ="text" name= "user1"> <br>
שחקן 2: <input type ="text" name= "user2"><br><br>
<input type ="submit" name= "submit" value ="התחל">

</form>

</body>
<?php

$_SESSION["sum1"] = 0;
$_SESSION["sum2"] = 0;
$_SESSION["flag"] = "false";
}
else
{
if((isset($_POST["select"]))&&($_POST["opt"]=="e"))
{
echo "תודה ששחקתם";
if($_SESSION["sum1"]>$_SESSION["sum2"])
{
echo $_SESSION["player1"]." ניצח<br>";
}
else if($_SESSION["sum1"]>$_SESSION["sum2"])
{
echo $$_SESSION["player2"]." ניצח<br>";
}
else
{
echo "תיקו<br>";
}

?>
<body>
<form action = "game.php" method = "post">
<br>
<input type = "submit" name = "new" value = "משחק חדש">

</form>
</body>

<?php

session_destroy();
}

$_SESSION["flag"] = "true";
$_SESSION["player1"] = $_POST["user1"];
$_SESSION["player2"] = $_POST["user2"];

$randNum1 = rand(1,10);
$randNum2 = rand(1,10);

echo $_SESSION["player1"]." הגריל ".$randNum1."<br>";
echo $_SESSION["player2"]." הגריל ".$randNum2."<br>";

if($randNum1>$randNum2)
{
echo $_SESSION["player1"]." ניצח<br>";
++$_SESSION["sum1"];

}
else if($randNum2>$randNum1)
{
echo $_SESSION["player2"]." ניצח<br>";
++$_SESSION["sum2"];
}
else
{
echo "תיקו<br>";
}

if($_SESSION["flag"]=="true")
{
echo "<br>סך ניצחונות של ".$_SESSION["player1"]." הוא ".$_SESSION["sum1"]."<br>";
echo "סך ניצחונות של ".$_SESSION["player2"]." הוא ".$_SESSION["sum2"]."<br><br>";
}

?>

<body>
<form action ="game.php" method ="post">

<input type = "radio" name = "opt" value ="p">המשך לשחק<br>
<input type = "radio" name = "opt" value ="n">משחק חדש<br>
<input type = "radio" name = "opt" value ="e">יציאה<br><br>

<input type = "submit" name = "select" value ="המשך">

</form>
</body>
<?php
}
?>
</html>


פורסם

הבעיה היא ש-PHP לא יכולה לפענח משפט תנאי שבתנאי מצויין גם OR ו-OR וגם AND ביחד. את צריכה לפצל את התנאי ל if\elseif.

לדוגמה, נניח שטופס ההתחלה הושם לתוך פונקציה בשם Get_started() (מטעמי נוחות), ככה התנאי צריך לבוצע בקוד:


if (!isset($_POST['submit']))
{
echo get_started();
}
elseif (isset($_POST['select']) AND $_POST['opt'] == "n")
{
echo get_started();
}
elseif (isset($_POST['new']))
{
echo get_started();
}
else
{
// שאר תוכן המשחק נכנס פה
}

פורסם

בטח שהמפענח יודע להשתמש בהם בצורה משולבת.

פותחת האשכול, יתכן שאת שולחת את הנתונים פשוט בלי ערך?

תנסי להשתמש ב empty


if((empty($_POST["submit"]))||((isset($_POST["select"]))&&($_POST["opt"]=="n"))||(isset($_POST["new"])))

פורסם

^ ירח אפל, בכל ההרבה זמן שאני מתכנת הצורה הזו בחיים לא עבדה. PHP לגמרי מתבלבלת כשאתה עושה את זה בצורה הנ"ל.

פורסם

כששמים סוגריים כמו שצריך (והיא שמה סוגריים), אז אין שום בלבול.

פורסם

שימי לב שאת בודקת אם הערך "Submit" נמצא, למרות שבטפסים הוא לא נמצא.

פורסם

הוא נמצא, זה כפתור ה-Submit.

פורסם

זה לא השם שלו...

פורסם
<input type = "submit" ----name = "select"---- value ="המשך">

פורסם

name="select"

מה לא ברור? זה לא השם שלו, זה הסוג, ובגלל זה כל פעם שהיא בודקת אם הוא לא נמצא , הוא באמת לא נמצא ולכן תמיד מתבצע קטע הקוד הראשון

פורסם

עריכה- סורי, הבנתי על מה אתה מדבר. מוזר שפספסנו את זה.

השם של פקד ה Submit הוא בכלל Select ולא Submit.

אני חושב שפותחת הת'רד כבר עלתה על זה מזמן אז הת'רד מיותר...

פורסם

^ ירח אפל, בכל ההרבה זמן שאני מתכנת הצורה הזו בחיים לא עבדה. PHP לגמרי מתבלבלת כשאתה עושה את זה בצורה הנ"ל.

החלק המודגש נהיה מאוד לא הגיוני לאור התגובה האחרונה שלך שלא מבינה מה זה type ומה זה name ועם איזה פרמטר בודקים את הערך של הפקד...

אגב לגבי השילוב של and ו-or, ברור שזה אפשרי. php ממש לא "לגמרי מתבלבלת", מי שלגמרי מתבלבל הוא כנראה אתה.. בדיוק כמו בשיעורי חשבון, עם פעולות חיבור/חיסור/כפל/חילוק - הכל מתבצע לפי הסדר הכרונולוגי כברירת מחדל, ואם אתה רוצה לקבוע משהו אחר - שים סוגריים, ושים אותם כמו שצריך.

פורסם

התגובה האחרונה שלי נערכה, חשבתי שהוא מתכוון שה name מציין איזה סוג האינפוט ולא שמתי לב שהיא קראה לפקד בכלל Select.

ואני לא מתבלבל, השיטה הנ"ל אף פעם לא עבדה גם עם סוגריים. אולי יש בעיה כלשהי עם המאיץ שאני עובד איתו אם אתה והשאר אומרים שזה עובד.

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים